资讯动态

按单生产委外加工:SAP需求传递与成本归集全流程解析

发布时间:2026/10/29 18:05:47 来源:尧图企业网站定制
简介SAP按单生产MTO委外加工实操总结面向SAP实施顾问、生产计划及物料管理人员用于解决产品按客户订单生产时将自制件或共用材料外包加工并准确跟踪库存流动的问题。文档将两种常见场景拆解为可复用的操作流程两层BOM下外包成品并消耗共用材料以及三层BOM下外包上层成品、用自产中间品作为供应商库存。重点梳理了项目类别L、科目分配组E、收发货移动类型101、531、311、543以及供应商批次编码的匹配逻辑并给出MD04、MB1B、MMBE、MIGO等事务代码配合使用的顺序。资源包仅有1个doc文档442KB虽体量小巧但步骤详细、字段说明完整适合在真实项目或测试环境中对照执行。目前已有2379人学习说明其在实际工作中具有较高参考价值。通过阅读能够在较短时间内理解MTO委外加工的核心控制点减少因库存类型或批次设置错误导致的收货异常。1. 按单生产的委外加工为什么采购订单比生产订单更常被用来收敛做制造业 SAP 实施的同行应该都有印象只要产品是按销售订单生产MTO又牵扯出“委外加工”四个字车间、计划、采购、成本四个部门就开始互相扯皮。车间说“供应商把半成品做完了直接送进仓库”计划说“销售订单的需求在 MD04 里根本看不到”成本会计问“加工费到底进了库存还是挂在生产订单上”。这个标题真正要解决的问题不是外协采购订单怎么做而是需求怎么从销售订单一路传到外协采购订单外协收货怎么自动消耗组件加工费怎么回到订单成本里。本文按主数据、采购执行、齐套与追溯、踩坑排查、月底验证的顺序展开适合工厂里的 PP/MM 顾问、生产计划和成本会计照着落地。2. 按单生产的主数据销售订单需求怎么一路传到外协采购订单2.1 需求类与计划策略把“销售订单号”写进生产计划和采购申请按单生产和按库存生产的本质区别在于需求源不同。按库存生产跑 MRP 时需求来自计划独立需求按单生产时需求必须来自销售订单。这一点没有配好后面所有外协采购申请都不会带销售订单号成本也无法结到销售订单上。关键配置在需求管理相关配置里的事务代码常见是 OPPT/OPPJ通过“计划策略组 需求类型 需求类”控制。项目里最常用的策略是 20 或 50 这类按单生产策略需求类要选“单个销售订单”相关的那类而不是汇总需求类。这样 MRP 跑出来的计划订单、采购申请都会在 MD04 里显示销售订单号和行项目后续转外协采购订单时才能把销售订单分配带下去。这里有一个很典型的翻车现场成品物料在 MRP 视图里配了策略组 20但计划策略组对应的需求类型没有激活“销售订单相关”结果 MRP 运行时系统把多个销售订单的需求合并成一条采购申请。表面看数量没错但采购订单上没有销售订单分配仓库收货时无法判断这批货属于哪张订单MTO 就变成了变相的 MTS。MD04 怎么看这个分配关系执行 MD04 后在“采购申请”或“计划订单”行双击查看行项目里的“订单号”字段。如果显示的是销售订单号码说明需求链没断如果为空优先检查策略组、需求类型和需求类这三层配置而不是查 LSMW 或者 BOM。2.2 外协物料主数据与 BOM特殊采购类、外协标记和组件回传委外加工在 SAP 里有两条路一条是整件外协物料通过外协采购订单项目类别 L直接发给供应商加工完成后收货入库另一条是工序外协生产订单的某个工序在工艺路线里标记为“外部处理”报工后生成外协采购申请。两种方案对主数据的要求不一样。整件外协的物料主数据要在采购视图里勾选“外协加工”标记或者在 MRP 视图里配置特殊采购类为外协加工常见的是特殊采购类 30这样跑 MRP 时系统才会生成项目类别为 L 的采购申请。同时物料必须维护 BOM因为外协采购订单上的“组件”页签不是人工录的是从 BOM 带出来的。如果 BOM 里的组件在物料主数据中没有维护“外协相关”字段转采购订单时组件页签就会空白收货时组件根本无法自动倒冲。在做 BOM 主数据时最容易出问题的是单位换算。比如产成品库存单位是 KGBOM 组件单位是 PC外协采购订单转出来时数量按单位换算走一遍一旦没有设置计量单位转换规则收货时组件消耗数量就会差一个数量级。这属于典型的“物料单位转换”坑一定要在 CS01/CS02 维护 BOM 时确认所有组件的单位和换算关系。我一般会用 SE16N 直接查 BOM 表确认组件数量。相关表包括主记录表 MAST、抬头表 STKO、行项目表 STPO。下面这条查询以成品物料为条件把 BOM 里的组件和基础数量拉出来做单位一致性核对。SELECT mast~matnr, mast~werks, stpo~stlkn, stpo~idnrk, stpo~menge, stpo~meins FROM mast INNER JOIN stpo ON stpo~stlty mast~stlty AND stpo~stlnr mast~stlnr AND stpo~stlal mast~stlal AND stpo~stlkn mast~stlkn WHERE mast~matnr 成品物料号 AND mast~werks 1000 AND stpo~datuv sy-datum ORDER BY stpo~stlkn这段 SQL 的逻辑是以成品物料 MATNR 和工厂 WERKS 为条件关联 BOM 抬头和 BOM 行项目表取出每个组件的行号 STLKN、组件物料 IDNRK、基础数量 MENGE 和单位 MEINS。参数方面STPO~DATUV 是 BOM 生效日期查询时必须带上否则容易把已经失效的旧 BOM 行也算进来STPO~STLKN 是 BOM 内的行号排序时用它保证组件顺序稳定。2.3 用 LSMW/BDC 批量准备主数据文件格式与检查点外协物料和 BOM 的数量如果只有几十条手工维护也行但按单生产工厂往往有大量类似规格的物料这时候 LSMW 是绕不开的。用 LSMW 批量创建或者修改外协物料主数据最常见的是用录屏方式录制 MM01/MM02 或者 CS01/CS02 的屏幕字段再映射成一个固定格式文件。我通常的做法是按这个顺序推进先在 LSMW 里定义一个工程源结构对应文件字段然后录屏把进入事务代码后需要填的字段全部录制完整再做字段映射和固定值转换特别要注意把“外协加工”标记和“特殊采购类”这两个字段固定到每个物料上。做完转换后先执行 1 到 2 条测试数据确认物料主数据能正常保存而且“外协加工”标记确实勾上了再批量执行。多工厂情况下一个常见的错误是文件里只有工厂 1000但实际外协业务发生在工厂 2000执行 LSMW 时系统提示“物料在工厂 2000 中未维护”。这不是 LSMW 本身的问题而是文件里缺乏工厂维度。所以文件至少要包含物料号、工厂、外协标记、特殊采购类、BOM 用途这几列缺一列就会产生脏数据。另外LSMW 执行完之后建议到 CDHDR/CDPOS 物料变更底表里查一下“谁在什么时候改过这个物料”。这两个表是 SAP 的变更历史记录表能查清楚物料主数据最后一次修改的用户、时间、旧值和新值做批量导入后的审计非常好用。3. 外协采购订单全流程从 PR、ME11 定价到 Migo 收货与发票校验3.1 外协 PR 转 PO订单类型、项目类别 L 和组件页签当 MRP 跑出外协采购申请后采购员或者计划员要把它转成采购订单。正常路径是用 ME21N 或 ME57 引源生成采购订单选单后系统会自动把项目类别设置为 L外协加工。这是判断外协采购订单最重要的标识项目类别不是 L后面 Migo 收货就不会自动消耗组件整个外协流程就会断掉。采购订单的“组件”页签在整件外协场景下是核心。系统会把 BOM 组件和需求量带进这个页签收货时按照这个页签里的数量做倒冲。这里有个非常重要的项目规范如果外协供应商提供的物料由我司提供组件页签必须完整如果供应商自备部分物料这部分组件就不应该放进去。实际操作中很多项目为了省事把所有 BOM 组件都放进外协采购订单结果供应商自备物料也被倒冲工厂自己的库存被重复扣减。转 PO 后建议用 ME23N 再检查一遍抬头里订单类型是不是 NB 或项目自定义的外协订单类型行项目里项目类别是不是 L组件页签里的数量和 BOM 是否一致。如果组件页签为空看两点一是 BOM 是否存在且生效二是物料主数据是否勾了外协加工标记。优先级上先查 BOM因为外协采购订单的组件来源就是 BOM。3.2 加工费定价ME11 信息记录、含税价与净价的处理外协加工费的定价通常在 ME11 里维护信息记录条件类型 PB00 就是采购订单的标准价格条件。因为外协加工费不影响 BOM 组件价值所以信息记录里只需要维护加工费单价不涉及组件价值。维护时要注意有效期供应商调价后旧信息记录在生效日期之前仍然有效如果 ME21N 转订单时价格带的是旧价格而发票按新价格开就会产生采购价格差异。关于“采购订单含税价格”这是个在项目中反复出现的痛点。供应商报价往往以含税价报价但 SAP 采购订单的条件是净价逻辑含税价需要经过税码换算处理。如果采购员直接在 ME21N 里把含税价填进总价系统会再计算一遍税额导致发票校验时出现价差。常见做法是在 ME11 里维护净价在采购订单里指定税码或者通过条件类型增加一个含税价条件由系统反算净价。具体选哪种取决于税务和财务要求但一定要在全项目统一口径最怕有的供应商用含税价、有的用净价月末对账的时候一锅粥。ME11 增强在这个场景里也常用到。比如要求外协加工商必须有质量认证才能下单就会在 ME11 或 ME21N 的保存前增强里加校验或者用采购审批策略控制供应商资格。这种增强不是标准功能项目里实际会遇到是否启用取决于采购管理要求。3.3 Migo 收货的组件消耗与成本组成外协采购订单的收货用 Migo 移动类型 101 过账。收货完成后系统会自动生成两张物料凭证一张是成品收货凭证增加工厂库存另一张是组件消耗凭证把外协采购订单组件页签里的组件从供应商特殊库存特殊库存标识 O中消耗掉同时减少工厂的库存价值。理解这个“一收一耗”的机制是看懂委外加工的关键。这里要展开说一下组件价值的处理。外协收货入库的存货价值由两部分组成一部分是采购订单上的加工费净价另一部分是组件页签里各组件的库存价值按移动平均价或标准价计算。所以如果供应商加工过程有报废实际用的组件数量超过了 BOM 数量组件成本不会额外出现在采购订单上而是体现在库存差异里。这也是外协加工成本难以管控的原因之一。在实际操作中还需要掌握外协供应商库存的查询和调整。事务代码 ME2O 可以查看每个供应商的外协库存数量和金额。如果供应商库存不足收货时会直接报错“在供应商特殊库存中 XXXX 不足”这时需要先做外协补料发料常见做法是用 MB1C 移动类型 541 把组件发给供应商然后再去 Migo 收货。操作顺序上我一般建议先补料后收货避免收货失败造成物料凭证悬挂。如果已经在 Migo 里做了收货但组件消耗不完整不要急着补料先把收货冲销掉把组件页签核对清楚再重新收货。3.4 发票校验与清账外协加工费怎么进成本外协加工费的发票校验走 MIRO。选择采购订单后系统会带入交货数量和加工费金额财务按发票实收金额过账。这里最常见的差异是供应商开的加工费含税而采购订单上是净价导致发票校验产生差额。处理方式是按采购订单和发票间的差异科目配置走差异会进入采购价格差异科目而不会自动挂到生产订单或销售订单上。发票校验完成后应付账款通过 F-58 或 F-53 做清账。在按单生产外协场景下清账凭证上通常只有采购订单号、供应商和发票号看不到销售订单号。如果企业要求每笔成本都能追溯到销售订单必须在采购订单上维护好“销售订单分配”字段并保证 Migo 收货过账时分配关系没有丢。下表总结两种外协方案的凭证流差异方便成本会计对账时快速定位环节整件外协外协采购订单工序外协生产订单外协工序前置单据外协采购申请生产订单组件消耗Migo 收货自动倒冲工序报工倒冲加工费确认采购订单净价发票校验工序采购申请发票校验成本归集存货成本中心生产订单成本结算动作月末外协差异进存货月末 KO88/CO88 结算到销售订单这张表可以用在月底成本结账前的核对会上。整件外协的加工费和组件价值都进了库存工序外协的加工费则挂在生产订单上月末结算差异时才能分摊到销售订单。4. 计划齐套与追溯MD07 看缺料、序列号 EDEL 更新和冲销重做4.1 MD04/MD07外协缺料分析和销售订单覆盖检查按单生产的外协计划本质上是在看两个东西产成品是否被销售订单覆盖组件是否满足外协收货的倒冲需求。前者看 MD04 的采购申请行是否有销售订单号后者看组件物料的库存和供应商库存是否足够。MD04 是单物料视角。输入成品物料后系统按时间序列显示库存、销售订单需求、计划订单、采购申请、采购订单。外协场景下要注意看“采购申请”段正常状态是 MRP 根据销售订单需求生成的采购申请数量与销售订单未交货数量一致如果采购申请比销售订单需求少说明 MRP 的批量规则或者舍入值把需求合并了需要按销售订单逐笔核对。绝不能只检查总数按单生产的核心是逐单覆盖。MD07 是多物料齐套视角适合外协计划员批量检查一整批外协物料。执行 MD07 后按物料、工厂显示库存/需求清单能快速筛出那些“有采购订单但组件缺料”的物资。建议每周至少跑一次 MD07把结果导出后按供应商维度汇总和外协供应商做对账。4.2 序列号 EDEL 更新逻辑交货过账事件与状态档案如果按单生产的成品启用了序列号管理外协收货后序列号会进入工厂库存状态通常是“库存”或“可用”。发货给客户时通过交货单过账发货序列号状态会从“库存”转移到“已交付”。在很多项目里这个“已交付”状态在 IQ03 里显示为 EDEL 或类似的自定义状态码含义是“Equipment Delivered”。序列号状态更新的逻辑不是 MRP 跑出来的也不是后台定时任务刷出来的而是交货过账事件触发的。SAP 的序列号状态档案里每个状态之间都有一个“事件”定义比如“库存-已交付”这个转移对应的是交货单发货过账事件。如果这个事件没有配在序列号状态档案里即使 VL02N 过账发货序列号也会一直停在“库存”状态。碰到序列号状态不更新的情况我一般按这个顺序排查先看 IQ03 查当前状态和状态历史再查序列号状态档案的配置确认“已交付”状态是否有对应的过账事件最后检查序列号配置文件是否被分配到物料或工厂。如果状态真的错了不能直接改表要通过事务代码 IQ02 手工做状态转移或者触发一个后续事件。这种追溯在按单生产里特别重要因为销售订单、交货单、序列号、物料凭证四者必须一一对应。客户投诉质量问题时要能从序列号反查外协收货凭证、组件批次和供应商信息这就是 SAP 数据追溯在外协场景里的实际用法。4.3 收货错了怎么冲BAPI 冲销物料凭证与批次倒冲外协收货做错了比如数量多收、工厂收错、批次选错最直接的办法是在 Migo 里用“取消”功能冲销。Migo 取消的本质是生成一张反向的物料凭证把成品库存退回同时把组件消耗退回供应商库存。如果只是简单收货错误用 Migo 界面操作就够了。但如果是开发程序调用或者需要集成到自建的扫码/生产执行系统里就需要调用标准 BAPI。常用的是 BAPI_GOODSMVT_CANCEL传入物料凭证号、年份和移动类型代码就可以冲销。下面是最小可用的 ABAP 调用代码。DATA: ls_code TYPE bapi2017_gm_code, lt_ret TYPE TABLE OF bapiret2. CLEAR: ls_code, lt_ret. ls_code-gm_code 02. 02 表示物料凭证冲销 CALL FUNCTION BAPI_GOODSMVT_CANCEL EXPORTING materialdocument 5000000123 materialdocumentyear 2025 goodsmvt_code ls_code TABLES return lt_ret. IF lt_ret[] IS NOT INITIAL. 有错误消息时先读消息不提交 LOOP AT lt_ret INTO DATA(ls_ret) WHERE type E. MESSAGE ID ls_ret-id TYPE E NUMBER ls_ret-number WITH ls_ret-message_v1 ls_ret-message_v2 ls_ret-message_v3 ls_ret-message_v4. ENDLOOP. ENDIF. COMMIT WORK.这段代码的关键参数有三个materialdocument 是要冲销的物料凭证号materialdocumentyear 是物料凭证年度goodsmvt_code 是移动类型代码02 代表冲销。注意在调用后要检查返回消息表 lt_ret只有确认没有错误消息时才能提交。如果外协收货时组件已经发生了后续的转储、生产消耗或序列号状态更新BAPI 冲销会报错“物料凭证无法冲销”这时需要先撤销后续业务再做冲销。批次管理的组件在外协场景下还有一个常见问题Migo 收货自动倒冲组件时需要自动指定批次。如果组件物料启用了批次管理但没有在后台为对应移动类型配置批量确定策略收货时会提示“批次无法确定”或者“找不到批次”。解决方向有两个一是在移动类型对应的批次确定配置里加入合适的查找规则二是在物料主数据里维护好批次确定策略。这个配置不复杂但没配的话外协收货会被卡住现场人员往往会手工反复试批号效率非常低。5. 常见踩坑与排查委外加工最容易翻车的五个点5.1 收货后组件没消耗供应商库存只增不减现象外协采购订单 Migo 收货成功成品库存增加了但查 MSEG 没有组件消耗凭证ME2O 里供应商库存的组件数量一直没有减少。原因最普遍的原因是采购订单的项目类别不是 L而是标准采购。标准采购订单没有组件页签自然没有组件消耗。第二种原因是项目类别是 L但组件页签为空BOM 没有被带过来第三种是组件虽然带过来了但物料主数据没有勾外协相关标记导致收货时系统无法执行外协组件消耗逻辑。解决先在 ME23N 看项目类别和组件页签。如果项目类别不对冲销收货、重新转单或改项目类别后再收货如果组件页签为空回到 BOM 和物料主数据查原因。这个坑排查起来不难但它造成的影响很大供应商库存虚增工厂组件库存虚减月底盘点对不上。5.2 入库金额只有加工费没有组件价值现象外协收货后查看物料凭证的金额发现只有加工费组件部分的库存价值没有进入成品库存MB03 里成品入库金额明显低于预期。原因这通常与物料主数据的评估类Valuation Class配置有关。外协物料如果被设成了普通外购的评估类组件价值不会随外协收货自动进入成品库存正确做法是针对外协业务设置对应的评估类保证“组件价值 加工费”共同构成收货入库成本。物料的价格控制方式标准价或移动平均价也会影响入库金额的计算逻辑。解决先检查物料主数据会计视图的评估类和价格控制再确认 OBYC 科目配置里对应的事务 key 是否映射正确。如果项目已经上线评估类变更会影响财务账需要在财务顾问支持下走变更流程不能直接改物料主数据。5.3 采购申请没有销售订单分配MTO 断链现象MD04 里的外协采购申请行“订单号”列是空的采购订单收货后销售订单仍然显示未交货状态。原因需求类或策略组没有把销售订单需求传递到 MRP。常见于成品既被销售订单需求驱动又被计划独立需求驱动MRP 运行时优先满足了独立需求导致外协采购申请挂在独立需求下而不是销售订单下。解决检查计划策略组对应的需求类确认销售订单需求是否被纳入 MRP删除成品物料的计划独立需求或者把独立需求类型改为“仅在特定期间有效”重新跑 MRP 后回 MD04 复查采购申请行的销售订单分配。这个坑在 MTO 和委外同时出现时非常隐蔽因为数量总没错成本归属却全错了。5.4 批次组件倒冲报错序列号状态停在旧状态现象外协收货时组件是批次管理的系统提示“批次无法自动确定”或者序列号管理的成品已经交货了IQ03 里状态仍是库存而不是已交付。原因前者是批次确定策略没有覆盖到外协收货对应的移动类型系统不知道从哪些批次中自动选择一个后者是序列号状态档案缺少“交货过账事件”到“已交付状态”的转移配置或者序列号配置文件没有分配给物料/工厂。解决批次方面在后台的移动类型配置里为收货对应的移动类型补充批次查找规则序列号方面在状态档案配置里补充状态事件并通过 IQ02 修正当前卡住状态的序列号。这两个坑都容易在项目验收阶段爆发原因都是前期主数据没配全。5.5 外协退货时组件怎么退差分数量处理现象外协供应商送来的成品有部分不良采购订单做退货过账后发现对应的组件并没有按 BOM 比例退回工厂库存组件账实不平。原因外协采购订单退货时系统通常只冲销加工费对应的收货金额组件消耗是否回冲取决于移动类型和配置。如果退货采用的是标准收货冲销组件消耗不一定同步反向过账如果组件已经进入供应商库存并被其他采购订单使用账务关系会更复杂。解决退货时不要单独做 Migo 清账先确认外协采购订单的组件页签和供应商库存现状再决定是用退货凭证同步冲销组件还是通过外协组件退回的专门移动类型做手工调整。如果数量差异很小且不影响成本可走盘点差异调整但在月底前必须处理完不能留到下个月。6. 月底验证与进阶技巧用一张外协台账盯住库存、成本和序列号外协业务最怕的是账实不清楚月底关账前我会固定做三个动作。第一个动作用 MB51 拉当月所有外协收货凭证和组件消耗凭证按采购订单号汇总数量检查同一张外协采购订单下成品收货数量与组件消耗数量是否成 BOM 比例。第二个动作用 ME2O 核对供应商外协库存余额确保没有长期挂账的组件在供应商仓库里躺着。第三个动作抽查带序列号的成品确认销售订单交货后序列号状态已经从库存转为已交付。如果企业已经上了接口或自研执行系统可以把这个台账做成一张表按采购订单汇总收货量、组件消耗量、发票金额和差异。下面这条 SQL 在 SE16N 或 SQVI 里可以按物料凭证号追溯外协收货和组件消耗。SELECT mseg~mblnr, mseg~mjahr, mseg~zeile, mseg~matnr, mseg~bwart, mseg~menge, mseg~ebeln, mseg~ebelp FROM mseg WHERE mseg~bwart IN (101, 543) AND mseg~werks 1000 AND mseg~ebeln IN (SELECT ebeln FROM ekpo WHERE matnr 成品物料号) ORDER BY mseg~mblnr, mseg~zeile这段查询的核心字段是 BWART移动类型101 是外协收货543 是常见的组件消耗移动类型但具体项目里可能被自定义查询前务必在 OMJJ 里确认工厂下的移动类型清单。EBELN 是采购订单号通过它把收货凭证和组件消耗凭证绑定在一起便于核对成本。参数方面可以从 ekpo 子查询里去掉 matnr 条件改成按采购订单号直接查这样能看到组件消耗的完整列表。最后一个进阶技巧把外协采购订单号和销售订单号绑定验证。整件外协场景下成本会计可以用 KB61/CO88 看差异但更直观的做法是每月月底把“外协采购订单-销售订单号-序列号-交货单号”四条链路的台账导出来发给计划、仓库、财务三方确认。只要这个台账里的分配关系和状态没有问题按单生产委外加工的账就守住了。我自己做项目时习惯把这条验证路径写进用户的月末操作手册里每月的第一个工作日先跑一次这套检查再启动关账。这套流程跑顺了外协加工就不再是黑匣子而是可以随时追溯的透明业务。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