☰
SAP特殊采购类型80详解:跨工厂生产与MRP传导全链路
2026/9/29 23:43:48 网站建设 项目流程

做了几年SAP项目,我遇到过不少用户在“半成品跨工厂生产”这个问题上栽跟头:成品厂缺料,MRP跑得也欢,但就是没法让上游工厂按需求直接“生产”出来并补到仓库。有人用20号特殊采购类型硬做,有人用普通采购申请转生产订单,结果单据链一团乱麻,财务科目也对不上。其实SAP早就给了标准答案——特殊采购类型80,专门解决“需求在这家工厂,生产却在那家工厂”的场景。这篇东西我会从业务本质、后台配置、MRP传导链路、完整测试脚本再到真实排错,把80号这条链路一次讲透,给正在做跨工厂生产项目的实施顾问和关键用户一些可落地的参考。

1. 特殊采购类型80的业务本质:一条“需求方发起、生产方执行”的过桥单据

1.1 80号到底解决什么问题

先想清楚一个业务画面:你们有工厂A负责生产半成品,工厂B负责成品装配,B的成品BOM里挂了这个半成品。半成品的库存放在B工厂,但生产动作发生在A工厂。如果只是用普通采购流程,B工厂要么下采购申请让采购员找供应商买,要么做一张20号跨工厂转储订单让A工厂直接发货——可A工厂自己没有现成的半成品库存,它得先生产出来才能发货。这个时候B工厂缺的不是“采购需求”,而是“生产需求”;A工厂需要的东西也不是“销售订单”,而是一张能触发生产订单的跨工厂转储单。

特殊采购类型80干的事情,就是让B工厂跑MRP的时候,系统在半成品物料上产生一个采购申请,这个采购申请再经由转储订单传到A工厂,A工厂的MRP或者产能计划员看到这张转储订单后,把它转成生产订单。等A工厂生产完工入库,再通过转储交货流程把货从A工厂出库、B工厂收货。整个链条上,需求计划在B工厂闭环,生产执行在A工厂闭环,两头各司其职。

那它跟20号有什么区别?20号是纯库存调拨,A工厂必须已经有可用库存,B工厂下了转储订单,A工厂直接发货,不存在生产环节。80号则是在50号外协加工、20号跨工厂转储、40号计划订单等特殊采购类型里,唯一把“供应商处的生产环节”纳入常规MRP循环的类型——当然,这里的“供应商”在实际操作中往往就是自己的另一个工厂。

1.2 和20、30、45、52类采购类型的差异对照

我在项目上经常需要跟用户解释80号的位置,这里拿一张表直接说清楚:

特殊采购类型名称需求工厂的行为供应端的行为适用场景
20跨工厂转储产生转储订单,直接调拨供货方直接发货供货方有富余库存
30跨公司转储产生公司间转储订单,走公司间发票发货方直接发货并开票两个不同公司代码之间调拨
45外协加工产生外协采购订单,发料给供应商供应商加工后送回需要外部供应商加工
50寄售供应商库存存放在本厂,用了才结算供应商补货寄售补货场景
52虚拟件由高层级BOM组件决定需求不库存简化BOM结构用
80跨工厂生产产生转储订单供货方内部生产后发货本集团工厂间“生产+转移”

对比后你会发现,80号是20号的“生产版”:链路比20号多了一个“生产订单”环节,价值流也相应从“库存转移”变成了“生产成本发生+库存转移”。在项目蓝图阶段,只要看到“需要在A工厂生产,但库存和需求都放在B工厂”的表述,第一反应就应该是80号。

1.3 80号链路里的三张核心单据

为了后面测试流程好理解,先把三张单据的内在逻辑拎出来:

  • 采购申请(PR):由B工厂MRP运行产生,物料号是半成品,工厂是B工厂,但在采购申请上会带有“生产工厂= A工厂”或者说“提供工厂= A工厂”的信息,这是80号最关键的特征。
  • 转储订单(STO):把采购申请转成库存转储订单,抬头是B工厂(收货工厂),行项目里的“供货工厂”是A工厂。这张STO承载了物料从A到B的交货逻辑,包括装运点、运输路径、收货工厂的仓库。
  • 生产订单:计划员在A工厂看到STO行项目后,用CO41或者MD04里的“转生产订单”把STO需求项转为生产订单,生产订单完工后,A工厂的库存增加,库存归属仍然是A工厂,只是后来通过STO交货把货从A工厂账面挪到B工厂。

