简介:《SAP-PP-替代物料操作完全手册》面向SAP PP顾问、生产计划员及制造企业运维人员,聚焦生产过程中物料短缺、旧料切换与新料导入时的替代配置问题。内容围绕平行切换与非平行切换展开,涵盖批量更换BOM组件、只消耗不采购、后继物料、物料后继组以及按比例拆分消耗等常见场景,并对物料主数据、BOM设置、可用性检查、非连续标识、安全库存与MRP需求等关键点作出说明,便于读者理解不同替代策略的适用边界和落地方法。资源包为1个docx文档,大小约871KB,适合作为操作查阅与配置对照材料。目前已有2553人学习,手册结合具体事务代码与设置步骤,可帮助读者梳理从场景判断到系统配置的完整思路,减少因替代设置不当造成的库存压力和生产中断,也适合初学者建立知识框架、有经验者查漏补缺。
1. 生产订单安静地保存成功,没有任何报错,等到发料那天系统才报库存不足
回头查,A 物料三天前就清库了,B 物料在旁边躺了一整库,生产订单却一个 B 都没用上。这是 SAP 替代物料里最常见的一幕:它不会在库存归零的那一刻弹窗提醒,而是等你以为一切正常的时候,在发料、在 MRP、在月结报表上接连出问题。做 SAP-PP 的同行,多半都在这上面吃过亏——主数据看上去都设了,单据就是不动。下面按我踩坑的顺序,把后继物料、后继组、连续替代、按比例拆分这几种方式的报错、根因和改法拆开写,每条都落到具体事务码和字段上。
2. 替代根本不触发:可用性检查没打 02,系统压根不看库存
2.1 为什么“库存不够”这个前提没人替你把关
替代在 SAP 里不是由事件触发的。库存降到 0,系统不会主动做任何事;它只在“可用性检查”这个动作真正执行时,才去算库存够不够,算出来不足,才轮到替代逻辑接管。所以整条链上的第一颗螺丝是物料主数据里的可用性检查组(MRP3 视图那个字段),项目正文里反复出现的“可用性检查 02”就是它。
检查组是空的,或者填了一个不会触发库存核对的组,订单保存和下达时那段检查根本不跑。系统连“不足”这个结论都得不出来,自然也不会给你切到替代物料。很多人以为把 A、B 都维护进 BOM、替代组也建好就完事,其实 BOM 只是一份候选名单,真正决定用谁的是检查结果。名单对了、裁判没上场,比分永远是 0:0。
原文里那句“如果不检查不会替代”,说的就是这个。它不是什么玄学,而是一条顺序:主数据没打检查组 → 订单不跑 ATP → 不产生短缺 → 替代分支不被唤醒。四步里断任何一步,你看到的都是“库存都空了,订单还咬着 A”。
2.2 MM02 里的可用性检查 02:从主数据到订单的三步验证
我一般按下面这个顺序确认一遍,比在订单里反复试要快得多。第一步进 MM02,输入物料和工厂,切到 MRP3 视图,把“可用性检查”填成 02 并保存;第二步,把参与替代的每个物料都做一遍,不是只做 A;第三步,回 CO01 建单,在组件概览里看需求数量和替代行有没有出来。
注意:只给 A 打检查、B 不打,某些场景下表现为“A 用完就停”,不再往后走。参与替代的物料保持检查组一致,能省掉大量排查时间。
物料多了以后逐个 MM02 看太慢,我习惯用一段查询把可疑物料一次捞出来:
" 批量核对:指定工厂下这些物料的可用性检查组是否为空 DATA: lt_chk TYPE TABLE OF marc, ls_chk TYPE marc. SELECT matnr, werks, mtvfp FROM marc WHERE matnr IN @s_matnr " s_matnr:要排查的物料号范围表 AND werks = @p_werks " p_werks:工厂,替代逻辑按工厂生效 INTO TABLE @lt_chk. LOOP AT lt_chk INTO ls_chk. IF ls_chk-mtvfp IS INITIAL. WRITE: / ls_chk-matnr, '工厂', ls_chk-werks, '检查组为空,替代不会自动触发'. ELSE. WRITE: / ls_chk-matnr, '工厂', ls_chk-werks, '检查组 =', ls_chk-mtvfp. ENDIF. ENDLOOP.这段的逻辑很简单:MARC 是物料工厂级数据表,MTVFP 存的就是可用性检查组。查出来是空的,说明这条物料在订单里永远不会触发库存核对,后面所有替代配置都白做。要注意的是它只反映主数据,改完必须新单据才生效,已经建好的订单不会自动刷新。参数上,S_MATNR 用 SELECT-OPTIONS 或内表都行,P_WERKS 一定要给具体工厂——替代和库存都是工厂级的,跨工厂看结果会误导人。
确认完主数据,再去 CO09 看一次可用性情况。CO09 能看到系统当前认定的可用数量、已被占用的数量、以及检查用的日期。如果 CO09 显示可用量还很充足,那问题不在替代,在库存被别的订单或预留占掉了,这时候去查替代是白费力气。
2.3 检查打开了还是不切:三个高频前提断点
第一个断点是 BOM 里根本没维护替代物料。连续替代这条路要求所有候选物料都挂在同一个 BOM 下、同一个替代组里,只维护 A 一个,系统连候选都找不到。第二个断点是订单的需求日期。可用性检查是按日期滚算的,订单组件日期落在过去,前面的订单已经把库存预留吃掉,你看到的是“明明有货却不给我用”。第三个断点最容易被忽略:订单建好之后又补了库存,但没有重新执行检查。
前两个断点靠 CS02 和 CO09 就能看出来;第三个断点的处理是回 CO02,在组件概览里重新触发一次可用性检查,或者干脆删掉重建,别指望系统自己回头再算。我踩过一次:上午库存不足建的订单,下午 MIGO 入库了 200,订单纹丝不动,我以为是替代组配错了,查了半天主数据,最后发现只要重跑一次检查就全对上了。
3. 后继物料断链:非连续标识设成 1,A 用完 B 却不接棒
3.1 MRP4 里的两个字段必须成对出现
后继物料这套玩法的核心在 MRP4 视图的两个字段:非连续标识和后继物料。做法是给 A 设非连续标识 = 1,后继物料 = B;B 那边不需要再往后指,除非你真的想串成三段。这两个字段只设一个,或者设在错误的物料上,表现都是“配置看着没问题,订单一动不动”。
| 字段 | 视图 | 建议值 | 作用 |
|---|---|---|---|
| 非连续标识 | MRP4 | A 设 1,跟随物料设 3 | 标记谁是后继链的起点 |
| 后继物料 | MRP4 | A 指向 B,B 留空 | 库存耗尽后的接管者 |
| 可用性检查 | MRP3 | 02 | 让系统真的去核库存 |
| 采购类型 / 特殊采购类 | MRP2 | 按 B 的实际来源定 | 决定 B 是自制还是外购 |
原文给的两个标识含义很清楚:1 是“单一平行终端的部分”,3 是“相关平行不连续部分”。通俗讲,1 是“我说了算,我光了整组跟着换”;3 是“我跟着别人走,别单独给我指后继”。把 3 也配上后继物料,链路就变得不可控,我第一次配的时候就是这么翻车的——A 用完切到 B,B 用完系统却不知道该找谁,订单直接卡在组件行上。
设完之后还要验证一件事:MIGO 入库看 MMBE,确认 A 和 B 的库存数字是系统认的。原文的例子是 A(66000037)库存 45、后继物料 B(66000036)库存 100,订单要 100 PC,结果应该是 A 出 45、B 出 55,累加凑齐。如果出来的数字是“全给 A”或者“全给 B”,那说明检查没触发或者后继关系没连上,回 MRP4 重新看字段。
3.2 生产订单建不出来:工作计划视图和工艺路线的连带报错
这条坑在原文里被一笔带过,但杀伤力不小:B 是新建的物料号,如果它是自制件,光有 MRP4 的后继关系不够,还得有工作计划视图,否则 CO01 保存时报错,订单压根下不下去。现象是“替代配置全对,但订单建不出来”,很多人会误以为是 BOM 或工艺路线的问题,其实卡在主数据视图不全。
处理分两种情况:B 是自制的,MM02 补工作计划视图(工作调度、能力计划这些页签按工厂填),再用 CA01 建一条能用的工艺路线;B 是外购的,就把 MRP2 的采购类型改成外购,特殊采购类按实际业务定,让它走采购而不是生产。两条路选一条,别混着来——我见过采购类型写自制、又没有工艺路线的物料,CO01 报的是“不能确定工艺路线”,但你怎么查 BOM 都查不出问题。
原文里“66000039 需要维护工作计划视图,否则不能下生产订单”说的就是这一层。顺带提醒一句:工艺路线是按物料和工厂存的,复制一条旧物料的路线过去是最省事的做法,但工序里的工作中心要跟着改,否则能力计划那边会对不上。
3.3 只有两个物料才能累加扣减,第三个物料就会出问题
原文的注意点写得很直白:这种后继玩法只适用于 A、B 两种物料替换,三种及以上不可用。原因在于累加扣减的机制——系统按“先把 A 扣到 0,再从 B 接着扣”的顺序补足需求,链一长,MRP 和后继标识的语义就开始打架。想要三段以上,老实走连续替代那条路(第 5 章会讲比例和策略),别硬套后继物料。
还有一个隐蔽的坑:A 和 B 在 BOM 里的用量必须相等。等用量时,一个 A 换一个 B,数量天然对得上;一旦 A 用 2 个、B 用 3 个,替代后需求量就要按比例换算,光靠 MRP4 那两个字段实现不了,还得回 BOM 里做额外设置。原文的建议是“这种情况直接用第二种方法更简单”——放在实际项目里,这个判断基本没错:配置复杂度上去了,维护的人一换就容易出错,不如换一条更容易解释的路径。
我一般会在测试环境放一组极端数据验证:A 库存 0、B 库存刚好等于需求量、再来一单超过 B 的库存总量,看系统是报缺料还是继续往后找。三种结果都对得上,这套配置才算能用。
4. 后继组不联动:中止组和后继组写不成同一个字母
4.1 一组替一组:触发条件是组里“带头”那位的库存
单物料后继解决的是“一对一”,一组替一组解决的是“多对多”。原文的场景很典型:成品 BOM 下有四个组件,31、32 属于 A 组,34、35 属于 B 组,B 组是 A 组的后继组,而切换的触发点是 31 这一个物料的库存有没有。
配置的骨架就三步。第一步,MM02 进 31 的 MRP4,非连续标识设 1,后继物料指向 34。第二步,MM02 进 32 的 MRP4,非连续标识设 3,后继物料必须留空——这一步是关键,32 是跟随者,它不指路。第三步,CS02 进成品 BOM:双击 31 的数量进项目明细,点“终止数据”,中止组填 A;32 同样处理;再双击 34,点“物料后继数据”,后继组填 A;35 同样处理;保存。
提示:中止组和后继组的字母必须一模一样。原文里提到的“之前受某篇文章误导”,绝大多数情况就是两边字母对不上,或者只有一边设了,系统认不出这层关系,表现出来就是“怎么点都不切换”。
4.2 CS02 里“终止数据”按钮变灰,多半是替代项目组没清掉
这个报错很好认:进项目明细,想点“终止数据”,按钮是灰的,点不动。原因不复杂——这一行已经挂在一个替代项目组里了,SAP 里“替代组”和“后继组”是两套互斥的分组方式,同一行不能同时属于两边。
原文的括号里写得很清楚:如果此处设置了替代项目组,需要关闭(删除信息),否则终止数据灰掉。操作就是双击数量进项目明细,把替代项目组字段清空,保存,再回来点“终止数据”。清的时候注意别只清一行,同一个替代组里的其他行也要一起清,否则保存时报组不完整。
我见过另一种变灰的原因:BOM 被冻结或者有更改编号锁定。前者表现为整张 BOM 都改不动,后者表现为只有某些日期的更改改不进去。判断方法很简单,换一个没被锁的物料试一行,能改就是锁定问题,不能改就是状态问题。
4.3 用“附加-更多-终止信息”反查分组有没有连上
配完之后不要急着下订单。CS02 进去,菜单栏走“附加 → 更多的 → 终止信息”,能看到系统认定的分组对应关系。这一步是黑匣子打开看一眼成本最低的方式:中止组 A 下面挂着谁、后继组 A 下面挂着谁、有没有哪一行落在了组外,一目了然。
看到分组正确之后,再上测试数据。原文给的那组数字很有代表性,我按同样的思路整理成一张对照表:
| 物料 | 分组 | 初始库存 | 单件用量 | 需求(100 件成品) | 实际分配 |
|---|---|---|---|---|---|
| 31 | 中止组 A | 0 | 2 | 200 | 0,触发整组切换 |
| 32 | 中止组 A | 100 | 2 | 200 | 0,跟随整组切换 |
| 34 | 后继组 A | 200 | 2 | 200 | 200 |
| 35 | 后继组 A | 300 | 2 | 200 | 200 |
这张表最值得看的是 32 那一行:它明明有 100 的库存,却一个都没用上。因为整组切换的判定挂在 31 身上,31 归零,整组就跟着走,32 的库存再多也不参与。这正是后继组和后继物料最大的区别,也是很多人配完之后觉得“结果不对”的原因——你要的不是“谁有货用谁”,而是“带头那个没了,全组换人”。
4.4 四个物料也可以塞进一张 BOM 一起维护
原文最后提了一句:也可以把四个物料都加到一个 BOM 里进行一起维护。实际做的时候,这句话省下的工作量不小——分组维护集中在一张 BOM 上,检查中止组和后继组是不是成对,比分散在两张 BOM 里翻找要快得多。但要注意组内顺序,中止组里谁是带头的那一个,决定了切换从什么时候开始。带头的那个必须是库存最先耗尽、且业务上真正代表“老料用完”的物料,随手挑一个当带头,切换时机会整个错位。
5. 避坑清单:比例、冻结、CS20 变红这些高频翻车点
5.1 使用可能性加起来不是 100%,订单数量凭空少一截
现象:按比例拆分的方式配完,BOM 里三个物料分别填 50%、30%、20%,订单出来是正常的;有人改成 50% 和 25%,订单需求量却变成 0.667 和 0.334,计量单位是 PC 的时候,直接表现为“所需物料数量不足”。
原因在系统的归一化算法。它不看你填的绝对值,只看相对关系,按比例重新分摊需求。原文给的公式可以直接套:A 的需求数量 = 1 × 50% / (50% + 25%) = 0.667,B 的需求数量 = 1 × 25% / (50% + 25%) = 0.334。
| 物料 | BOM 使用可能性 | 归一化占比 | 需求量(总需求 1) |
|---|---|---|---|
| A | 50% | 50 / 75 = 66.7% | 0.667 |
| B | 25% | 25 / 75 = 33.3% | 0.334 |
解决方式有两条:要么把比例凑成 100%,从源头上不给自己找麻烦;要么接受归一化,同时确认单位精度够用。PC 这种整数单位最容易出问题,0.667 向下取整之后就是 0,订单上直接看不到这个物料。我在项目里一律要求配置比例之和等于 100%,写进配置检查清单,比事后解释省事。
顺带说清策略这个参数:策略 1 是“手工维护 / 按用途可能性”,走的是按比例分配,优先级在这一档不起作用;策略 2 是 100% 检查,走的是按优先级逐个消耗。原文的连续替代用的是策略 2 加优先级 1/2/3,效果就是 A 用完用 B、B 用完用 C,每次只能用一个人的库存。两种策略不能混着理解,填错字段,出来的结果完全不同。
5.2 BOM 冻结后再去维护,保存直接报错
现象:CS02 改组件,回车就报错,提示物料状态不允许;换个物料改同一张 BOM 也一样。
原因:物料状态的业务事务控制把 BOM 维护挡掉了。原文提到 A 的采购视图里物料状态设成 02,这个 02 控制的是 BOM 而不是采购,所以会出现“BOM 里明明还是 A,但采购那边不受影响”的错位感。
解决:进 OMS4 看这个状态对各个业务事务的允许情况,按实际需求调整配置;或者在做 BOM 变更时临时把状态放开,改完再设回去。要注意的是,状态的放开和回收都要有人负责,别改完忘了设回来,否则后面的采购和计划判断全部失效。
5.3 CS20 批量替换,执行完一片红
现象:CS20 里用 B 替换 A,执行后列表里绿色的是成功、红色的是失败,红的点进去看消息各不相同。
原因通常是三类:物料状态或 BOM 冻结导致改不进去;更改编号和生效日期对不上,BOM 在那一天没有有效版本;选中的 BOM 用途或可选 BOM 不在替换范围内。
解决:先拿一张 BOM 单独试,确认单张能成功再全量跑;红行双击看具体消息,别一股脑重跑;替换前把要影响的 BOM 清单导出来,跑完逐条核对。原文说“如果有多个 BOM,选中需要替换的 BOM 再点更换项目”,这句话的意思是范围要自己圈定,圈大了就会误伤,红色一片往往就是范围问题。
5.4 MRP 还在老物料头上跑需求
现象:A、B、C 三个物料库存全为 0,跑完 MRP,跑出来的还是 A 的需求,B 和 C 一个计划订单都没有。
原因:系统始终认为 A 是最适用的物料,替代只是“消耗顺序”,不改变 MRP 的主判断。这是平行切换机制自带的行为,不是配置错了。
解决:如果 A、B 长期不用,别指望替代关系把 MRP 掰过来,直接用 BOM 的更改编号加生效时间控制——从某一天起,BOM 里就是新物料,老物料自然不再被展开。原文给的建议就是这个方向,我在项目里也这么做:临时切换用替代,永久切换改 BOM,两件事不要混。
5.5 改了组件不重新做可用性检查
现象:CO02 进订单手工调整了组件数量或日期,保存成功,发料时照样报库存不足。
原因:手工改动不会自动触发可用性检查,替代行还是上一次检查的结果。订单看着是新的,判断依据是旧的。
解决:改完之后显式再跑一次检查,确认组件行刷新;批量场景下宁可删单重建,也别在一张已经跑偏的订单上反复修补。这条踩过的人最多,因为保存成功给了你一种“已经生效”的错觉。
6. 快速定位:拿到“替代不生效”的工单,我按这个顺序看五眼
替代类问题的麻烦之处在于,同一个现象背后可能是五个完全不同的原因,从主数据到订单状态都有可能。反复试错很耗时间,我后来固定了一套顺序,从最便宜的动作开始,基本三到五分钟能定位到层。
第一眼看订单本身:CO03 进单,组件概览里有没有出现替代行。没有替代行,说明检查根本没跑或者跑了没结论,往下走;有替代行但数量不对,说明机制通了,问题在数量或比例上,直接跳到第四眼。
第二眼看库存和占用:MMBE 确认 A 的库存是不是真的为 0,CO09 确认可用量是不是被别的订单占着。这两个数经常打架,MB 显示为 0、CO09 显示还有可用,那问题就在预留和日期上,不在替代配置。
第三眼看主数据:MM02 的 MRP3 视图,可用性检查是不是 02;MRP4 视图,非连续标识和后继物料是不是成对。这一步用第 2 章那段查询批量过一遍最省事。
第四眼看 BOM:CS02 进成品 BOM,项目明细里的替代项目组、优先级、策略、使用可能性,以及“附加 → 更多的 → 终止信息”里的分组对应。字母对不对、策略填 1 还是 2、比例加起来是不是 100%,全在这一屏。
第五眼看 MRP 结果:MD04 或 MD02 单跑一次,看需求挂在谁头上。如果替代配置全对、订单也切了,但 MRP 还在老物料上跑,那不是故障,是机制,改 BOM 生效时间解决。
| 现象 | 第一眼看哪 | 判断依据 |
|---|---|---|
| 订单不出现替代行 | CO03 组件概览 | 无替代行 = 检查没跑 |
| 有替代行但数量为 0 | CS02 项目明细 | 使用可能性比例异常 |
| 检查按钮点了没反应 | MM02 MRP3 | 检查组为空或不跑 ATP |
| 一组物料只切了一半 | CS02 终止信息 | 中止组与后继组字母不一致 |
| MRP 仍跑老料需求 | MD04 | 并行切换的正常表现 |
这套顺序的价值在于每一步都能给出“往下走还是就地解决”的结论,不用来回横跳。血泪经验是:别一上来就怀疑配置,先确认检查到底跑没跑,八成问题在第二眼和第三眼就结束了。
从那以后我每次上线替代相关配置,都强制走一遍“主数据检查组 → BOM 分组 → 单张订单验证 → MRP 观察”这四步,哪怕需求再急也不跳。跳过的每一步,后面都要用两倍的时间还回来。希望帮到你。
本文还有配套的精品资源,点击获取