简介《SAP 按单生产委外加工总结》面向SAP MM/PP顾问、生产计划及委外业务人员聚焦按单生产MTO模式下委外加工的流程梳理与业务落地帮助读者理解两层与三层BOM场景中自供材料、共用材料的处理差异。包内为1个doc文档约442KB内容集中便于按场景查阅和标注。目前已有2413人学习。文档围绕外包自身销售自身、外包自身销售父阶成品两类场景串起销售订单创建、MRP运行、计划订单转采购申请与采购订单、库存状态检查、供应商库存转移、成品及原料收货发货等环节并对项目类别L、科目分配组E以及101 E、543 O、311 E等库存移动类型和批次匹配要点作了归纳可作为流程对照、配置检查与日常排错时的参考材料。1. 按单生产委外加工两层 BOM 和三层 BOM走的是两条完全不同的账SAP 里做按单生产委外加工最容易出问题的环节并不在 VA01 建单这一步而在于「料到底在谁手上」。客户下单才排产成品收进的是销售订单库存其中一段工序包给外部供应商做原料由自己提供于是同一批料要在非限制库存、销售订单库存、供应商库存这三个状态之间来回倒。倒错一步MD04 上就是一片红字事后只能拿 MB51 一条条翻物料凭证追。下面按两种 BOM 结构来拆两层结构里 W 自产自销、只供共用材料 T三层结构里 D 外协、自供材料 W 本身也是定制件。每一步的项目类别、科目分配、移动类型以及我在 MIGO 里实际踩过的坑都摆出来。2. 两层 BOM 的委外W 自产自销单据链只有一根这个结构是最干净的一类W 是最终要卖给客户的成品整件外包它的 BOM 只有一层组件 T而 T 是多个产品共用的原材料平时躺在非限制使用库存里。整条链路是「销售订单 → MRP → 计划订单 → 采购申请L/E→ 采购订单 → 发料 → 收货 → 出货」中间没有第二张生产订单插进来所以只要参数不错账基本不会乱。问题在于很多人把「采购申请转成采购订单」当成终点实际上委外加工的账是在收货那一刻才真正开始变的。收货之前你只是承诺了要提供一批料给供应商收货之后系统才会按组件行自动冲销供应商库存。2.1 项目类别 L 加科目分配 E决定了后面所有的账采购申请上有两个字段必须同时正确错一个后面全歪。项目类别填 L代表这是分包委外采购。它的作用不只是打标签而是让系统在采购申请和采购订单上打开「组件」页签并为每一行组件生成一条预留记录RESB。收货时系统就是靠这条预留去自动执行 543 移动类型把供应商库存扣掉。如果项目类别留空或者用了普通的标准采购组件页签根本不会出现收货时也不会有任何组件消耗——料明明已经出库给了供应商账上却还挂在那里。科目分配类别填 E代表这笔采购的成本归到客户销售订单上。MTO 场景下成本对象就是那张销售订单填了 E 之后销售订单号和行项目会一路带到采购申请、采购订单、物料凭证和会计凭证上后面做销单毛利分析才有依据。填成 K成本中心或者空着成本就飘到别处去了等财务月底对不上再来找你就晚了。配置组合直接后果什么时候暴露项目类别空 科目分配 E不生成组件预留收货无 543收完货发现供应商库存没减项目类别 L 科目分配空组件正常成本归错对象月末销单成本分析差异项目类别 L 科目分配 E正常—两个字段都填对之后还要在组件页签里确认 T 这一行存在、数量对不对并且把「保留」相关的标识勾上确保这批料是专门为这张采购订单留的不会被别的订单抢走。2.2 从 VA01 到 MD04把计划订单推成带组件的采购申请先看物料主数据这一步很多人跳过结果 MRP 跑出来的东西完全不是自己要的。W 的 MRP 视图里MRP 类型和策略组要按单生产的配置来设T 的 MRP 类型按常规原材料设采购类型走外部采购。W 的 BOM 里维护好组件 T用量和有效期要覆盖这张订单的交期。建单和跑 MRP 的步骤VA01 建 W 的销售订单行项目类别用标准的按单生产类别数量、交期填准保存记下销售订单号。MD02 对 W 单物料跑 MRP或者 MD01 跑全厂看订单量大小决定。MD04 输入 W确认计划订单已经生成同时确认 T 的相关需求行也出来了。在 MD04 里选中计划订单转采购申请项目类别填 L科目分配类别填 E销售订单号和行项目填进去。进采购申请的组件页签确认 T 的用量、交期、库存地点勾上保留标识。保存后用 ME21N 或 MD04 直接转采购订单供应商、价格、交期补齐。转完之后再回 MD04 看 W正常应该能看到三层信息采购订单行本身、对 T 的组件需求预留、以及 T 的库存/采购建议。如果只看到采购订单行、看不到组件需求回头查项目类别是不是真的存成了 L。提示计划订单转采购申请时项目类别和科目分配类别要在转换的那一刻就填对。已经存成标准类别的采购申请事后用 ME22N 改成 L 有概率触发不了组件重新展开多数情况下删掉重建比硬改省时间。2.3 MB1B 541 转供应商库存MIGO 收 101 E 和 543 O料要发到供应商手上账上必须先把它从「我的非限制库存」变成「我提供给供应商的库存」这一步用 MB1B 做转移过账。参数按这个顺序填移动类型 541物料 T工厂和库存地点数量供应商代码批次如果 T 是批次管理的回车后系统会带出「物料提供」的特殊库存标识。保存前用「项目确定」看一眼确认发的是非限制使用库存不是质检库存或者冻结库存。541 和 531 这两个移动类型都能把非限制库存转到供应商库存项目里两种我都见过。差别主要在过账时的字段要求和后续报表口径上别照抄别家的做法输入移动类型后先看系统弹出的说明文字再按自己公司的库存管理口径定。转完之后用 MMBE 看 T非限制使用库存减少供应商库存增加两者相加的总量不变。这一步只要数量对不上后面全是错的所以一定要看一眼再往下走。收货用 MIGO操作选「收货」参考单据选「采购订单」把采购订单号填进去系统会把行项目和组件行一起带出来。抬头和行项目的移动类型是 101。特殊库存标识选 E代表收进销售订单库存销售订单号和行项目填 W 对应的那张单。MTO 场景下 MIGO 通常会自动把 E 带出来但不同版本、不同界面下不一定保存前自己核对一遍。组件行会带出 543 OO 表示供应商库存这一行是系统自动生成的不要手动删。过账之后再刷一遍 MMBEW 的销售订单库存增加T 的供应商库存相应减少非限制库存保持不动。三个数字对上了这批货才算真正做完接下来才能对销售订单做出货。3. 三层 BOM 的委外自供材料 W 得先从销单库存走出去三层结构的坑比两层多一倍因为多了一个「自供材料本身也是定制件」的前提。D 是要卖给客户的成品整件外包D 的 BOM 里有一层组件 WW 是专为这张订单定制的半成品自己也走生产订单W 下面才是共用材料 T。结构一深库存状态就从两种变成三种同时在跑。3.1 三层结构下W 根本不在非限制库存里这是最容易翻车的地方。很多人做完两层的流程下意识觉得「发料就是 MB1B 541」直接对 W 做 541结果系统提示库存不足。原因很简单W 是定制件它的生产订单收货时收的是 101 E——进的是 D 这张销售订单的销售订单库存不是非限制使用库存。541 只认非限制使用库存当然扣不动。正确顺序是先把 W 生产出来再把它从销单库存转到供应商库存对 D 建销售订单跑 MRPD 产生计划订单的同时W 作为相关需求也产生计划订单。W 的计划订单转生产订单按正常生产流程领 T、报工、收货收货用 101 E收进 D 的销售订单库存。此时 MMBE 看 W数量在销售订单库存特殊库存 E里非限制库存是零。D 的计划订单转采购申请项目类别 L科目分配 E组件页签里保留 W。采购申请转采购订单供应商填外协加工方。对 W 做 MB1B 311特殊库存 E把销售订单库存转成供应商库存。第 4 步到第 6 步之间的顺序不能颠倒。组件一旦在采购订单上被保留系统就认为这批 W 是要发给这个供应商的但真正让库存状态发生变化的是 311 那张物料凭证。3.2 311 E 的参数特殊库存打头批次写外协供应商编码311 是转移过账界面比 541 多几个字段因为它要同时指定「从哪来」和「到哪去」。移动类型填 311然后特殊库存标识填 E表示发出方是销售订单库存。发出方要填销售订单号和行项目接收方的特殊库存标识填 O供应商代码填外协加工方。物料填 W数量填这次要发的量批次这一栏是关键——填外协供应商的编码。为什么批次一定要写成外协供应商的编码而不是沿用 W 生产时的批次三个原因第一收货时组件行的 543 O 是按批次冲销的批次对不上供应商库存扣不掉收货过账会直接报错或者留下一笔挂账。第二事后追溯时看一个批次号就能知道这批料在哪个供应商手上不用去翻一堆物料凭证。第三同一张销售订单如果分了两个外协供应商批次是唯一能把两批料分开的依据否则 MMBE 上只有一个总数出了质量问题根本定位不到人。过账完成后用 MMBE 看 W销售订单库存减少供应商库存增加总量不变两个库存的特殊库存标识分别是 E 和 O销售订单号是同一个。3.3 收 101 与批次闭环收 D 的动作和两层结构里收 W 是一样的MIGO参考采购订单移动类型 101特殊库存标识 E填 D 的销售订单号和行项目。区别在组件行——这次的组件是 W消耗走 543 O批次必须和刚才 311 转过去的那一批完全一致。过账之后再看库存D 的销售订单库存增加W 的供应商库存减少。如果 W 的供应商库存没减八成是批次填错了或者组件行被手动删掉了。这时候别急着冲销重做先用 MB51 按物料 W 和移动类型 543 查一下有没有产生凭证确认是没跑还是跑错了批次再决定用 MBST 冲销还是补一笔。环节两层结构W 外协三层结构D 外协发料对象共用材料 T自供定制件 W发出前库存状态非限制使用库存销售订单库存E发料移动类型541 或 531311特殊库存 E收货移动类型101 E101 E组件消耗543 O543 O批次要求按 T 自身批次规则必须写外协供应商编码4. 避坑与排查MD04 和 MIGO 里最常翻的五次车下面这五条都是我自己或者身边同事实际遇到过的按「现象 → 原因 → 解决」写遇到类似报错可以照着对。第一条转完采购订单收货时组件页签是空的没有 543 行。现象是 MIGO 里只带出成品行组件行一片空白过账后供应商库存纹丝不动。原因基本是采购申请阶段项目类别没存成 L或者存了 L 但组件被手动删了、保留标识没勾。解决办法是回 ME23N 看采购订单的组件页签如果是空的最稳的做法是把这张采购申请和采购订单删掉从计划订单重新转一次转的时候把项目类别和组件一起确认。硬改项目类别有时候能带出组件但带出来的预留和原单据对不上后面查账更麻烦。第二条541 过账报「库存不足」但 MMBE 明明有数量。现象是 MB1B 输入 T 和数量回车就报库存不足。原因是 541 只认非限制使用库存而 MMBE 上显示的总数里包含了质检库存、冻结库存或者已经挂在别的特殊库存里的量。解决办法是点开 MMBE 的明细行看清楚到底在哪个库存类型里质检库存先做 321 转回非限制被别的订单预留占用的要先解预留。养成习惯发料前先看明细不要只看总数。第三条对 W 做 311 报「特殊库存不存在」。现象是三层结构里想直接把 W 转到供应商库存系统说销售订单库存没有可用数量。原因是 W 的生产订单还没做 101 E 收货销单库存是空的或者收货收错了收进了非限制库存。解决办法是先 MD04 看 W 的生产订单状态确认已收货再用 MMBE 确认数量在特殊库存 E 里。如果收错成非限制库存得先冲销重收不能直接拿非限制库存做 311那样销单的成本就断了。第四条收货过账成功但供应商库存没减少。现象是 MIGO 提示过账成功回头 MMBE 一看W 或 T 的供应商库存数量没变。原因通常是组件行的批次填错了或者组件行在过账前被取消勾选。解决办法是 MB51 按物料加移动类型 543 查凭证看有没有产生记录有记录但批次不对就用 MBST 冲销这笔收货重做完全没记录说明组件行根本没参与过账检查采购订单的组件页签是否完整。第五条销售订单出货时提示无库存但成品明明已经收过货。现象是 VL01N 做出货系统说库存不足。原因是收货时特殊库存标识没选 E成品收进了非限制库存而销售订单发货只认销单库存。解决办法是先用 MB52 看这批成品到底在哪个库存状态如果确实收错了冲销收货重新按 101 E 收一遍。MTO 场景下这一步错得特别隐蔽因为库存总量看起来是对的只是「归属」不对。注意以上五条里有四条都能在 MB51 里找到线索。出问题第一件事不是重做是查凭证确认系统到底执行了什么再决定冲销还是补账。5. 移动类型和库存状态对照把四张表摆在一起验证委外加工的排查本质上是核对「移动类型 - 库存状态 - 单据」这三者的对应关系。脑子里有一张对照表看 MD04 和 MMBE 的时候就不会迷路。5.1 各移动类型的作用边界移动类型方向作用常见误用541 / 531非限制 → 供应商库存把共用材料发给外协方对销单库存的料用 541报库存不足311 E销售订单库存 → 供应商库存把定制件转给外协方批次不写供应商编码收货扣不掉101 E供应商 → 销售订单库存委外成品收货特殊库存标识漏填收进非限制库存543 O供应商库存 → 消耗收货时自动冲销组件手动删除组件行库存挂账101生产生产订单 → 销售订单库存定制件自产入库收进非限制库存导致 311 做不了这张表不用背但要理解每一行的「为什么」。541 和 311 的本质差别不在数字而在发出的库存状态不同前者发的是自己的非限制库存后者发的是挂在某张销售订单上的定制库存。理解了这一点就不会出现「明明有货却发不出去」的困惑。5.2 MMBE、MD04、MB51 三处交叉验证排查按这个顺序走基本不会漏MMBE 看物料在哪个库存状态、数量多少、特殊库存标识是什么、挂在哪个销售订单上。MD04 看需求侧采购订单、预留、相关需求是不是都在时间轴上有没有异常的红字。MB51 看已经发生的物料凭证物料、移动类型、批次、过账日期四个条件组合查。如果要批量核对一张委外采购订单的组件预留情况可以直接查表比一单一单点 ME23N 快得多-- 查某张委外采购订单的组件预留确认预留是否生成、数量是否被消耗 SELECT po~ebeln, po~ebelp, res~rsnum, res~rspos, res~matnr, res~werks, res~lgort, res~bdmng AS req_qty, 需求数量 res~enmng AS withdrawn_qty 已领数量 INTO TABLE DATA(lt_res) FROM ekpo AS po INNER JOIN resb AS res ON res~rsnum po~rsnum WHERE po~ebeln p_ebeln ORDER BY po~ebelp, res~rspos.这段查的是 EKPO 和 RESB 的关联RESB 里的 RSNUM 就是预留号XWAOK 之类的字段可以判断预留是否已被最终发料。重点看两个数需求数量和已领数量。两个数相等说明组件已经全部消耗已领数量是零说明收货时 543 根本没跑回头查项目类别和组件页签。再补一个查批次的三层结构里批次对不上时用得上-- 按批次查 W 在供应商库存和销单库存之间的流向 SELECT mseg~mjahr, mseg~mblnr, mseg~zeile, mseg~bwart, mseg~matnr, mseg~charg, mseg~menge, mseg~sobkl, mseg~lifnr FROM mseg WHERE mseg~matnr p_matnr AND mseg~charg p_charg AND mseg~bwart IN (311, 543, 101) ORDER BY mseg~mjahr, mseg~mblnr, mseg~zeile.SOBKL 是特殊库存标识LIFNR 是供应商。按批次号一拉就能看出这批料是先 311 转出去、再 543 被消耗还是中间断了某一步。查的时候注意年度和凭证号要一起排序跨年的凭证不能只按凭证号排。6. 进阶把两套流程固化成检查清单和批次规则流程跑通一次不算本事能稳定跑一百次才算。我后来的做法是把两套流程都压成一张过账前的检查清单每次收货前对着过一遍比事后查账省太多时间。检查项两层结构三层结构判断依据采购申请项目类别LLME23N 项目细节科目分配类别EE销售订单号是否带出组件是否保留TW组件页签行项目发料前库存状态非限制销售订单库存 EMMBE 明细发料移动类型541 或 531311 EMB51 凭证批次规则按 T 自身规则外协供应商编码MCH1 批次主数据收货特殊库存EEMIGO 抬头批次这一列值得单独说。三层结构里把外协供应商编码写进批次本质上是借批次这个字段做一层轻量的追溯标识。好处是不用额外开发标准报表就能按批次筛出「某供应商手上有多少料」代价是批次编码规则必须提前定死谁都不能临时改。我见过有项目中途换了一批人新来的人按自己的习惯编批次结果同一张销售订单下出现两种编码规则月底盘点对不上翻了整整两天凭证才理清。还有一个验证习惯每做完一次完整的委外收货不要只看 MIGO 的「过账成功」一定回 MMBE 把成品和组件两个物料各看一遍确认四个数字对得上——成品销单库存增加、组件供应商库存减少、组件非限制库存不变、组件销单库存三层场景归零。四个数字里任何一个不对当场用 MB51 查别等到出货的时候才发现。再往深一层如果这类订单量大、供应商多可以考虑把组件的预留消耗做成一个简单的监控报表按采购订单号把 RESB 的需求数量和已领数量拉出来对比已领数量长期为零的就是异常单。这条 SQL 前面已经给过套个循环或者放进 CDS 视图都行比人工一单单点开快得多。说个我自己踩过的坑早期做三层结构的时候我以为 311 转完就万事大吉收货时组件行的批次随手选了系统默认的那个结果 543 扣的是另一批料供应商库存总数看着对明细全乱了。后来花了半天用 MB51 一条条对批次才理清。从那以后我每次做委外收货都会先把 MMBE 里那三个库存位置看一遍再把批次号抄下来核对确认无误才点过账。希望帮到你。本文还有配套的精品资源点击获取