理顺这三张单据之间的关系,后面做测试就有方向了。

2. 启用80号之前:主数据与后台配置的完整勾稽清单

2.1 物料主数据里那些容易被忽略的字段

80号不是只改一个字段就能跑通的。物料主数据上的设置我建议按下面这个顺序逐个核:

  • 首先是MRP 1视图的基本MRP类型(比如PD)、MRP组、采购类型。采购类型如果填了F(外部采购),后面MRP就可能不按你的预想走,建议设成E(自产)或者空由系统默认,最终采购类型在80号场景下会落到F(因为产生的是采购申请),但生产工厂侧的物料主数据采购类型最好保持E,否则创建生产订单时会有干扰。
  • 其次是MRP 2视图的“特殊采购类型”字段,填80。填完之后,系统会在其后出现或者要求维护“提供工厂/生产工厂”字段,这里要把A工厂的工厂代码填进去。这一步是最容易漏的——很多新手只填了80,没填供应工厂,MRP跑完MD04一看,采购申请上根本没有转储信息。
  • MRP 3视图如果物料启用了批量管理,要注意“批次确定”的设置,否则后面STO和交货单过账时会卡在批次上。对于初学者或测试环境,建议先关掉批量管理,把链路跑通了再研究批次策略。
  • 还要检查“收货处理时间”“计划交货时间”“货期”等字段。80号链路本来单据就以天为单位多,如果货期日期没设置好,MRP计算可用性时会给出一个不切实际的建议日期,导致计划员误判。

2.2 A工厂侧必须有货源信息

很多人会在这里发现一个大坑:B工厂跑完MRP,也生成了采购申请,但用ME59N或ME21N把采购申请转成转储订单时,系统直接报一个“必须维护货源清单才能创建采购订单”或者干脆不给出可用的货源。为什么?

因为80号产生的采购申请本质上是一条“外部采购”需求,虽然供货方是内部工厂,但系统仍然按照货源规则做校验。你需要在A工厂(实际是供货工厂视角)给这个半成品物料维护货源清单,具体路径是事务代码ME01,维护A工厂供应商(可以是内部供应商,也可以是本工厂对应的内部供货工厂代码)。对大多数项目来说,最省事的做法是把“工厂A”作为固定的货源维护进去,然后采购申请转单时系统自动带出。

另外,如果项目里启用了配额协议,则要检查配额协议的分配比例,否则MRP也可能因为配额规则把需求分配到你意想不到的采购源。

2.3 后台配置:装运数据、ATP检查、存储地点

主数据之后是后台配置,我按三次排查经历总结出三个最容易出问题的配置点。

第一个是“定义工厂的装运数据”。转储订单的交货处理需要装运点信息,这个配置路径在SPRO里大致在“物料管理-采购-采购订单-设置库存调拨订单-定义工厂的装运数据”。你需要分别给A工厂和B工厂定义装运点,并且维护从A工厂到B工厂的运输区域和运输路径。如果没有这些配置,VL10B或VL02N做装运单时系统会报“无法确定装运点”之类的错误。

第二个是ATP检查规则。转储订单里的计划和交货行为受ATP影响很大,尤其是当STO的工厂间补货遇到“按需求交货”规则时。如果ATP规则配成了341(按库存转储的“无检查”)而你的库存又不齐,系统可能还是按预想给建议,这从计划角度看反而是个优点;但如果你希望严格按需求跑,项目里就可能配342/343等规则。我的建议是测试环境先确认工厂级别的ATP检查规则是不是“不允许短缺”,否则后面用CO41转生产订单时需求日期会出现错位。

