
简介SAP MTOMake-to-Order按单生产业务完整操作手册面向SAP PP/MM模块顾问、制造业生产计划与物料管理人员。内容按MTO端到端流程展开从物料主数据策略组与单独/汇总需求设置、VA01销售订单创建、MD41运行MRP及MD04结果查看到ME57专用料采购与收货、生产订单创建发料收货、库存转移和销售开票均有详细步骤。压缩包内仅1个docx文件大小约1.21MB携带方便。已有5767人浏览学习适合需要快速上手MTO配置与日常操作的读者。手册强调关键事务码和屏幕截图式指引可帮助实施顾问理解专用料与公用料的区别并掌握从订单到入库的全链条协同逻辑降低项目交付和系统运维中的试错成本。1. MTO 到底在管什么一台非标设备从销售订单到结算的完整链路MTOMake-to-Order按单生产在 SAP 里从来不是一个 T-Code也不是一张工单的事。客户在 VA01 里录入一台定制设备销售承诺 6 周交付计划员打开 MD04 却看不到需求成本会计月末发现收入有了、成本还堆在工厂库存里——这就是 MTO 没跑通的典型症状。按单生产的闭环从销售订单的项目类别出发经过需求类型、MRP、计划订单转生产订单、订单库存收货最后通过结算规则把成本挂回销售订单做收入成本配比任何一环断了就会翻车。这篇笔记就是把这根链从头到尾拆开讲让只做过按库存生产MTS的顾问或 key user 照着配置路径和操作步骤能把按单生产搭起来、跑通、查得清账。SD、PP、MM、CO 四个模块各管一段所以读的时候别只盯着自己那一亩三分地。2. 销售订单端的两个开关项目类别与需求类型决定这张单是否真的按单2.1 项目类别维护界面MTO 的第一个开关在 VA01 的行项目里在 VA01 创建销售订单时行项目里的“项目类别”Item Category字段是整条 MTO 链路的起点。它不只是一个显示字段它决定了三件事定价过程能用哪些条件、行项目是否参与可用性检查ATP、需求要不要传给 MRP。很多人以为只要在物料主数据里设了策略组 20 就算 MTO但销售订单项目类别没配好需求根本不会进入 MRP策略组等于白设。配置路径在 IMG销售与分销 → 销售 → 销售单据 → 销售单据项目 → 分配项目类别。进入项目类别维护界面后重点看两个维度一是当前销售订单类型与项目类别组的组合是否允许二是项目类别里的“需求类型”字段是否激活。项目类别组Item Category Group来自物料主数据的“销售一般/工厂数据”视图物料上分组不对VA01 里即使想选 MTO 的类别也会被系统拒绝或静默退回标准类别。常见的项目类别大致按下面这个逻辑选项目类别用途是否传递需求MTO 适用性TAS标准项目按库存发货不传递不适用TAS 需求类型 KSV按单生产带变式配置传递独立需求最常用TAN免费项目不计收入不传递不适用TAQ变式配置项目可按需配置传递配置类 MTO 用实际项目中对非标设备最常用的组合是项目类别选 TAS 或其复制品然后在“需求类型”栏挂上 KSV。KSV 是面向变式配置的按单需求类型它会把销售订单计划行变成 MRP 能识别的独立需求。注意项目类别和物料主数据之间是相互校验的关系VA01 保存时如果系统报“项目类别 XX 不允许”优先去查物料主数据的项目类别组而不是硬改销售订单类型。2.2 需求类型与需求传递销售订单怎么变成 MRP 能识别的独立需求项目类别上的“需求类型”只是入口真正干活的是需求分类Requirement Class。需求分类维护在 IMG生产 → 需求管理 → 需求分类需求类型维护在生产 → 需求管理 → 需求类型两者是主数据与参照的关系。需求分类里控制几个关键勾选项需求是否做 ATP 检查、是否更新需求、是否传递到 MRP、是否参与可用性承诺。MTO 场景里需求分类必须打开“MRP 相关性”这一类开关。如果需求分类设置成“仅记录需求”MD04 里能看到销售订单需求但它永远不会生成计划订单和采购申请整条供应链静默停摆。这是最隐蔽的配置错误之一因为它不报错只是不干活。我一般排查时直接看 MD04销售订单计划行有“CustReq”标记说明需求已经进入 MRP如果只有一张干巴巴的销售订单行没有计划行八成是需求分类或计划行类别出了问题。给不启用变式配置的 MTO 项目策略组 20 自带的默认需求类型也够用。这种情况下销售订单计划行写入 MD04 时同样会被视为独立需求不一定非要挂 KSV。配置顺序建议按这个走先定义需求分类再定义需求类型然后把需求类型挂到项目类别维护界面最后在物料主数据里设策略组。顺序反了容易出现“项目类别里看不到需求类型下拉值”的假象其实是主数据还没配完。2.3 策略组 20 / 50 / 70从需求管理到物料主数据的一锤定音物料主数据 MRP2 视图里的“策略组”Strategy Group是按单生产在物料端的总开关。策略组 20 是纯 MTO独立需求全部来自销售订单计划行不建计划独立需求PIR库存默认不覆盖其他订单。策略组 50 适合备料式按单装配长周期物料用计划独立需求提前备料最终装配由销售订单拉动。策略组 70 则把计划从成品层级拆到装配层级适合半成品可以预投、成品必须按单组装的场景。三者的差异可以用一张表说清楚策略组需求来源适用场景库存策略20仅销售订单客户定制、非标生产按单库存订单间不互用50长周期料用 PIR成品按销售订单备料时间远大于装配时间半成品备库成品按单70装配级计划组件按计划订单装配环节是瓶颈组件预投成品专储设置路径是 MM02 → MRP2 视图 → 策略组字段同时建议把“需求类型”和“相关需求”字段的默认值一并检查。策略组 20 配合物料主数据里的“特殊采购类型”使用效果才完整特殊采购类型的设置在下一章讲。这里有个经验策略组是物料级的同一个物料被多个客户用只要其中一个客户要求按单策略组就得分物料维护不能图省事全厂统一。提示策略组 20 只是物料主数据里的一个字段真正控制需求传递的是“策略组 需求类型/需求分类”的组合。只改策略组不改项目类别依然跑不起来。3. 计划与生产执行MD07 看需求、计划订单转工单、按单库存入库3.1 运行 MRP 前先看 MD04 / MD07按单需求长什么样MRP 跑之前先学会看需求。MD04 是库存/需求清单按时间序列把单个物料的单据全部列出来客户需求、计划订单、采购申请、预留、库存。MTO 跑通后MD04 里应该能看到销售订单计划行产生的“客户需求”数量等于销售订单未交货量时间落在计划行确认的交货日期上。如果 MD04 里只有物料需求计划Planned order而没有前置的“客户需求”说明这张单的需求来源不是销售订单大概率是手工建的计划独立需求——这就不叫 MTO 了。MD07 是多物料的需求汇总报表适合销售订单量大、按单多的工厂。MD07 按物料列出总需求、总收货和可用量能快速挑出“需求没进来”的物料。热词里那个“sap mps 分析销售订单 产生生产工单 以及对应原材料的请购单时的主程序的增强”说的就是 MPS/MRP 运行后通过增强点追踪销售订单→工单→采购申请这条派生链。排查需求传递问题时MD04 看单个物料MD07 看全局两个配合用先用 MD07 缩小范围再用 MD04 定位具体是哪个销售订单断了。跑 MRP 前还要确认 MRP 组的参数。MRP 组维护在 IMG生产 → MRP → 计划 → MRP 组里面控制计划运行的范围、计划订单类型、是否自动创建采购申请。MTO 物料如果挂在某个 MRP 组下而这个 MRP 组把“自动创建采购申请”关了那 MD04 里就只会有计划订单不会有采购申请采购员自然看不到请购单。这种问题不报错最容易耗掉半天排查时间。3.2 计划订单转生产订单手动转换、BAPI 批量转换与订单类型选择MRP 运行后自制物料会产生计划订单Planned Order。MTO 场景下计划订单必须转成生产订单才能投料、报工、收货、结算。手工转换的标准路径是 MD04 → 选中计划订单 → 点击“转换生产订单”批量转换可以用 CO40 按计划订单号段或物料批量处理。转换时系统会按后台配置的“订单类型确定规则”选出生产订单类型比如 PP01。外部系统MES、PLM和 SAP 集成时常见做法是调用 BAPI_PRODORD_CREATE_FROM_PLORD 做批量转换。示例代码DATA: ls_plord TYPE bapi_plord_i, ls_return TYPE bapiret2, lv_order TYPE bapi_pp_order_i-order_number. ls_plord-order_number 004131000123. 计划订单号来自 MD04 CALL FUNCTION BAPI_PRODORD_CREATE_FROM_PLORD EXPORTING order_number ls_plord-order_number IMPORTING order_number lv_order. 返回新创建的生产订单号 CALL FUNCTION BAPI_TRANSACTION_COMMIT EXPORTING wait X.这段代码的核心逻辑是传入计划订单号SAP 按后台配置的订单类型自动创建生产订单返回生产订单号。值得注意的两点第一工厂、物料、数量都不用传计划订单里已经带出来了第二BAPI 成功后务必 COMMIT否则订单只在当前会话里可见别的终端立刻查不到。批量场景下循环调用前先读取计划订单清单可以用 MD04 的 ALV 导出或者标准报表再把计划订单号列表传给这个函数。转出来的生产订单要注意“订单类型”是否正确。MTO 生产订单通常和 MTS 用不同订单类型因为订单类型挂了结算参数文件、成本控制参数和状态管理参数。如果转出来的是标准 MTS 订单类型后续结算到销售订单时会发现结算参数文件不对第五章会讲这个坑。3.3 订单库存与普通库存为什么 MTO 的收货必须进“销售订单库存”MTO 和 MTS 在库存管理上有一个根本区别MTO 的货物属于特定销售订单不能和普通库存混在一起。实现这个隔离的字段就是物料主数据 MRP4 视图里的“特殊采购类型”Special Procurement。把它设为 S销售订单库存也叫订单库存后物料的所有需求、收货、库存都自动带销售订单号同一物料同时给十个客户做 MTO库存各算各的互不侵占。MIGO 做 101 收货时如果物料设了特殊采购类型 S系统会在收货界面要求填写“销售订单”字段货物进入特殊库存类型 E销售订单库存。常见错误是物料没设 S收货直接进非限制使用库存结果这张单的成本和库存全部混进工厂账月末成本会计对不上账。特殊库存类型含义对应业务E销售订单库存MTO 按单生产Q项目库存项目制造PS 模块M分包库存委外加工W客户寄售寄售补货MRP 运行时还会遇到“库存地点排除”的问题。物料在工厂下有多个库存地点有些库存地点在后台维护了“MRP 排除”标记IMG生产 → MRP → 计划 → 库存地点确定MRP 跑的时候完全不考虑这些地点的库存。查 MD04 显示缺料、MMBE 里明明有货十有八九是这个原因。MTO 物料如果仓库偏偏把订单库存放在被排除的库存地点缺料假象会一直持续到交付延期。排查方法是 MMBE 看库存地点再回 OMIR 或 MRP 组配置里核对排除标记。4. 按单核算与结算把成本挂回销售订单而不是挂进工厂4.1 核算对象怎么选按单生产订单 vs 成本收集器MTO 的成本核算对象首选生产订单本身。生产订单从创建那一刻起就是一个成本对象投料、报工、间接费用全部归集到订单号上月末结算时订单上的成本可以直接结转到销售订单或 CO-PA 获利能力分析段。这种模式下一台设备、一张订单、一个成本对象追溯关系干净清晰。成本收集器Product Cost Collector是另一种核算对象但它更适合重复性生产一条产线连续生产同一种物料用收集器归集期间成本再按产出分摊。MTO 场景下每个客户需求不同、生产订单不同、差异需要单独结算用收集器反而把成本搅浑了。所以结论很简单MTO 用生产订单MTS 重复制造才考虑成本收集器。生产订单的创建通道有讲究。除了在 3.2 里说的“计划订单转换”还有一条标准通道是 CO08按销售订单创建生产订单。CO08 创建出来的生产订单直接关联销售订单行项目需求、库存、结算全部挂到订单上适合没有跑 MRP、直接手工下达工单的小批量场景。CO08 创建后MD04 里能看到生产订单直接对应销售订单中间没有计划订单。核算对象适用结算目标差异追溯生产订单MTO / 单件小批销售订单 / CO-PA按订单追差异成本收集器MTS 重复制造物料成本差异分摊按期间分摊内部订单研发、项目费用成本中心 / 资产按内部订单追MTO 生产订单的成本构成建议用标准成本估算CK11N先算出计划成本生产过程中实际成本与计划成本形成差异差异在月末结算时转走。如果物料主数据里没做成本估算Future/Current生产订单一创建就会有成本核算错误提示投料时成本无法归集。上线前把 MTO 物料全量跑一遍 CK11N 是必须的动作。4.2 投料、报工、收货的三条过账规则MIGO 的订单库存与成本归集生产订单的成本归集靠三个移动类型支撑投料用 261生产订单发料、收货用 101生产订单收货、报工用 CO11N 确认工时与机器时间。对 MTO 而言MIGO 收货这一步最容易出错——101 收货时系统弹出“库存类型”选择必须选“订单库存”并填写对应的销售订单。如果选成非限制库存物料成本留在工厂库存里CO-PA 里永远看不到这台设备的成本。MIGO 界面的“订单”页签里销售订单号是必填还是可选取决于物料主数据特殊采购类型和项目类别配置。建议在项目里把这个字段设为必填宁可多一道人工校验也不能让操作员随手留空。很多工厂用 WMS/MES 自动过账常见做法是用标准增强点 MB_MIGO_BADI 在过账前读取抬头增强字段自动补充销售订单号这类增强在第六章给切入思路。报工 CO11N 确认的是工时它同时影响人工成本和制造费用分摊。MTO 工单如果允许跨工序多次报工建议按订单汇总工时而不是按工序散报否则月末分摊时人工费用会落到奇怪的成本中心。做 CO 的同事经常忽略的是生产订单的“批量”和“订单数量”必须和销售订单一致差异数量会导致收货超量或不足结算时差异比例计算跟着出错。4.3 月末结算KKAO 配结算规则KO88 / CO88 把差异送回销售订单月末结算是 MTO 链条的收口动作。第一步是 KKAO 创建或检查生产订单的结算规则。结算规则里要定义三样东西结算类型是结算到销售订单、CO-PA、还是内部订单、结算比例通常是 100%、结算接收方销售订单号或获利能力段。很多顾问直接跑 KO88系统报“没有为订单定义结算规则”就是因为漏了 KKAO 这一步。KKAO 配好结算规则后第二步是执行结算。单个订单用 KO88一批订单用 CO88。结算发生的实质是把生产订单上归集的差异、在制品、间接费用全部转移到结算接收方。MTO 的标准做法是结算到销售订单生产订单差异进入 CO-PA 的收入成本配比里与销售订单已确认的收入形成毛利闭环。第四步是核对。CO-PA 查看用 KE30按销售订单号段筛选检查每个订单的收入、成本、差异是否齐平。如果发现“有收入没成本”先回到 KKAO 看结算规则是否存在如果“有成本没收入”去看销售订单项目类别里是否允许 CO-PA 传成本。还有一类典型报错是“成本要素 5001010200 没有分配给成本构成”这是成本要素没挂到成本构成分解里需要去 OKTZ/OKKN 维护成本构成Cost Component的分配关系而不是动结算规则。把这条处理完MTO 月末结转基本就顺了。5. SAP MTO 的 5 个翻车场景与排查清单从需求传递断链到结算挂错订单做 MTO 项目的这几个月最耗时间的从来不是方案设计而是各种看着合理、实际反常识的坑。下面这 5 条是从需求传递、库存、结算三个环节里跳出来的高频问题每一条都按“现象 → 原因 → 解决”写直接照着排查。5.1 销售订单数量改了计划订单不跟着变现象VA02 把销售订单数量从 5 台改成 2 台计划订单和生产订单还是 5 台工单照做多的 3 台成本没处放。原因项目类别上没挂需求类型或需求分类里的 MRP 相关性没打开。销售订单的数量变更不会自动通知 MRPMD04 里旧需求还在新需求没有覆盖。解决先回 VA02 检查行项目“需求类型”字段是否为空再查需求分类配置确认“MRP 相关”勾选已激活。修复后删除旧的需求记录MD04 里选中客户需求行删除重新运行 MRPMD04 里计划订单数量会跟着销售订单变化。这里有个细节改数量后必须重新跑 MRP哪怕只差一个数量SAP 不会自动刷新需求。5.2 MD04 提示缺料库存却在库存地点里躺着现象MD04 显示物料短缺采购催着下单但 MMBE 一查另一个库存地点明明有 100 件的货。原因该库存地点在后台被标记为“MRP 排除”。MRP 运行范围按库存地点划分被排除的地点就像不存在一样系统完全不计算它的库存。常见于工厂启用了多个库存地点其中一些是质检隔离库或不良品库MRP 组配置时顺手勾了排除。解决去库存地点配置里检查“MRP 排除”标记。路径是 IMG生产 → MRP → 计划 → 库存地点确定逐个看哪些库存地点被排除。MTO 订单库存所在的地点绝对不能排除否则订单库存永远无法参与可用量计算。确认后去掉排除标记重新跑 MRP。5.3 KO88 报“没有为生产订单定义结算规则”现象生产订单投料、报工、收货都正常KO88 一执行就报这个错成本结转不出去。原因生产订单类型上没有分配结算参数文件。结算参数文件挂在订单类型配置里如果订单类型没挂或挂的结算参数文件为空生产订单创建时就不会自动带出结算规则。解决先 KKAO 手工创建结算规则指定结算类型和接收方把当月差异结掉再回 IMG 给这个生产订单类型补上结算参数文件生产 → 生产订单 → 订单类型 → 定义结算参数文件否则下个月创建的新工单还会报同样的错。5.4 收货进了非限制库存MTO 变成了“伪 MTO”现象MIGO 101 收货后MMBE 里看到物料进了非限制使用库存销售订单库存数量没有增加订单成本也归集不到销售订单上。原因物料主数据 MRP4 视图的“特殊采购类型”没有设置成 S。这是 MTO 最基础的配置漏掉之后整个按单库存机制失灵需求、库存、成本全部退化成 MTS 行为。解决MM02 进入物料主数据 MRP4 视图把特殊采购类型改为 S。已经收进非限制库存的货用 MB1B 移动类型调整把数量从非限制库存转到销售订单库存同时检查对应的生产订单收货历史确保成本和库存一起移动。这个改完后续 101 收货时会强制要求填写销售订单号。5.5 月末 CO-PA 收入与成本错期订单毛利不闭合现象KE30 里销售订单有收入没有成本或者反过来成本比收入高一大截毛利明显不正常。原因生产订单的差异结算规则没有指向这个销售订单或者收入在开票确认时进了 CO-PA而生产订单成本要等 KO88 结算之后才进 CO-PA两边存在时间差。如果差一个月是节奏问题长期对不上就是规则问题。解决检查 KKAO 的结算规则是否把生产订单结算到“销售订单”或对应 CO-PA 段再看销售订单项目类别上的“成本传递”配置是否打开。时间差造成的错期可以通过月底统一结算节奏规避所有 MTO 工单必须在关账前完成 KO88/CO88不允许跨月挂差异。把规则理顺后每个订单的收入、成本、毛利才真正闭合。6. 端到端跑顺 MTO 的验证清单与两个增强切入点照着核一遍少翻一次车6.1 用一棵订单从头核到尾的验证清单MTO 上线前我习惯用一棵真实销售订单从头跑到尾每一步都留截图和凭证号当作验收基线。步骤操作期望结果创建订单VA01 建销售订单选对项目类别MD04 出现客户需求运行 MRPMD02 跑完生成计划订单计划订单数量等于销售订单量转生产订单MD04 转换或 CO40 批量转订单类型正确带结算参数文件投料报工MIGO 261、CO11N成本归集到生产订单订单收货MIGO 101库存类型选订单库存销售订单库存增加差异结算KKAO 建规则KO88 结算差异进入 CO-PA销售订单成本闭合报表核对KE30 按销售订单筛选收入、成本、毛利匹配任何一步的结果对不上都要回到对应章节的排查清单。6.2 两个常见的开发增强切入点MTO 项目里需求最多的增强是 MIGO 过账时自动补销售订单号因为仓库扫码过账通常不带订单上下文。标准增强点是 BADI MB_MIGO_BADI在过账前取 MIGO 抬头上的物料凭证信息回填自建表或临时字段。另一个点是用 BAPI 批量转生产订单第三章已经给了 BAPI_PRODORD_CREATE_FROM_PLORD 的调用样例按需循环即可。做增强时注意一个原则能在过账前取数就不要在过账后补数过账后数据已经落库补数容易产生成本与库存不一致的坏账。6.3 两个保命习惯第一MTO 物料主数据的特殊采购类型和策略组必须一起查只看 MRP2 的策路组会漏掉 MRP4 的特殊采购类型第二月底关账前把未结算的 MTO 生产订单全查一遍用 CO88 批量结算不要等 KE30 对不上账才回头找。这两个习惯是我交了三次学费换来的照着做能少踩一半的坑。希望帮到你。本文还有配套的精品资源点击获取