2. MRP运算逻辑:BOM展开、净需求计算、提前期偏移、批量规则

MRP(Material Requirements Planning)的核心运算逻辑围绕四个关键环节展开:BOM展开将产品结构逐层分解为物料需求;净需求计算扣除现有库存与在途量,得出真正需要下达的订单量;提前期偏移将需求时间倒推至订单下达时间;批量规则则决定每次采购或生产的订单数量。这四个环节环环相扣,构成了MRP运算的主干流程。

2.1 BOM展开:从产品结构到物料需求

BOM(Bill of Materials,物料清单)是MRP运算的起点。BOM展开的本质是递归遍历产品结构树,将顶层独立需求逐层分解为底层物料的相关需求。

关键概念:BOM展开的深度取决于产品层级数。每展开一层,系统需要根据父项的需求量乘以子项的单位用量,并累加所有父项对同一子项的需求。

以下是一个典型的多层级BOM展开示例(产品A由2个B和1个C组成,B又由3个D和2个E组成):

层级 父项物料 子项物料 单位用量 展开逻辑
0 A(成品) — — 独立需求100件
1 A B 2 100 × 2 = 200件
1 A C 1 100 × 1 = 100件
2 B D 3 200 × 3 = 600件
2 B E 2 200 × 2 = 400件

BOM展开的性能瓶颈通常出现在多父项共享子项的场景。例如,物料D同时被B和C使用,系统需要先汇总所有父项对D的需求,再进行净需求计算。如果BOM深度超过10层且物料数量超过10万条,展开过程的递归调用次数会呈指数级增长。

BOM展开结构示意图 A(成品) B(×2) C(×1) D(×3) E(×2) F(×4) 说明:BOM展开按层级自上而下进行,每层用量累乘。物料D同时被B和C使用,需先汇总再计算净需求。 展开深度 = 3层,物料节点数 = 6个,递归展开次数 = 父项数 × 子项数。

2.2 净需求计算:扣除库存与在途量

净需求计算是MRP运算中最核心的数学逻辑。其基本公式为:

净需求 = 毛需求 - 现有库存 - 在途订单 + 安全库存

其中:

  • 毛需求:BOM展开后汇总的物料总需求量
  • 现有库存:当前仓库中可用的实物库存量
  • 在途订单:已下达但尚未到货的采购单或生产单数量
  • 安全库存:为应对需求波动而设置的缓冲库存量(增加净需求)
性能优化要点:净需求计算需要逐物料、逐时段进行。当物料数量超过10万且时段粒度细化到天时,计算量可达百万级。建议在内存中预先加载库存快照和在途订单数据,避免每次计算都查询数据库。

以下是一个净需求计算的实际案例(物料D,时段为周):

时段(周) 毛需求 现有库存 在途订单 安全库存 净需求 计算过程
第1周 200 150 100 20 0 200 - 150 - 100 + 20 = -30(负值取0)
第2周 300 50(上期结余) 0 20 270 300 - 50 - 0 + 20 = 270
第3周 250 0 200 20 70 250 - 0 - 200 + 20 = 70

净需求计算中有一个容易被忽视的细节:库存结余传递。当某时段净需求为0时,剩余的库存会结转到下一时段继续使用。这种“滚动库存”逻辑要求系统按时间顺序依次处理每个时段,不能并行计算。

2.3 提前期偏移:将需求时间倒推至订单下达时间

提前期偏移(Lead Time Offsetting)解决的是“什么时候下单”的问题。其核心逻辑是:订单下达时间 = 需求满足时间 - 提前期。

提前期偏移的三种常见场景:

  • 采购提前期:从下采购单到物料入库的时间,包括供应商生产、运输、质检等环节
  • 生产提前期:从下生产单到成品入库的时间,包括排队、准备、加工、检验等环节
  • 运输提前期:物料从仓库到产线或从供应商到仓库的运输时间
常见陷阱:提前期偏移容易忽略“工作日历”。如果系统按自然日计算偏移,而工厂实际只有工作日生产,会导致订单下达时间偏差。建议在偏移计算中引入工作日历函数,将自然日转换为工作日。

提前期偏移的计算示例(物料D,提前期为5天):

需求满足时间:第10周周一(第64天)
提前期:5个工作日
订单下达时间 = 第64天 - 5个工作日 = 第57天(第9周周三)

注意:如果第57天是周末或节假日,需要继续向前偏移至最近的工作日。