第三个是“存储地点MRP视图”(事务代码OMIR)。如果你在B工厂收货时希望进入某个特定存储地点,而半成品在B工厂的MRP视图又没有设置默认收货存储地点,转储订单创建时系统会让你手工填,或者收货时报存储地点错误。提前把MRP的“接收存储地点”维护好,能少一次无意义的报错。

3. MRP如何从“需求”一路跑出转储订单与生产订单

3.1 在B工厂跑MRP:MD04里到底发生了什么

需求端通常这样起:新建一张B工厂的成品计划订单(MD61/MD02),或者直接跑B工厂整体MRP(MD01)。运行完毕后用MD04查看半成品物料的工厂B库存/需求清单,你会看到:

  • 第一行:来自上层成品的“订单需求”,数量等于成品计划订单的需求数量;
  • 第二行:MRP为这个半成品生成的“采购申请”,在“收货/需求”栏里显示PR号,同时在“供应商”或“供货工厂”字段能看到A工厂的代码;
  • 如果配置正确,该采购申请的“交货日期”是根据成品交货日期和主数据里维护的提前期倒推出来的。

我见过很多人卡在这一步:跑完MRP,MD04里只看到一个“计划订单”,而不是“采购申请”。这多半就是因为半成品在MRP 2视图里的“采购类型”还是E,或者特殊采购类型没有正确保存。正常配置后,MRP对80号物料生成的结果就是采购申请,外行的判断标准很简单——MD04里的栏目如果出现“PR/采购申请”和“供货工厂”,就说明这条链路的第一步已经通了。

3.2 把采购申请转成转储订单:ME59N/ME21N的细节

有了采购申请,下一步是转成转储订单。手工可以用ME21N直接按“库存转储”按钮操作,批量可以用ME59N或者旧事务ME59。我这里讲一个容易被忽略的细节:如果物料启用了货源管理,则转单时系统会严格按照货源清单和配额协议找供货方;如果货源清单里你维护的是内部供应商,那STO抬头里会出现“供应商”字段,行项目里出现“供货工厂”字段,交货方式是“空”(不是国外订单的D就是空)——对,转储订单本质上也是采购订单的一个变种,抬头供应商是A工厂对应的内部供应商号,行项目的“供货工厂”是A工厂,收货工厂是B工厂。

创建完STM订单后,一定要去ME23N看两个地方:

  • 第一处是行项目的“装运”页签,确认装运点和运输路径已经带出来了;
  • 第二处是“计划行”页签,确认计划行类型是NB或B2,需求日期是否满足计划要求。

STO创建成功后,B工厂的需求已经“内部消化”了,MD04里原采购申请会被STO覆盖,显示为一条“订单行”。

3.3 生产需求如何落到A工厂:CO41接管STO行

STO创建完毕,A工厂的计划员怎么知道要生产了?答案是MD04里看A工厂的半成品物料,你会看到一条“转储订单”行,它表示的是一条“来自B工厂的需求”。这时候有两种做法:

  • 手工方式:事务代码CO41,输入A工厂和半成品物料号,系统列出所有待转为生产订单的转储订单行,勾选后转成生产订单。
  • 批量方式:用MD04直接选中STO行,点击“转生产订单”图标,系统自动调出相关BOM和工艺路线。

生产订单创建后,生产执行就跟标准生产流程一模一样了:MIGO发原材料、CO11N报工、MIGO对生产订单收货。到这里,A工厂的账面上增加了半成品库存——但这笔库存的“物权视图”还属于A工厂。

3.4 从A工厂到B工厂的“最后一公里”:发货过账与收货过账

生产完工后,需要把货从A工厂运到B工厂。这一步会走转储订单的交货流程:先用VL10B/VL10E(或用VL02N)对STO创建外向交货单,做Picking和装运发运;接着在A工厂做发货过账(VL02N的PGI,后台调用的通常是对STO的货物移动),此时A工厂库存减少,货物处于“在途”状态;最后B工厂收货,用MIGO参照STO或外向交货单做收货过账,B工厂库存增加。

在途库存的显示口径很容易把人搞晕。MB52在每个工厂看都可能觉得货“消失”了,其实它在“在途库存”里。想看得清楚,可以事务代码MB5T、MBLB或者直接查库存概览MMBE,勾选“在途/运输库存”列,A工厂的库存会显示到B工厂名下,B工厂此时刷新MMBE就能看到未清的在途数量。

