SAP MRP(物料需求计划)的运算核心是一个供需平衡的引擎,其驱动力直接来源于销售订单和预测这两类关键需求。它们驱动MRP的机制和流程,本质上是需求如何被系统识别、汇总、并与现有供应对冲,最终转化为净需求和具体供应建议的过程。这个过程受到物料主数据(尤其是MRP类型和计划策略)的严格管控。
一、 销售订单与预测作为需求来源的核心区别
在驱动MRP前,必须明确两者在系统内的本质差异,这决定了它们被处理的方式。
| 需求来源 | 需求类型 | 创建事务码 | MRP运算中的角色 | 典型业务场景 |
|---|---|---|---|---|
| 销售订单 (Sales Order) | 通常为独立需求 (当物料采用按订单生产策略时)或相关需求的触发源。 | VA01 | 确定性的具体客户需求。其需求数量、时间点明确,是必须履行的承诺。 | 按订单生产(MTO)、按订单装配(ATO)。 |
| 预测 (Forecast / Plan Independent Requirement - PIR) | 独立需求。 | MD61/MD62 | 基于历史数据或市场判断的预估需求。用于指导面向库存的生产或采购,为未来不确定的销售做准备。 | 按库存生产(MTS)。 |
关键概念澄清:
- 独立需求 (Independent Requirement):直接由销售市场决定,不依赖于其他物料的需求。销售订单(在MTO策略下)和预测都是独立需求的典型来源。
- 相关需求 (Dependent Requirement) :由上层物料的生产计划(计划订单或生产订单)通过BOM展开而计算得出的需求。销售订单本身不直接产生相关需求,但它可以触发一个计划订单,再由这个计划订单展开BOM产生相关需求。
二、 驱动MRP运算的核心机制与流程
销售订单和预测驱动MRP并非简单叠加,而是通过一套包含消耗、汇总、冲减、展开的严密逻辑。下图概括了核心流程:
步骤1:需求收集与类型判定
MRP运行时(事务码MD01/MD02),首先在计划区间内收集所有需求。
- 系统读取所有未完成的销售订单行项目。
- 读取所有未过期的计划独立需求(PIR,即预测)。
- 根据物料主数据中的计划策略,判定这些需求是作为"独立需求"直接参与运算,还是需要先进行"消耗"处理。
步骤2:预测消耗(关键耦合环节)
这是销售订单与预测互动并共同驱动MRP的核心。是否消耗、如何消耗,由物料的计划策略组中配置的"消费模式"决定。
-
场景A:消耗模式(如策略10 - 按库存生产)
abap" 物料主数据 MRP2视图关键字段 物料: FINISHED_GOOD_A MRP类型: PD 策略组: 10 "配置了向后消耗 消耗模式: 2 (向前向后) 消耗期间: 30天业务示例 :物料A在1月15日有100件的预测(PIR)。1月10日录入一张销售订单,需求80件,交货日期1月18日。
系统逻辑 :由于销售订单日期(1月10日)在预测日期(1月15日)的向后消耗期内,且需求匹配,因此80件的销售订单会"消耗"掉80件的预测。最终,参与MRP运算的有效独立需求只剩下20件(100 - 80)预测。这避免了重复计划。 -
场景B:不消耗模式(如策略20 - 按订单生产)
abap物料: SPECIAL_GOOD_B MRP类型: PD 策略组: 20 "配置为不消耗预测 需求类型: KSL (销售订单)业务示例 :物料B有50件预测。此时录入一张30件的销售订单。
系统逻辑 :由于策略配置为不消耗,销售订单和预测将作为两个独立的、并存的需求同时参与MRP运算。总毛需求为80件(50+30)。
步骤3:毛需求汇总与可用性核查
系统将步骤2处理后的所有有效需求(包括消耗后的净预测、未消耗的销售订单等)在每一个时间点上进行汇总,形成毛需求(Gross Requirements) 。
同时,系统核查同一时间点的可用库存(Available Stock),包括:
- 当前库存
- 已下达的采购订单
- 已创建的生产订单
- 固定的计划订单等。
步骤4:净需求计算
这是MRP运算的核心计算环节。系统根据以下公式计算每个时间段的净需求:
净需求 = 毛需求 - 可用库存 - 计划接收 + 安全库存
其中,"计划区分"参数起决定性作用:
-
计划区分=1(净需求计划):严格按上述公式计算。这是MTS物料的典型设置,目标是维持库存水平。
-
计划区分=2(毛需求计划) :忽略可用库存 ,净需求等于毛需求。这是MTO物料的典型设置,确保每个订单都有专用物料供应。
python# 净需求计算逻辑伪代码示例 def calculate_net_requirement(gross_req, available_stock, planning_indicator): if planning_indicator == 2: # 毛需求计划 return gross_req # 忽略库存 else: # 净需求计划 net_req = gross_req - available_stock return max(net_req, 0) # 净需求不为负
步骤5:计划订单生成与时间倒排
对于计算出的净需求,系统会生成计划订单(Planned Order) 来满足它。计划订单的数量由净需求决定,而其计划开始日期 则通过倒排计划(Backward Scheduling) 计算得出:
计划开始日期 = 需求日期 - 生产/采购提前期 - 工艺路线时间
这个过程确保了物料能在需要的时间点到位。
步骤6:BOM展开与相关需求传递(需求衍生)
如果生成的计划订单或已存在的生产订单对应的是一个可配置BOM的产成品或半成品,MRP会执行BOM展开。
-
系统根据BOM结构,逐层计算下层组件的需求数量和时间。
-
这些需求被标记为相关需求 ,并作为其对应物料的毛需求 ,触发下一轮的MRP计算(从步骤1开始)。这个过程由低阶码(Low-Level Code) 控制,确保从顶层到底层有序展开。
sql-- 简化的BOM展开逻辑示意 SELECT component_material, quantity_per_assembly FROM bom_table WHERE assembly_material = 'FINISHED_GOOD_A' AND plant = '1000'; -- 结果:组件C需要2个/台,组件D需要1个/台。 -- 若顶层计划订单需求100台,则产生:组件C相关需求200个,组件D相关需求100个。
步骤7:结果输出与执行
所有计算和展开完成后,结果在MD04(库存/需求清单)中可视化展示:
- 需求行:清晰列出每个销售订单和预测条目及其状态(是否被消耗)。
- 供应行:显示系统生成的计划订单、采购申请等。
- 例外消息:提示问题,如需求日期无法满足、需要提前采购等。
用户随后可以将计划订单转换为生产订单或采购申请,从而驱动实际的生产和采购活动。
三、 典型业务场景驱动流程对比
| 场景 | 计划策略 | 主要需求来源 | 驱动流程关键特点 | MRP结果示例(库存为0) |
|---|---|---|---|---|
| 按库存生产 (MTS) | 10, 40 | 预测为主,销售订单消耗预测 | 1. 创建预测PIR。 2. 销售订单录入,在消耗期内自动扣减PIR。 3. MRP对剩余PIR做净需求计算。 4. 生成补库的计划订单。 | 预测200件,销售订单消耗150件,净需求50件,生成50件计划订单。 |
| 按订单生产 (MTO) | 20, 50 | 销售订单 | 1. 销售订单直接创建独立需求。 2. MRP以销售订单需求为毛需求,执行毛需求计划(忽略库存)。 3. 生成带销售订单号标识的计划订单。 | 销售订单100件,直接生成100件计划订单。 |
| 按订单装配 (ATO) | 52, 82 | 销售订单 | 1. 销售订单触发产成品需求。 2. 系统立即或随后创建计划订单。 3. BOM展开,为下层标准组件生成相关需求。 4. 组件通常按库存(MTS)策略计划。 | 销售订单1台复杂设备,产成品生成1个计划订单,BOM展开为下层100种组件各产生相应相关需求。 |
总结下 :销售订单与预测驱动MRP运算是一个动态、受控的闭环过程。销售订单代表确定性的拉动力,预测代表预估的推动力。计划策略作为"交通规则",定义了二者是合并通行(消耗模式)还是分道行驶(不消耗模式)。MRP引擎则遵循规则,执行"收集需求→对冲库存→计算缺口→倒排计划→展开BOM"的标准流程,最终将市场的需求转化为内部可执行的供应建议。理解这一机制是进行准确的主数据配置和解读MRP结果的基础。