在MRP系统中,提前期偏移通常与时段划分配合使用。如果系统按周划分时段,偏移后的订单下达时间可能落在上一周,从而改变该周的净需求分布。

提前期偏移时间轴 第8周 第9周 第10周 第11周 第12周 订单下达 物料到货 需求满足 提前期(5天) 等待时间 说明:提前期偏移将需求满足时间减去提前期,得到订单下达时间。偏移过程中需考虑工作日历, 跳过周末和节假日。偏移后的订单下达时间可能落在不同的时段,影响该时段的净需求分布。

2.4 批量规则:确定订单数量

批量规则(Lot Sizing Rules)决定了每次采购或生产订单的数量。不同的批量规则对库存水平和订单频次有显著影响。常见的批量规则包括:

批量规则 描述 适用场景 库存影响
按需批量(Lot-for-Lot) 净需求是多少就下多少订单 高价值、低用量物料 库存最低
固定批量(Fixed Quantity) 每次订单数量固定,如100件 有最小起订量或包装约束的物料 库存较高
固定周期(Fixed Period) 汇总固定周期内的净需求,一次性下单 需求稳定、低价值物料 库存中等
经济批量(EOQ) 基于订货成本和持有成本计算最优批量 需求连续、成本数据完善的物料 理论最优
最小-最大批量(Min-Max) 库存低于最小值时补货至最大值 备件、辅料等非关键物料 库存可控
性能优化提示:批量规则的计算在MRP运算中属于“后处理”阶段。建议将批量规则的计算与净需求计算分离,先完成所有物料的净需求计算,再统一应用批量规则。这样可以避免在净需求计算过程中频繁切换批量规则上下文,提升CPU缓存命中率。

批量规则的应用示例(物料D,净需求分布如下):

时段(周)  净需求
第1周       0
第2周       270
第3周       70
第4周       0
第5周       150

按需批量:第2周下270件,第3周下70件,第5周下150件(共3次订单)
固定批量(200件):第2周下200件(剩余70件结转到第3周),第3周下200件(覆盖第3周70件和第5周150件,剩余80件库存)
固定周期(2周):第2周下340件(第2周270件+第3周70件),第5周下150件(共2次订单)

批量规则的选择直接影响MRP运算结果的可执行性。如果批量规则设置不当,可能导致频繁的小批量订单(增加采购成本)或大批量库存积压(增加持有成本)。在实际应用中,建议对不同类别的物料采用差异化的批量规则:

  • A类物料(高价值):按需批量,减少库存占用
  • B类物料(中等价值):固定周期或经济批量,平衡成本
  • C类物料(低价值):固定批量或最小-最大批量,减少管理频次

2.5 四环节协同运算流程

BOM展开、净需求计算、提前期偏移、批量规则四个环节并非独立运行,而是形成一个完整的运算闭环:

  1. 输入阶段:接收MPS(主生产计划)的独立需求
  2. BOM展开阶段:逐层分解,生成所有物料的毛需求
  3. 净需求计算阶段:扣除库存和在途量,生成净需求
  4. 提前期偏移阶段:将净需求时间倒推至订单下达时间
  5. 批量规则阶段:应用批量规则,生成最终的计划订单
  6. 输出阶段:生成采购建议和生产建议
性能优化关键点:在四环节协同运算中,BOM展开和净需求计算占用了约80%的CPU时间。建议对BOM展开采用“广度优先”策略,先展开同一层级的所有物料,再进入下一层,减少递归深度。净需求计算则建议使用“批量预加载”方式,一次性加载所有物料的库存和在途数据到内存中。

以下是一个完整的MRP运算示例,展示四环节如何协同工作:

步骤 物料 操作 结果
1 A MPS输入:第10周需求100件 独立需求100件
2 B BOM展开:100 × 2 = 200件 毛需求200件
3 B 净需求计算:200 - 50(库存)- 30(在途)= 120件 净需求120件
4 B 提前期偏移:第10周 - 2周提前期 = 第8周 订单下达时间第8周
5 B 批量规则:固定批量100件,120件拆为2批 第8周下100件,第9周下100件

通过以上四个环节的协同运算,MRP系统能够将顶层的主生产计划转化为底层物料的采购和生产计划,实现制造物料的高效协同。在实际性能调优中,需要重点关注BOM展开的递归效率、净需求计算的批量处理能力、提前期偏移的工作日历适配以及批量规则的灵活配置。