4. 完整测试流程:从主数据准备到库存落地

4.1 测试前的准备清单

我每次做一个新的特殊采购类型80测试,都会先准备下面这张清单,免得测到一半发现缺了这个缺了那个:

编号准备项事务代码/路径状态
1创建A工厂半成品物料主数据MM01必填
2创建B工厂半成品物料主数据MM01必填
3创建成品物料主数据(B工厂)MM01必填
4维护成品BOM(B工厂)CS01必填
5维护半成品BOM(A工厂)CS01必填
6维护A工厂工作中心与工艺路线CR01/CA01必填
7维护物料货源清单(A工厂视角)ME01必填
8维护信息记录(可选择)ME11建议
9维护A/B工厂的装运点与运输路径SPRO-OMDT必填
10检查MRP组和计划日历OMDC/OMDT必填
11检查工厂级ATP规则SPRO-OMB2建议
12检查半成品MRP2/4视图特殊采购类型MM02必填

这张清单在项目上还可以直接当作Unit Test自检表,一条条打钩。

4.2 分步测试脚本:输入什么、看什么结果

下面的测试脚本我习惯按“主数据—MRP—采购—生产—发货—收货”六段来写,发布的版本在训新人时直接照着操作就行。

脚本Step 1:主数据准备

  • 事务代码:MM02(或MM01)
  • 操作:为半成品物料在B工厂维护“特殊采购类型”为80,同时维护“提供工厂/生产工厂”为A工厂;保存。
  • 预期:系统无错误,物料主数据MRP2视图的“特殊采购类型”字段显示80,“提供工厂”显示A工厂。

脚本Step 2:创建B工厂的成品计划订单

  • 事务代码:MD61
  • 操作:对成品输入数量100,计划工厂为B工厂,保存。
  • 预期:计划订单创建成功,状态为“未处理/已建立”。

脚本Step 3:在B工厂运行MRP

  • 事务代码:MD01(整体MRP)或MD02(单物料)
  • 操作:输入B工厂,处理模式“3(删除并创建计划行)”,运行。
  • 预期:MRP运行结束无致命错误消息。

脚本Step 4:检查B工厂半成品MD04

  • 事务代码:MD04
  • 操作:输入半成品+B工厂,回车查看库存/需求清单。
  • 预期:可以看到“采购申请”行;该行需求数量=100;在“供货/生产工厂”列可见A工厂。

脚本Step 5:将采购申请转成转储订单

  • 事务代码:ME59N 或 ME21N
  • 操作:用ME59N勾选采购申请批量转换,或ME21N手工转单;选择“库存转储”类型(也可以是标准采购订单+供货工厂),确认抬头的内部供应商信息和行项目上的供货工厂字段;保存。
  • 预期:生成一张库存转储订单(STO),抬头供应商为A工厂对应的内部供应商,行项目“供货工厂”为A工厂,“收货工厂”为B工厂。

脚本Step 6:在A工厂转生产订单

  • 事务代码:CO41
  • 操作:输入A工厂、半成品物料,执行;系统列出STO行,勾选后转生产订单;保存。
  • 预期:生成一张生产订单,生产订单的“订单类型”为按工厂A定义的默认生产订单类型,数量与STO一致。

脚本Step 7:执行A工厂生产

  • 事务代码:MIGO(生产订单收货) / CO11N(报工)
  • 操作:对生产订单发料(可选,取决于BOM设定),执行报工,然后对生产订单做完工入库(MIGO-生产订单收货,数量100,存储地点A工厂默认)。
  • 预期:A工厂半成品库存增加100,生产订单状态为“技术性完成”(或在制品清零)。

脚本Step 8:STO交货

  • 事务代码:VL10B / VL02N
  • 操作:进入STO交货清单,筛选STO,创建外向交货单;在外向交货单上做拣配和发货过账。
  • 预期:A工厂出库成功,系统创建在途库存。

