SAP替代物料配置全解:四类替代、可用性检查与避坑排查
简介:SAP-PP-替代物料操作完全手册面向SAP PP顾问、生产计划与物料管理人员,聚焦生产过程中物料短缺、替换及后继切换的业务场景。内容围绕平行切换与非平行切换展开,覆盖批量更换BOM组件、只消耗不采购、后继物料、物料后继组及按比例拆分等典型配置,并结合CS20b、MM02、CS02、CO01等事务代码说明主数据、BOM与生产订单中的操作要点和注意事项。资源包为1个docx文档,大小871KB,便于按章节查阅与现场对照。已有2557人学习,适合需要系统梳理替代物料设置逻辑、厘清MRP需求与库存切换关系,并希望减少因物料短缺造成生产中断的读者参考。
1. SAP 替代物料到底分几种:从「A 用完切 B」到后继组的全景
某工厂的 A 料供应商临时断供,计划员在 SAP 里照常下了一张 100 件的生产订单。可用性检查跑完,系统自己把 45 件 A 料留下、55 件换成了 B 料,订单既没报错也没人工改单。这就是 SAP-PP 模块里替代物料最典型的一幕:它靠主数据、BOM 和可用性检查三者串起来自动完成切换,人不需要记。这份手册处理的是四类替代——单物料后继替代、后继组整组切换、按比例拆分、连续替代,外加 CS20 批量换料和「只消耗不采购」的处理方式。读者对象是天天跟 BOM、工艺路线、MRP 打交道的计划员和内部 PP 顾问,也适合刚接过替代配置、被「配了却不生效」折腾过几轮的人。
2. 平行切换与按比例拆分:策略 1 和策略 2 到底差在哪
2.1 先把四类替代的边界划清楚
替代物料这个词在 SAP 里覆盖面很宽,实际项目上常见的至少有四类。对它们的边界如果心中没数,就会把适合 A 场景的配置硬套到 B 场景,最后得到一堆「看起来配了、跑起来不对」的单子。
| 类型 | 触发条件 | 适用物料数 | 主要维护位置 | 明显局限 |
|---|---|---|---|---|
| 单物料后继替代 | 前料库存为 0,可用性检查后切换 | 严格两个 | MM02 的 MRP4 + MRP3,CS01 | 三个及以上物料不适用 |
| 后继组 | 组内主控物料库存为 0,整组切换 | 组对组 | MM02 的 MRP4,CS02 的终止/后继组 | 终止组与后继组代码必须一致 |
| 按比例拆分 | 按使用可能性分摊需求 | 两个及以上 | CS01 的替代项目组,策略 1 | 比例之和偏离 100% 时数量会失真 |
| 连续替代 | 按优先级顺序逐个消耗 | 两个及以上 | CS01 的替代项目组,策略 2 | 每次只能消耗当前物料库存内的量 |
平行切换这个说法,落到系统里其实就是前两类:A 用完切 B,B 用完切 C。这里常被忽略的一点是:系统始终认为 A 是最适用的物料。也就是说 A、B、C 全都没库存的时候,MRP 依然会跑出 A 的需求,而不是 C 的。这个行为在生产端没感觉,在计划端埋着一个隐患:长期不用的料会一直被 MRP 反复提示。
提示:A、B 物料超过一个计划周期都不再使用的情况下,更稳妥的做法是直接用 BOM 的更改编号和生效时间来控制,让新版本 BOM 里只留 B,这比在替代关系上反复打补丁可靠得多,也省去了后续清理替代组的工作。
2.2 BOM 里的四个参数:替代项目组、优先级、策略、使用可能性
所有基于 BOM 的替代,都要先在组件行上把「替代」这层关系建立起来。入口在 CS01/CS02 的项目明细里,双击组件行的数量字段,会进入替代项目维护界面。四个关键参数都在这:
- 替代项目组:同一组替代件必须写同一个组名(如 A)。这是把几行组件「绑在一起」的唯一标识,写错一个字母就分属两组,永远不生效。
- 优先级:连续替代里的消耗顺序,1 最先用,2 其次,以此类推。策略 1 下这个字段不起作用。
- 策略:1 表示手工维护、按用途可能性分配;2 表示 100% 检查,配合优先级做顺序消耗。
- 使用可能性:按百分比填写,只在策略 1 下参与需求拆分计算。
策略这个值是最容易选错的地方。很多现场明明想「A 用完再 B」,结果策略填了 1、使用可能性填了 100/0,跑出来发现需求没有按顺序切,就以为是系统出了问题。实际原因是策略 1 根本不看优先级,它只按百分比分摊。反过来,如果想按比例供货(多供应商同料不同号),却把策略填成 2,那系统就变成按优先级顺序吃库存,比例完全不起作用。
用一句话记住区别:策略 1 是「同时按比例分」,策略 2 是「排队依次吃」。
2.3 按比例拆分的完整操作链
举个具体场景:某成品需要 2 个原材料,三个物料 66000031、66000032、66000034 功能相同、只是供应商不同,希望按 5:3:2 的比例分摊。步骤如下。
第一步,CS01 建 BOM 或 CS02 改现有 BOM,把三个物料都作为组件挂进去,用量按单件成品的实际需求填。
第二步,依次双击三个组件的数量字段进入替代项目维护界面,替代项目组统一填 A,回车。填完第一行之后,界面上会出现蓝色小箭头,点它可以一次性维护整组的优先级、策略、使用可能性。
第三步,策略统一填 1,使用可能性按 50、30、20 填。这里不要填优先级,策略 1 下填了也没意义,反而会让后面接手的人误判。
第四步,CA01 维护工艺路线。这一步没有替代逻辑,但少了它生产订单创建不出来,所以经常被当成「替代不生效」来排查,实际是工艺路线缺失。
第五步,CO01 创建生产订单,生产数量 100,单件需要 2 个原材料,总需求 200。系统按 5:3:2 拆出 100、60、40。
第六步,如果使用可能性一栏全部留空直接回车,系统会弹警告要求输入使用可能性,这个警告可以回车跳过,订单仍然能建,只是拆分结果全是 0,等可用性检查时再按实际库存找料。
注意:拆分只在创建订单的那一刻计算一次。后续库存变化不会反过来改已建订单的需求数量,要调整得走组件替换或改单,不要指望重新跑一次检查就自动重算。
2.4 使用可能性之和不是 100 时,数量会怎么算
这是实际项目里最容易被忽略的一处细节。系统并不强制要求组内使用可能性加起来等于 100,它会自己做归一化。公式是:
某物料需求数量 = 总需求 × 该物料使用可能性 / 组内使用可能性之和
拿两个物料举例,A 填 50%、B 填 25%,总需求 1 个:
- A 的需求 = 1 × 50% /(50% + 25%)= 0.667
- B 的需求 = 1 × 25% /(50% + 25%)= 0.334
问题就出在这里。当计量单位是 PC 且不允许小数时,0.667 和 0.334 加起来的 1.001 会向上取整成 2,或者某一项被截断,结果就是「明明只需要 1 个,系统要了 2 个」或者「要 1 个,实际只分了 0.999」。计量单位是 KG、M 这类允许小数的还好,是 PC、SET 的时候就容易出现需求数量不足或者虚高。
我的习惯是:只要用策略 1,维护完必须回到组内把使用可能性加一遍,强制凑成 100。如果业务上确实存在「A 占 50%、B 占 25%、剩下 25% 看情况」这种模糊需求,那说明它不适合用比例拆分,应该换成连续替代加优先级,或者干脆拆成两张 BOM 用更改编号管理。
还有一个连带影响:比例拆分下,MRP 跑出来的采购需求也是按比例分摊的。如果三个供应商实际只有两家在供货,第三家的比例没有及时清成 0,采购端就会持续收到一张没人处理的采购申请。这个坑在换供应商的季节特别集中,血泪经验是每次供应商变更都同步检查一遍替代组的使用可能性。
3. 两物料后继替代:MRP4 的三个字段与可用性检查 02
3.1 主数据里必须填对的三处
单物料后继替代是所有替代类型里配置最少的,但漏一个字段就完全不生效。需要维护的物料有两支:前料 A 和后料 B。
先看 A。MM02 进入 A 的物料主数据,切到 MRP4 视图,两个字段:
- 非连续标识:填 1,含义是「单一平行终端的部分/物料」,表示这个物料是可以被终止并被后继物料接替的。
- 后继的物料:填 B 的物料号。
再看 A 的 MRP3 视图,可用性检查字段填 02。这一处是整套配置的开关,不填 02 系统就不会在订单创建时做库存可用性检查,也就不会触发替代。很多人配完 MRP4 两个字段就去下单,发现纹丝不动,翻车点基本都在这里。
然后是 B。B 也需要维护工作计划视图(工艺路线相关视图),否则 B 作为独立物料无法下达生产订单。这一步在测试环境经常被跳过,因为测试时只用 A 下过单,一切到 B 就报「不能创建订单」,排查半天才发现是视图缺失。
最后一处容易漏:A 和 B 都要有工艺路线。替代只是换了物料号,工序还是那套工序,工艺路线不存在,订单照样建不出来。
3.2 BOM 与库存的准备
CS01 把 A 和 B 都作为组件挂到成品 BOM 下。这里有个前提:A 和 B 的用量必须相等。如果 A 用 2 个、B 用 3 个,光靠 MRP4 的后继设置是不够的,还得在 BOM 里做额外的用量换算设置,复杂度上一个台阶。遇到这种不等量的场景,我的建议是直接改用按比例拆分或后继组,不要在后继物料上硬拗。
库存准备用 MIGO。示例数据:给 A 收货 100,给 B 收货 45。注意 B 的库存必须真实存在,因为可用性检查读的是实际库存加已确认的收货,不会凭空生成。
3.3 下单验证:45 加 55 是怎么拆出来的
CO01 创建生产订单,生产数量 20,单件需要 5 个原材料,总需求 100 PC。此时系统做可用性检查:A 有 100 库存,看起来够,但要按订单顺序占用。当 A 的可用量只剩下 45、而需求是 100 时,检查逻辑判断缺口 55,于是自动把 55 的需求切给后继物料 B。
结果就是订单组件里出现两行:A 45、B 55。整个过程不需要人工干预,也不需要手工改组件清单,这正是后继替代相比手工换料的价值所在。切换后的订单在组件明细里能直接看到两个物料号,合计数量等于原需求。
这里要强调一句:这个方法是严格的两物料替代。三个及以上物料想用「A 完了切 B、B 完了切 C」,这套配置做不到,必须上连续替代(策略 2 加优先级)或者后继组。
3.4 用一段 ABAP 把 BOM 里的替代关系查清楚
配置完想确认系统里到底存了什么,光看界面容易被不同视图的显示差异误导,直接查表更干脆。BOM 抬头在 MAST,组件行在 STPO,替代相关字段都在 STPO 上:ALPGR 替代项目组、ALPRF 优先级、ALPST 策略、EWAHR 使用可能性。
" 按成品 + 工厂反查 BOM 中所有带替代项目组的组件行 " 适用:ECC 7.40 以上或 S/4HANA(使用了内联声明与 NEW 语法) REPORT zpp_alt_item_check. PARAMETERS: p_matnr TYPE mast-matnr OBLIGATORY, p_werks TYPE mast-werks OBLIGATORY. SELECT m~matnr, m~werks, s~stlnr, s~stlal, s~idnrk, s~menge, s~alpgr, s~alprf, s~alpst, s~ewahr FROM mast AS m INNER JOIN stpo AS s ON s~stlty = m~stlty AND s~stlnr = m~stlnr AND s~stlal = m~stlal INTO TABLE @DATA(lt_alt) WHERE m~matnr = @p_matnr AND m~werks = @p_werks AND s~alpgr <> @space. IF sy-subrc <> 0. WRITE: / '该 BOM 未维护替代项目组'. RETURN. ENDIF. SORT lt_alt BY alpgr alprf. LOOP AT lt_alt INTO DATA(ls_alt). WRITE: / '组:', ls_alt-alpgr, '优先级:', ls_alt-alprf, '策略:', ls_alt-alpst, '组件:', ls_alt-idnrk, '用量:', ls_alt-menge, '使用可能性:', ls_alt-ewahr. ENDLOOP.逻辑说明:MAST 是 BOM 到物料的分配表,一个成品在一个工厂下可能有多套可选 BOM(由 STLAL 区分),所以关联条件必须把 STLTY、STLNR、STLAL 三个都带上,少一个就会把别的 BOM 的组件混进来,查出来的数据看着像重复行,其实是关联缺条件。WHERE 里加 ALPGR 非空,是为了过滤掉普通组件,只看参与替代的行。
参数说明:p_matnr 填成品物料号,p_werks 填工厂。输出按替代组和优先级排序,能直观看出某一组的策略是 1 还是 2、使用可能性加起来是不是 100。实际排查时我一般会把这个结果导成 Excel,加一列 SUMIF 按组求和,比在系统里一个个点快得多。
如果查出来某一行 ALPGR 为空但业务说它应该参与替代,那基本可以判定是维护时组名漏填,或者当时维护在不同的 BOM 用途上。
4. 后继组:一组物料整组切换的绑定与验证
4.1 场景与组关系
单物料后继替代只能一对一。当一组物料整体被另一组物料替代时,就要用后继组。典型场景:某成品 66000033 的 BOM 下有四个组件,66000031 和 66000032 是 A 组,66000034 和 66000035 是 B 组,B 组是 A 组的后继组,并且以 66000031 的库存有无作为整组切换的触发条件。
关键在于「触发」和「整组」两个词。触发只看 66000031 这一个物料,但切换发生时整组一起换,即使 66000032 还有 100 的库存也会被放弃。这是很多人在测试时觉得「不对」的地方:明明 32 有货,为什么不用了。答案是设计如此,整组切换的意义就在于避免混用两代组件造成配套问题。
4.2 主数据:1 和 3 的区别
MM02 进入 66000031 的 MRP4 视图:
- 非连续标识填 1,即「单一平行终端的部分/物料」,它是这一组的触发物料。
- 后继的物料填 66000034。
MM02 进入 66000032 的 MRP4 视图:
- 非连续标识填 3,即「相关平行不连续部分/物料」,表示它是随组切换的从属物料。
- 后继的物料必须留空。
这两处的 1 和 3、填与不填,是最容易搞混的一组配置。把 32 也填上后继物料,系统会认为 32 也有独立的后继关系,组关系就乱了;把 32 的标识留空,它就只是个普通组件,切换时不会跟着走。
4.3 BOM 侧:终止组与后继组必须同名
CS02 打开 66000033 的 BOM,双击 66000031 的数量字段进入项目明细,点「终止数据」,在「中止组」里填 A。66000032 做同样操作,也填 A,表示这两个物料同属被替代组。
接着处理 B 组。回到 BOM 主界面,双击 66000034 的子项目,点「物料后继数据」,在「后继组」里填 A。66000035 同样填 A。
只有终止组和后继组的代码完全一致,两组才能链接上。这是我在项目里见过最多的一句抱怨的来源——「配了半天没效果」,最后发现一边填 A 一边填 a,或者一边填 A 一边填 AA。系统不报错,因为它只是没找到匹配项,沉默地什么都不做。
注意:如果组件行上已经维护了替代项目组,终止数据字段会变灰不可编辑。要先把这个组件的替代项目组清空(删除该字段内容),终止数据才恢复可输入。这一点文档里几乎不提,但现场天天遇到。
4.4 测试数据与整组切换验证
库存准备:66000031 收 0,66000032 收 100,66000034 收 200,66000035 收 300。
CO01 创建生产订单,生产 100,每个组件各需 200。
点物料可用性检查。预期结果:由于 66000031 库存为 0,触发整组切换,需求全部转到 66000034 和 66000035 上,各 200。66000032 的 100 库存被晾在一边,不参与消耗。
这个结果如果和预期不符,按顺序检查三处:31 的非连续标识是否为 1、后继物料是否为 34;31 和 32 的终止组是否都是 A;34 和 35 的后继组是否都是 A。三处都对还不行,就去看 BOM 是不是改完之后没保存,或者订单创建在另一个工厂的 BOM 上。
4.5 用菜单自检组关系是否真的建上了
配置完成后回到 CS02,进 BOM 主界面,菜单栏「附加 - 更多的 - 终止信息」,能看到系统识别出的组关系。这里显示的和你在字段里填的是两回事:字段填了不代表系统认了,只有这页显示出来,才说明终止组和后继组真的链接成功。
我习惯把这个页面作为配置完成的判定标准,而不是「我填完了」。填完只是输入,链接成功才是结果。四个物料也可以放在同一个 BOM 里一次性维护,比分开维护省事,但前提仍然是组名一致。
5. 避坑与排查:替代不生效的五种现场
5.1 替代完全不触发,订单里还是原来的物料
现象:主数据、BOM 全部按步骤配完,CO01 下单一如既往只出现前料,数量也按总需求给足,没有任何切换动作。
原因:最典型的是 A 的可用性检查没设成 02。可用性检查这个开关在 MRP3 视图,不在 MRP4,维护的时候容易被「替代都在 MRP4」这个印象带走,只看了 MRP4 就以为完事。第二个原因是下订单时没有真正执行可用性检查,某些订单类型默认不带检查,或者检查被手工跳过。第三个原因是组件行上的需求日期落在替代关系生效之前,系统按时间点判断不参与。
解决:先 MM03 看 A 的 MRP3 视图确认可用性检查为 02;再在订单里手工点一次可用性检查按钮看结果;最后检查 BOM 的生效日期与替代主数据的有效期。这三步走完基本能定位。如果还是不动,用第 3 章那段 ABAP 查一下 STPO,确认组和策略真的落到表里了。
5.2 连续替代下订单只能下到库存以内的数量
现象:走连续替代(策略 2 加优先级),前料库存 200,能生产的成品只有 100 个,下 200 个的订单时报错,订单无法下达;或者系统提示库存不足。
原因:这属于设计行为,不能算缺陷。策略 2 的语义是「按优先级顺序消耗,每次只用一个物料」,它在订单创建时按当前物料的可用库存做检查,超出部分不会自动溢出到下一个优先级。三个物料各自有 200 库存,逻辑上是「先用完 31 的 200,再下 100 个时会跳到 32」,而不是「一张订单里 31 给 200、32 给 200」。
解决:接受这个语义,把大订单拆成多张,或者改用策略 1 按比例拆分。如果业务坚持要一张订单里混合两个料,那本质上是比例替代而不是连续替代,配置方向就要换。
5.3 终止数据是灰的,点不动
现象:CS02 进到组件行,点「终止数据」,字段是灰的,无法输入中止组。
原因:这一行已经维护了替代项目组。两个功能在同一组字段区域里互斥,系统不允许同一行既是替代组成员又是终止组/后继组成员。
解决:先把该组件的替代项目组字段清空并保存,再回来维护终止数据。清空之前确认这行确实不该走比例替代,否则等于把已有的替代关系拆了。
5.4 组关系配全了但切换不发生
现象:非连续标识、后继物料、终止组、后继组全部按步骤填了,测试时整组不动。
原因:终止组和后继组的代码不一致,大小写、空格、多输一个字符都会导致链接失败,而系统对此不报任何错误。另一个原因是把从属物料的非连续标识也填成了 1 并给了后继物料,破坏了组的从属关系。
解决:用「附加 - 更多的 - 终止信息」看系统识别出的组关系,看不到就是没链上。逐个核对四个物料的组代码,建议统一用大写单字母,避免任何格式差异。从属物料的后继物料字段必须留空,这一条要当成硬规则。
5.5 三种以上物料想用后继物料,怎么配都不对
现象:A、B、C 三个物料,希望 A 用完切 B、B 用完切 C,按单物料后继替代的方式给 A 配 B、给 B 配 C,结果只有第一段切换生效,第二段不动作,或者行为混乱。
原因:MRP4 的后继物料机制在设计上只处理两个物料之间的一次性接替,不支持链式传递。B 既是 A 的后继又是 C 的前料,这个双重身份在单后继模型里表达不出来。
解决:三个及以上物料的顺序消耗,改用连续替代:全部挂进同一个 BOM,同一个替代项目组,策略填 2,优先级按 1、2、3 排。这样系统按优先级排队消耗,语义清晰,也不会出现链式传递的歧义。另一种选择是后继组,把 B、C 做成一组,但组切换是整组跳,不是逐个消耗,要看业务到底要哪种。
另外提醒一句,连续替代能不能切,取决于可用性检查有没有真正执行。库存只有 200 却下了 300 的单,创建时可能过得去,发料时才报库存不足——这是没做检查的典型表现,排查时不要只盯着替代配置,先确认检查这一步有没有跑。
6. 批量换料与长期收口:CS20、物料状态和更改编号
6.1 CS20 批量替换:绿色成功、红色失败
当某个物料在公司范围内全面被另一个物料取代、旧料彻底消亡时,逐个 BOM 改是灾难。CS20 用来做批量替换:输入旧物料 A、新物料 B,执行后系统列出所有含 A 的 BOM,选中需要替换的条目执行更换。结果用颜色区分,绿色表示该 BOM 替换成功,红色表示失败。
红色失败的原因通常是 BOM 处于锁定状态、BOM 有更改编号要求但没给、或者新物料 B 在该工厂没有维护。执行前先把这些前置条件过一遍,比执行完再逐个排查省时间。替换完成后回到 CS03 抽查两三个 BOM,确认组件行里的物料号和用量都正确,特别是用量——如果 A 和 B 的单位不同,替换后用量不会自动换算。
6.2 只消耗不采购:物料状态 02 加安全库存的组合
有些场景不是要切换,而是要让旧料「只消耗、不再采购」。做法是 MM02 把 A 的采购视图物料状态设成 02。这里有个细节必须说清楚:02 控制的是 BOM 相关行为,并不直接控制采购,所以设完之后要去 OMS4 核对物料状态的实际配置,看它到底限制了什么,再按实际需求调整。
配合的手段是给 A 设安全库存。当库存消耗到安全库存水平附近时,系统会产生采购申请,但因为物料状态的关系,采购员转不成采购订单,这个信号会回流到计划或数据岗,触发人工判断:继续用 A 并补采购、完全切到 B 并另行处理 A 的余料、还是 A、B 并存一段时间。
判断完之后动作分三种:改组件清单走 CO02、改物料状态走 MM02、改 BOM 后重新跑 MRP 走 MD02。这三条路径对应三种不同的处理力度,选错了要么改不干净,要么把还需要的旧料彻底废掉。
6.3 长期不用的物料,用更改编号和生效时间收口
平行切换最大的后遗症是 MRP 永远认为 A 最适用。A、B、C 全无库存时,MRP 跑出来的还是 A 的需求,计划员每周都要手工处理一批无意义的采购申请。
如果 A、B 已经确定长期不用,正确做法不是继续在替代关系上叠加配置,而是直接改 BOM:用更改编号建一个新版本,生效时间设在切换点,新版本里只保留当前在用的物料。这样 MRP 跑出来就是干净的,替代组也可以顺势清掉。替代机制适合过渡期,不适合当长期状态用。
6.4 上线前的一次性检查清单
| 检查项 | 位置 | 判定标准 |
|---|---|---|
| 可用性检查 | MM03 的 MRP3 视图 | 前料为 02 |
| 非连续标识 | MM03 的 MRP4 视图 | 主控物料 1,从属物料 3 |
| 后继物料 | MM03 的 MRP4 视图 | 主控物料填后料,从属物料留空 |
| 替代项目组 | CS03 组件行 | 组内一致,策略与业务意图匹配 |
| 使用可能性 | CS03 组件行 | 策略 1 下组内合计为 100 |
| 终止组/后继组 | CS03 附加菜单 | 代码一致且能显示链接结果 |
| 工艺路线 | CA03 | 前后料均有,能建单 |
| 工作计划视图 | MM03 | 后料已维护 |
这张表我每次上线前都会完整过一遍,哪怕是第二次改同一个 BOM。因为替代这块的配置分散在物料主数据的三个视图、BOM 的两个层级和工艺路线里,任何一处漏了,表现出来的现象都是「不切换」,但根因可能完全不同。从那以后我每次配完替代,都强制走一遍「查表确认字段 → 附加菜单确认组链接 → 建单确认数量拆分」这三步,不再相信界面上的填写动作本身。希望帮到你。
本文还有配套的精品资源,点击获取