资讯动态

SAP PP替代物料配置:MRP需求锚点与可用性检查02取舍

发布时间:2026/10/27 14:46:26 来源:尧图企业网站定制
简介SAP-PP 替代物料操作完全手册面向已具备生产计划与物料管理基础、希望系统掌握物料替代配置的 SAP 顾问与制造企业计划人员。内容围绕平行切换与非平行切换两类替代展开覆盖批量更换组件、只消耗不采购、后继物料、物料后继组及按比例拆分等典型场景并交代可用性检查、非连续标识、BOM 终止组与后继组等关键设置帮助读者理清不同替代逻辑的适用边界与常见误区。包内为 1 个 docx 文档约 871KB便于检索、批注与二次整理。已有 2553 人学习说明其在同类专题中具备一定参考热度。文档以操作链路和参数说明为主线适合按场景对照配置也可作为排错时回查系统行为、验证替代结果的随身手册对需要落地配置而非仅了解概念的读者更有价值。1. 替代物料真正难的地方不是「换」是「账」有一种很典型的翻车照着文档把后继物料配好下生产订单组件行纹丝不动还是原来那个物料库存明明是 0。于是开始查权限、查缓存、查是不是没保存。真实原因往往只有一个——可用性检查那个字段没设成 02。SAP PP 里的替代物料从来不是一个功能而是好几条互不相干的实现路径有的走 MRP4 视图的后继关系有的走 BOM 里的替代组和使用可能性有的干脆靠 CS20 把物料从所有 BOM 里批量摘掉。它们触发切换的时机完全不同算需求的口径也不同混着用就会出现「配置看着都对结果就是不对」的玄学现场。搞清楚哪条路径在什么时刻做判断比记住操作步骤值钱得多因为它直接决定 MRP 将来跑出来的是 A 的采购申请还是 B 的。2. 后继关系的存放与 MRP 的需求锚点2.1 一条链只存在两个字段里非连续标识与后继物料物料之间的「A 用完切 B、B 用完切 C」这种链式关系在系统里并不存在一张独立的「替代关系表」。它被拆散存放在每个物料自己的主数据上MM02 进入 MRP4 视图里面有两个关键字段一个是非连续标识一个是后继物料。A 的非连续标识填 1、后继物料填 BB 的非连续标识填 1、后继物料填 C链才成立。系统不会自动推导传递关系A 指向 B 之后B 指向谁必须单独维护漏掉一环链就在那里断掉表现是「切到 B 之后不动了」。非连续标识的取值不是随便填的。按常见用法1 表示这个物料是一个替代链的起点也就是「单一平行终端」的那一端它负责触发3 表示它是跟随者属于「相关平行不连续」的部分被前面的物料带着走填 3 的物料后继物料字段必须留空填了反而会让链路判断混乱。这个区分在后继组场景里是生死线后面第 4 章会展开。想快速核对一批物料到底怎么配的可以直接从表里捞 批量核对物料的后继配置字段名以所在版本为准 SELECT matnr, mstae, mstde FROM marc INTO TABLE DATA(lt_discont) FOR ALL ENTRIES IN lt_matnr WHERE matnr lt_matnr-table_line AND werks lv_werks. mstae 非连续标识mstde 后继物料 重点看mstae 3 的行mstde 是否被误填这段查询的价值在于「批量」两个字。单个物料用 MM02 看很直观但一条链上五六个物料、跨几个工厂靠人眼逐个点开核对漏一个就是一次生产停线。把结果导出来按 mstae 排序起点和跟随者一眼就分开了。2.2 为什么 A、B、C 都没库存MRP 还是跑出 A 的需求这是整套机制里最反直觉、也最容易吃亏的一点。后继关系影响的是订单执行阶段的组件替换它不参与 MRP 的净需求计算。MRP 展开 BOM 时看到组件行写的是 A就把需求挂在 A 头上然后拿 A 的库存、在途、预留去冲销冲不掉的生成 A 的计划订单或采购申请。系统在需求层面始终认为 A 是最适用的物料后继物料只是一个「A 真的拿不到时订单可以往哪退」的备选线索。所以当 A、B、C 三个物料库存全为 0 时MRP 不会聪明地跑出 C 的采购申请它老老实实跑 A 的。计划员看到的就是一堆买不到的物料需求还得人工判断该买谁。理解这一点很多事情就顺了替代链是运行时兜底不是需求层的重定向。真要让 MRP 从此只跑 B 的需求动主数据是没用的得动 BOM——用更改编号加生效时间在某个日期之后把组件行从 A 换成 B让 MRP 展开时压根看不到 A。原料里那句「个人建议在 A、B 物料长久不用的情况下直接用 BOM 的更改编号、生效时间来控制」说的就是这个。它的本质是把「将来用谁」这个决策从订单执行的临时判断提前到主数据的版本管理里。2.3 平行切换与非平行切换两条完全不同的实现路线从大类上分替代分平行切换和非平行切换。平行切换是链式的A 用完切 BB 用完切 C同一时刻订单上只有一种物料在被消耗是「接力」非平行切换是并行的A 用 30%、B 用 70%两个物料同时在订单上出现各自按比例分摊需求等 A 彻底耗尽再全部转给 B是「分摊」。这两种模式在系统里的配置入口都不一样。平行切换靠 MRP4 的非连续标识加后继物料再配合可用性检查触发非平行切换靠 BOM 里的替代组、优先级和使用可能性在 BOM 展开阶段就把数量拆好。混用会出问题在替代组里配了使用可能性又指望它像后继链一样按库存余量累加扣减结果一定对不上。判断标准很简单——问一句「这张订单上A 和 B 会不会同时出现」会就是非平行不会就是平行。2.4 只消耗不采购把决策权交回给人的一种设计还有一类场景不追求自动切换只要求「别再买了」。做法是把 A 的物料状态设成 02让它在 BOM 里照常存在、照常被展开但采购端被卡住同时在 A 的主数据里放一个安全库存当警示线。库存消减到这条线附近系统产生采购申请但因为物料状态的原因采购员转不成订单这个信号就回流到计划或数据岗由人来判断继续用 A、补充采购彻底转 B、另行处理 A 的余料还是 A、B 并存一段时间这里有个容易忽略的细节02 这个状态控制的是 BOM 侧不是采购侧到底冻结哪些业务得看 OMS4 里的配置。原料特意点出这一点是因为很多人配完发现「明明设了 02采购还能下单」然后开始怀疑人生。这套设计的动机其实很清楚——系统不替你做「换不换」的商业决策它只负责在正确的时点把信息推到正确的人面前剩下的走 CO02 改组件、MM02 改状态、MD02 重跑 MRP 三条路选哪条取决于判断结果。3. 单物料后继可用性检查 02 才是真正的开关3.1 从 MM02 到 CO01六个前置条件缺一不可两物料自动替代看起来配置项不多但它是一条串行的链条任何一环断掉现象都是「没反应」很难从结果反推原因。完整的链条是这样的先用 MM01 建好两个物料MM02 在 A 的 MRP4 视图里把非连续标识设成 1、后继物料设成 BMM02 在 A 和 B 的 MRP3 视图里把可用性检查设成 02MM02 给 B 维护工作计划视图否则 B 根本下不了生产订单CS01 把 A、B 都维护进 BOMMIGO 入库把库存做进去最后 CO01 下订单验证。这六步里前两步决定「能不能切」第三步决定「什么时候切」第四步决定「切过去之后能不能用」第五、六步是验证环境。缺第三步订单照样能下只是不会触发替换属于沉默失败缺第四步替换发生了但订单下不去属于显性失败。显性失败好查沉默失败才是血泪经验的来源。3.2 下订单那一刻BOM 展开、可用性检查、预留拆分CO01 输入成品数量、维护好工艺路线和工序之后系统做三件事。第一件是 BOM 展开按成品数量乘以组件用量算出每个组件的毛需求比如生产 20 个成品、每个用 5 个原材料组件需求就是 100 PC。第二件是对组件做可用性检查把当前库存、已预留、预计入库放在一起算可用量。第三件是最关键的可用量不足时沿着 MRP4 的后继链去找下一个物料把缺口补上最终生成多条订单组件行。用一段简化示意把这段逻辑摊开 订单组件可用性检查与后继替换的简化流程示意非标准源码 LOOP AT lt_component INTO DATA(ls_comp). lv_avail get_unrestricted_stock( ls_comp-matnr ) - get_reserved_qty( ls_comp-matnr ). IF lv_avail ls_comp-req_qty. 库存够全额挂在本物料上不触发替换 append_component( ls_comp-matnr, ls_comp-req_qty ). ELSE. 库存不够先吃掉现有库存剩余部分沿后继链继续找 append_component( ls_comp-matnr, lv_avail ). lv_rest ls_comp-req_qty - lv_avail. lv_next get_follow_up_material( ls_comp-matnr ). 读 MRP4 后继物料 WHILE lv_rest 0 AND lv_next IS NOT INITIAL. lv_next_avail get_unrestricted_stock( lv_next ). lv_use COND #( WHEN lv_next_avail lv_rest THEN lv_rest ELSE lv_next_avail ). append_component( lv_next, lv_use ). lv_rest lv_rest - lv_use. lv_next get_follow_up_material( lv_next ). 继续往下一环走 ENDWHILE. ENDIF. ENDLOOP.对应到原料里的例子需要 100 个A 只有 45 个系统自动补 B 物料 55 个不需要人工调整订单组件行上就是 45 加 55 两行。这段逻辑里有两个参数值得盯住一是get_unrestricted_stock取的是非限制库存质检库存、冻结库存不参与二是WHILE循环终止条件链走完还有缺口就停下剩下的缺口留给发料环节报错系统不会凭空变出料来。3.3 累加扣减与其他替代方式的本质差别原料里有一句容易被略过的话只有这种设置是 A 消耗完再消耗 B、进行累加扣减其他替代方式都是不足替换、不考虑库存。这句话点出了后继链的独特之处——它按「数量」分摊45 加 55 拼成 100。而连续替代那类方式是按「优先级」整批选一个物料只要第一个物料库存够整张订单就全部用它库存不够整张订单就直接报错不存在「先用 45 个再补 55 个」这种拼盘。这个差别决定了两种方式的适用边界。订单批量小、库存碎片化、经常出现「差一点点」的场景后继链的累加扣减更贴合现实订单批量大、物料之间是同质不同源、要求整批可追溯的场景整批替换反而更干净因为一炉产品混两种来源的料质量追溯会很难受。3.4 两个容易被忽略的限制用量相等与两物料上限这套方法有两个硬性限制。第一只适用于 A、B 两种物料替换三种及以上不可用。原因还是那句话——后继链是逐级维护的A 指 B、B 指 C 虽然能串起来但每级都要单独配非连续标识和后继物料配置量和出错概率随物料数线性上升而且中途某一环配错整条链的排查成本很高。第二如果 BOM 里 A、B 的用量相等上面的设置就够了如果用量不等比如 A 用 2 个、B 用 3 个还要在 BOM 里做额外设置因为系统按「件数」替换而不是按「等效用量」替换直接切会算错需求量。原料作者的建议很实在用量不等的情况与其在后继链上打补丁不如直接用按比例拆分那套更简单。这是一个典型的取舍——继任链的配置成本低但只覆盖「一对一、用量相同」这个窄场景超出这个场景成本曲线陡然上升。4. 组替代、比例替代与连续替代多物料模型的判定差异4.1 后继组谁负责触发谁负责跟随当一个组件位上需要「一组物料整体被另一组物料替换」时单物料后继就不够用了。典型场景某个主板套件的 BOM 下有四个组件前两个是一组后两个是另一组后一组是前一组的后继组而且以第一个物料的库存有无作为整组切换的触发条件。配置分两处。主数据侧第一个物料触发者在 MRP4 里非连续标识设 1、后继物料指向对面组的一个成员第二个物料跟随者非连续标识设 3、后继物料必须留空。BOM 侧CS02 进入第一个物料的子项目点「终止数据」在中止组里填一个组代码比如 A第二个物料同样填 A表示这两个都属于被替代组。然后进入第三、第四个物料的子项目点「物料后继数据」在后继组里填 A。两边组代码必须一模一样这是配对的唯一依据。测试时的现象很能说明机制库存设成第一个物料 0、第二个 100、第三、第四各 200、300下生产订单需要每个物料各 200做物料可用性检查之后前两个物料整组切到后两个。注意第二个物料明明还有 100 的库存照样被切掉——因为触发条件只看第一个物料它没料整组就翻过去。这是「组」这个概念的核心判定是组的粒度不是行的粒度。4.2 按比例拆分使用可能性和策略谁说了算同物性、不同供应商、不同生产批次导致物料号不一致但产品其实一样这种场景要的是按比例分摊。CS01 维护 BOM 时把三个物料维护进同一个替代组 A回车之后组件行上会带出蓝标箭头点进去逐行维护使用可能性和策略。策略这个参数只有两个值1 是手工维护、按用途可能性2 是 100% 检查。策略选 1 的时候优先级不起作用谁分多少完全由使用可能性决定。三个物料填 50、30、20下 100 个成品、每个耗 2 个原材料总需求 200系统就拆成 100、60、40。如果不填比例订单上显示全是 0做检查时系统自己去找「合适的」物料如果都填 100每行都显示全额检查时再按库存挑如果只给第一个填 100、其余填 0默认第一个全额检查时同样会根据实际库存变动。这里的「合适」说白了就是可用库存。策略选 2 才是 100% 检查模式优先级开始起作用系统按优先级顺序逐個判断库存是否够整批够就整批用不够就看下一个。这两种策略不能混着理解策略 1 是「分摊」策略 2 是「排队」。4.3 比例之和不是 100% 时需求数量怎么算这是一个必须算清楚的细节。组内使用可能性之和理论上应该等于 100%但系统并不强制。如果填成 50% 和 25%合计 75%系统会做归一化处理某物料的需求数量等于总需求乘以该物料的使用可能性再除以组内所有使用可能性之和。按原料的算式1 个需求、50% 和 25% 两行算出来分别是 0.667 和 0.334。问题出在取整上。计量单位是 PC 的时候0.667 个物料没有意义系统按单位小数位取整两个数各自舍入之后相加可能小于原始需求结果就是「所需物料数量不足」。这类问题在演示环境里看不出因为演示用的都是整数比例一到真实业务比例是 33.3%、66.7% 这种除不尽的小数就会出现莫名其妙的缺料。稳妥做法是让组内比例严格凑成 100%或者干脆按最小包装单位的整数倍去分配。4.4 连续替代优先级排队的整批替换连续替代是使用面最广的一种能覆盖三个以上物料依次替换的场景。CS02 把所有需要替代的物料都加进 BOM逐个双击数量进入项目明细在替代物料组里填同一个组名然后点旁边的箭头维护优先级、策略、使用可能性三列。按原料的例子三行物料优先级分别填 1、2、3策略统一填 2使用可能性留空。效果是严格的排队第一个物料库存 200每个成品耗 2 个那最多只能下 100 个成品第一个物料库存清零之后再下 100 个的需求时系统自动跳到第二个物料第二个用完跳第三个。每次只能用一种物料而且用量不能超过当前物料的可用库存超了直接报错生产订单也下达不了。这里有个前提条件藏在主数据里必须维护 MRP3 视图的可用性检查为 02否则系统不会去检查可用库存订单能下 300但发料时才发现只有 200直接卡在发料环节。这类「下单时爽、发料时崩」的问题本质是把校验点后移了代价是问题暴露得更晚、处理成本更高。4.5 批量更换CS20 是主数据治理不是运行时替代还有一种操作容易被误当成替代功能CS20 批量更换物料组件把 BOM 里的 a 物料整体换成 b。选中要替换的 BOM 执行绿色表示成功、红色表示失败a 物料就此在公司范围内消亡b 全面接管。它和前面所有方式的区别在于——它不产生任何运行时的判断逻辑改完就是改完了MRP 从此只认 b。这决定了它的使用场景和风险。适用场景是「a 永久退役、公司层面全面切换」一次操作覆盖所有相关 BOM效率极高风险是不可逆、跨多个 BOM 批量生效改错了要逐个回滚而且历史订单里的组件行不会跟着变。它属于主数据治理手段和运行时替代是两条平行线不该混在同一个方案里讨论。5. 避坑与排查替代物料不生效的五个现场5.1 主数据侧的两个沉默失败现象一生产订单能正常创建数量也没问题但组件行永远是原物料库存明明为 0 也不切换。原因几乎总是可用性检查没设 02MRP3 视图那一栏空着。没有这个开关系统在订单创建阶段根本不做库存可用性检查自然也就没有「不足则沿后继链找料」这个动作。解决方法是 MM02 补上 02然后把已经创建但还未下达的订单重新读一次组件让检查重跑一遍。现象二想改 BOM 保不住一保存就报错。原因是物料主数据的物料状态被设成了 02 并冻结而 02 这个状态在标准配置下控制的是 BOM 侧业务。要注意 02 并不控制采购这也是为什么会出现「BOM 改不动、采购却还能下单」的割裂现象。解决思路有两条临时解冻、改完再冻回去或者去 OMS4 里核对物料状态到底该管哪些业务按实际管理需求调整而不是照抄别人的配置。5.2 BOM 侧的两个配对错误现象三CS02 里点「终止数据」按钮是灰的点不动。原因是这个项目行上还挂着替代项目组的信息两套机制在同一个行上互斥。解决方法是先把残留的替代组信息删掉再维护中止数据顺序反了就会一直灰着。现象四中止组和后继组都填了看着没问题但整组切换就是不触发。原因十有八九是两边的组代码不一致——一边填 A、一边填 B或者大小写、前后空格有差异。这个组代码是唯一的配对键系统不会做模糊匹配。原料里提到过被某些资料误导、一直达不到效果的经历根源就在这里。验证方法很直接CS02 进 BOM走菜单里的「附加 - 更多的 - 终止信息」能在这里看到完整的组关系看不到就是没配上。 排查组配对把 BOM 行上的中止组/后继组拉出来比对示意 SELECT stpo~stlnr, stpo~idnrk, stpo~stlkn, stpo~cs_altgrp, stpo~cs_altpri 替代组与优先级 FROM stpo INTO TABLE DATA(lt_stpo) WHERE stpo~stlnr lv_bom_no. 组代码为空但预期有替代关系的行就是漏配的行比对的思路是同一张 BOM 下本该成组的行如果组代码字段是空的那这一行就没参与任何替代逻辑无论主数据配得多漂亮都不会生效。5.3 订单侧的一个数量陷阱现象五三个物料按 50%、25%、0% 配好比例下订单之后需求数量算出来是 0.667、0.334 这种数取整后总数比预期少发料时缺料。原因就是 5.3 节讲的归一化加取整——比例之和不到 100% 时系统按占比重新分摊再用计量单位的小数位截断。解决办法是让组内使用可能性之和严格等于 100%或者在设计比例时就按整数、按最小包装单位去凑别留除不尽的小数。排查这类问题的顺序建议固定下来先看主数据的可用性检查和非连续标识再看 BOM 行的组代码是否配对最后看订单组件行的数量和单位。三步走完还没定位到再去查库存状态——质检库存和冻结库存不参与可用性检查这个坑也很常见。6. 取舍把复杂度放在主数据还是放在订单执行配置替代物料的时候真正要回答的问题只有一个MRP 将来应该跑出谁的采购申请。这个问题的答案决定了你该用哪条路而不是反过来。运行时的后继链好处是灵活、配置量小、能处理「差一点」的碎片化库存代价是需求锚点永远挂在原物料上。A、B、C 全空的时候MRP 依然跑 A计划员每天面对一堆买不到的需求靠人脑去翻译成「其实该买 C」。这在过渡期可以接受长期就是慢性病。组替代和比例拆分解决的是「同物性多来源」的问题代价是引入了组代码配对、使用可能性取整这些新的一致性约束配错一个组代码整组静默失效。CS20 批量更换最彻底代价是不可逆且它解决的是主数据问题解决不了「这个月 A 还有货、下个月才切」这种时间维度的问题。所以我的判断习惯是按「时间跨度」来分几周内的临时缺料用后继链加可用性检查让订单自己兜底几个月到一年的供应商切换用比例拆分慢慢过渡让两个来源并行消耗确定永久不再使用的物料别留恋替代链直接上 BOM 更改编号加生效时间让 MRP 从某一天起彻底看不到旧物料。原料作者建议「A、B 长久不用就直接改 BOM」说的正是第三种情况——替代链是给过渡期用的不是给终局用的。验证方法其实很朴素拿一个不参与正式运算的物料号建一张最小 BOM配好替代关系入库、下订单、做可用性检查然后盯住订单组件行的数量和单位跟你手算的结果逐行比对。这一步能在十分钟内暴露掉九成的配置错误比在正式环境里等到发料报错再回头查要便宜得多。从那以后我每配一个替代组都先强迫自己回答一句「MRP 明天该跑谁的采购申请」答不上来就先不动配置先去把 BOM 的生效时间理清楚。希望帮到你。本文还有配套的精品资源点击获取

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

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

免费获取报价 →
↑