"成品1 → 虚拟半成品1(Phantom) → 成品2",即 一个成品(成品2)被挂在另一个成品(成品1)的BOM下,且中间通过虚拟件连接。
这是一个典型的 "成品作为子件"(Finished Goods as Component) + "虚拟件展开" 的混合结构。
您观察到的现象完全符合 SAP 的标准逻辑,但原因确实容易被误解。下面我将逐层拆解、精准定位根本原因。
✅ 您的场景结构还原
物料A:成品1(MRP类型 = M0,运行MPS)
└── BOM项:半成品虚拟件1(标记为 Phantom)
└── BOM项:成品2(本身也是可销售的成品,MRP类型 = M0)
您对 成品1 运行 MD41(MPS) → 成品2 无计划订单生成 ❌
您单独对 成品2 运行 MD41 → 能生成计划订单 ✅
🔍 根本原因:MPS 不会为"相关需求"生成计划订单
这是最关键的一点!
▶ 当您对 成品1 运行 MPS:
系统为 成品1 创建 独立需求(PIR);
展开 BOM 时,因 半成品虚拟件1 是 Phantom,系统跳过它,直接将需求传递给其子件 ------ 成品2;
但此时,成品2 的需求是"相关需求"(Dependent Requirement),不是独立需求;
MPS(MD41)只处理"独立需求"(如 PIR、销售订单),不处理"相关需求";
因此,即使成品2 的 MRP 类型是 M0,MPS 也不会为其生成计划订单。
💡 MPS 的设计初衷:只规划"面向市场的关键物料"(如主成品),不规划由上层派生的内部需求。
▶ 当您单独对 成品2 运行 MD41:
您实际上是人为将其视为"主计划对象";
系统假设存在 成品2 的独立需求(即使没有 PIR,MD41 也会尝试运行);
因其 MRP 类型 = M0,MPS 允许为其创建计划订单。
⚠️ 注意:这种"单独跑"成功,是因为您绕过了需求来源的上下文,强制触发了 MPS 逻辑。
📌 关键区分:独立需求 vs 相关需求
需求类型 来源 MPS(MD41)是否处理?
独立需求(Independent) PIR(MD61)、销售订单 ✅ 是
相关需求(Dependent) 上层物料的 BOM 展开 ❌ 否
在您的场景中:
成品2 在成品1 的 BOM 下 → 需求是 相关需求 → MPS 忽略;
单独跑成品2 → 系统当作 独立需求对象 → MPS 处理。
✅ 正确解决方案
方案一:✅ 对成品2 使用 MRP(PD),而非 MPS(M0)
将 成品2 的 MRP 类型改为 PD(Material Requirements Planning);
保持 成品1 的 MRP 类型 = M0;
运行流程:
- MD41:为成品1 运行 MPS → 生成成品1 的计划订单;
- MD02:对成品1 或全厂运行 MRP → 自动展开 BOM,为成品2 生成采购/生产建议(计划订单或PR)。
✅ 这是 SAP 标准分层计划最佳实践:
MPS 管顶层成品,MRP 管下层所有物料(包括作为子件的成品)。
方案二:⚠️ 强制让成品2 参与 MPS(不推荐)
保留成品2 的 MRP 类型 = M0;
但必须手动为成品2 创建 PIR(MD61),或确保有销售订单;
这样 MPS 才会为其生成计划订单;
❌ 问题:无法自动响应成品1 的需求变化,需人工维护 PIR,易出错。
方案三:🔧 检查虚拟件配置(次要)
确认 半成品虚拟件1 确实标记为 Phantom:
在 BOM(CS02)中,项目类别 = "Phantom";或
在物料主数据(MM02)MRP 视图中,勾选 "Phantom assembly"。
若未正确标记,系统不会展开,但您说"单独跑成品2能出",说明展开是成功的,此项大概率无误。
🔧 验证步骤(推荐操作)
- 为成品1 创建 PIR(MD61);
- 运行 MD41(仅成品1);
- 查看 MD04(成品2):
应看到一条 "Dependent Reqmt"(相关需求),但无计划订单; - 运行 MD02(针对成品2 或全厂);
- 再查 MD04(成品2):
应出现 "Planned Order"(若 MRP 类型 = PD)。
✅ 总结
根本原因:
MPS(MD41)只响应"独立需求",而成品2 在成品1 的 BOM 下产生的是"相关需求",因此被忽略。
正确做法:
成品2 不应使用 MPS(M0),而应设为 MRP(PD);
先跑 MPS(成品1),再跑 MRP(全厂或成品2),即可自动生成成品2 的计划订单。
这不是配置错误,而是 SAP MPS/MRP 分层逻辑的正常行为。
将"作为子件的成品"纳入 MPS 范围,本身就是一种反模式(anti-pattern),会导致计划冗余和冲突。
💡 记住:只有直接面向市场的物料才进 MPS,内部流转的物料一律走 MRP。