脚本Step 9:B工厂收货

  • 事务代码:MIGO(采购订单收货)
  • 操作:参照STO或外向交货单做收货过账,数量100,存储地点按B工厂设置。
  • 预期:B工厂半成品库存增加100,在途库存清零。

脚本Step 10:结果验证

  • 事务代码:MD07 / MB52 / MMBE
  • 操作:
    • MD07查看B工厂的MRP清单,确认半成品的采购申请总体已闭环;
    • MB52查看A工厂库存0,B工厂库存100;
    • MMBE查看在途库存0,确认所有数量已落地。

4.3 通过MD07/MB52/MB5B验证MRP与库存结果

很多顾问跑完测试只看MMBE,我觉得不够。MD07是个容易被忽略却很有用的表视图,它相当于MRP清单(MRP List)的批处理版,能一次性把某个工厂所有物料的需求状况列出来。你在MD07里设置好工厂、日期范围,就能快速筛查哪些物料仍然有未结PR、未结计划订单,特别适合项目集成测试时批量验证。MB52则是库存汇总,能直接看到工厂/存储地点/特殊库存维度下的数量,配合MB5B可以查物料在某个时间段内每个月的收货发货明细,用来核对“A工厂发出100+ B工厂收入100+ 在途0”是最直观的。

4.4 一张测试记录表

测试记录按下面的格式填,项目上如果出问题,回溯起来会快很多:

步骤事务代码输入值实际结果是否通过备注
MRP运行MD02半成品+B工厂生成采购申请通过无
STO创建ME59NPR号生成STO 4500001234通过供货工厂A
生产订单CO41STO行生成订单1000567通过报工完成
A工厂发货VL02N外向交货单过账成功通过产生在途
B工厂收货MIGO参照STO库存增加100通过无

这表我通常会直接给关键用户也发一份,他们做UAT的时候拿着就能跑,不用反复来问。

5. 我在实战里踩过的坑:80号链路断点排错实录

5.1 坑一:货源清单未维护,导致无法创建转储订单

有一次给客户做集成测试,B工厂MRP跑完很正常,但在ME21N把PR转STO时,系统弹出一个红色错误“请维护货源清单”。当时我的第一反应是检查ME01货源清单,结果发现半成品物料在A工厂视角下根本没有维护供应商。这个坑在测试环境特别容易出,因为测试顾问经常用MD61直接跑MRP,却没有认真做货源主数据。

解决办法也比较简单:ME01维护时,把供应商填A工厂对应的内部供应商或集团供应商,并维护有效期和配额。如果是S4 HANA环境,还需要确认这个供应商是“已批准”的(供应商账户组和BP角色都正确)。改完货源再回到ME59N重转STO,问题消失。

5.2 坑二:MRP运行后没有产出任何采购申请

另一个高频问题是:MRP跑完,MD04显示半成品物料只有一个计划订单,不是采购申请,而且计划订单无法直接转成STO。这个坑的根因通常是物料主数据的特殊采购类型没有真正生效。原因是该半成品物料在B工厂的MRP 2视图里被覆盖成了“特殊采购类型空”,或者你在批量修改主数据时(MM17),特殊采购类型字段没有同步到目标工厂。

遇到这种情况,先用MM02直接打开半成品的B工厂视图,确认“特殊采购类型=80”“提供工厂=A工厂”,同时确认“采购类型”不是纯粹的“F”且没有违反MRP组里的限制。这里还要注意一点:B工厂MRP运行时如果用的MRP组(MRP Group)里定义了特殊的“采购类型”覆盖规则,也可能让80失效。所以排查顺序是-主数据- MRP组- MRP运行日志(事务代码MD_MRP_分析/或者使用MRP日志事务代码MD07里的“分析”图标)。

5.3 坑三:STO行无法被生产订单接管

还有一次是STO成功创建了,但A工厂的MD04里看不到这张STO,或者能看到却无法用CO41转成生产订单。这个问题后面翻配置发现是STO的“行项目类别”不对。

在标准的跨工厂转储里,STO的行项目类别应该是NB(标准)或B2(单一工厂转储),但当STO的“收货工厂”与“供货工厂”在同一个公司代码下时,通常NB角色就能正常转生产;一旦客户端跨公司代码且传输订单类型配得不对,行项目类别会变成“Umlag”或者其他非标准类型,导致MD04里这个STO不参与物料需求计划。排查方法很简单:ME23N打开STO行明细,看到“行项目类别”列的值,如果异常,就去SPRO修“库存转储订单的行项目类别确定”,或者直接用某个标准STO订单类型重开单。

CO41本身也是挑肥拣瘦的:它只会列出那些“需求类型正确”的STO行,如果STO的计划行因为ATP原因被锁住了,CO41列表里也可能空白。此时回到MD04,看STO行有没有红色状态图标,点开详细信息消息,八成能看到“无法创建生产订单”的原因。

5.4 坑四:跨工厂调拨后的价值流异常

80号链路里,财务侧的高频问题集中在“评价”上。A工厂的半成品是按标准价入库的,A工厂发货给B工厂时库存减少,B工厂收货时库存增加,这两个动作需要两张工厂间的库存转移凭证,并对应到科目PF(库存转移)。如果两个工厂的物料评估类不一致,或者评估控制里没有配置工厂间转移的产生科目,过账会直接报“科目确定失败”。

另外,A厂生产完工后,如果半成品的标准价是0或者是测试物料没做成本估算(CK11N),生产订单入库时可能报成本差异或者没有库存价值。我的经验是:测试80号链路前,先用CK11N/CK24给半成品做个标准成本估算,否则连续生产收货后会出现“在制品价值为负”或“差异跑飞”的状况,财务那边一眼就怀疑你搞错了。

5.5 坑五:事务代码和权限导致的“非技术性问题”

还有一类问题看起来很吓人,其实根本不是配置问题,是权限。比如ME21N能打开却保存时报“您没有执行此操作的授权”,或者VL10B的清单里一直不出现应该出现的STO,通常是用户角色里缺了跟“库存转储”“采购订单创建”相关的权限对象。遇到这种情况,别急着重配后台,先看看SU53,把缺失的权限对象补进PFCG角色,基本就能过。S4 HANA里还多一个BP主数据维度,供应商主数据如果没在BP里维护好,也可能导致ME21N找不到地址。

6. 一些实际建议:做80号测试时值得注意的细节

我个人经验总结几条:

第一,不要一上来就测试跨公司场景。如果你所在项目是集团全球模板,测试工厂最好先选同一个公司代码下的两个工厂,把80号内部链路跑通,再扩展到跨公司代码的30号/80混合场景。跨公司代码时的“公司间开票”“税码”“定价过程”会让第一次测试异常复杂,容易搞混。

第二,在S4 HANA里,MD07仍然能用,但建议同时在Fiori里给计划员配一个MRP清单或“物料需求计划”磁贴。老事务代码不是不能开,但从新用户接受度考虑,Fiori的界面直观很多,而且能直接在磁贴上看到未结采购申请数量——这比让计划员一个个查MD04高效得多。

第三,序列号管理如果启用了,最好在80号测试初期避开。不是说不能做,而是在系统里开了序列号后,STO交货时每个序列号都要跟到最后,测试复杂度会成倍上涨。先把核心链路跑通,再慢慢解锁序列号和批次管理,排错时会轻松很多。

第四,生产订单的收货存储地点和STO的收货存储地点要区分清楚。A厂生产收货入库一般入A厂的某个原材料/半成品库,STO发货出库之后,B厂收货才入B厂的库存。如果A厂生产收货直接入了B工厂的存储地点,那就不是80号了,那是跨工厂移库或者生产完成后直接转移,会在副产品/收货逻辑上搞出非常多莫名其妙的凭证流。

最后再分享一个小技巧:测试结束后,不要只看“有没有库存”,要养成用MB5B查每个工厂的进出移动明细的习惯。80号链路一跑完,A工厂能看到“生产收货”“转储发货”,B工厂能看到“转储收货”,这三步凭证流是闭环的证据,也是财务对账最需要的东西。按这个思路给用户复盘,用户理解起80号来也快很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询