简介这份PPT面向生产管理、库存控制与MRP入门学习者围绕物料需求计划的核心逻辑展开帮助理解传统库存管理在高库存与低服务水平之间的矛盾以及最终产品连续需求同相关物料块状需求的冲突。内容从主生产计划、物料清单和库存记录三项输入切入串联采购指令单与生产指令单的输出关系并讲解粗需求量、预计入库量、现有库存量、净需求量、计划订货量与计划投入量的计算口径BOM分层编码、物料需求倒推及电表案例也有涉及可用于课堂讲解或自学梳理。包内共1个PPT文件约458KB便于快速浏览和重点复习。目前已有676人学习适合希望用较短时间建立MRP整体框架、理清BOM与期量标准关系的读者。1. 物料需求计划为什么“不缺料”反而比“零库存”更难做到一家做电表的工厂最怕的不是订单少而是生产线停在那里等一颗螺丝。仓库里堆着三十万的成品库存车间却因为某个型号的塑料外壳没到货而停了三天这种事在制造业里并不稀奇。反直觉的地方在于库存总量很高服务水平却依然很低两者并不矛盾因为传统库存管理把每一种物料当成独立项目来管用经济订货批量独立补货最终产品的连续需求和相关物料的块状需求被混在一起算结果就是该来的没来、不该囤的囤了一堆。物料需求计划MRP要解决的正是这个错位它不预测零件而是从最终产品的主生产计划出发顺着产品结构一层层往下推把“生产什么、用到什么、已有什么、还缺什么、何时订货”这五个问题用一个公式串起来——生产什么 × 用到什么− 已有什么 还缺什么。搞懂这套推导顺序就搞懂了制造业信息系统的骨架。1.1 传统库存管理到底错在哪独立需求与相关需求的混淆要理解 MRP 的设计动机得先看清楚它替换掉的那套方法为什么失效。传统做法对原材料、零部件、毛坯、辅助工具乃至办公用品一律当作独立需求处理也就是假设每种物料的需求相互无关各自按历史消耗做预测、按 EOQ 订货。问题在于除最终产品之外的绝大多数物料其实是相关需求——它们的消耗量完全由上层产品的产量决定自己并没有独立的市场。把相关需求当独立需求管第一层代价是盲目性。举个原文里的例子某企业对某零件的需求在九个周期内呈现块状分布需求集中在前几个周期后续几个周期几乎为零。按 EOQ 算出的经济订货批量是 80 件于是系统每隔一段时间就补 80 件哪怕当期实际装配只需要 30 件多出来的 50 件就变成了躺在库房里的资金占用。更麻烦的是这种补货节奏和真正的装配节奏不同步需求高峰那几周可能反而缺料。第二层代价是低库存与高服务水平无法兼得。原文点得很直白传统方法使得低库存与高服务水平不能兼得最终产品的连续需求与相关物料的块状需求之间存在矛盾。成品面对的是市场需求相对平滑连续而零件面对的是装配节拍需求是一批一批的块状脉冲。用一套平滑的补货逻辑去应对脉冲式的消耗要么库存堆高保平安要么压低库存承担断料风险中间没有第三条路。提示判断一种物料该用哪种方法看它的需求来源。直接面向市场销售的是独立需求件用预测和 EOQ被上层产品消耗的是相关需求件用量由 BOM 展开决定不该独立预测。1.2 MRP 的两个基本原理和一个通用公式MRP 的基本原理只有两条但这两条决定了整个系统的计算方向。第一条从最终产品的主生产计划MPS推导出对相关物料的需求量和需求时间。第二条根据物料的需求时间和生产订货周期倒推出其开始生产订货的时间。第一条解决“要多少”第二条解决“什么时候动手”两者合起来才是完整的物料需求计划——只算量不算期等于把库存问题从“太多”换成“太晚”。这里的核心思路是倒推。传统补货是看到库存见底再补MRP 是知道第 12 周要交 100 台成品装配提前期 1 周就推出第 11 周必须开始装配外壳采购提前期 3 周就推出第 8 周必须下采购单。时间轴从右往左推这叫反工艺顺序。这条倒推链条之所以能成立前提是每种物料都有确定的提前期以及产品结构能被准确分解——这两个前提恰好对应 MRP 的两大输入BOM 和库存记录。通用公式写得再简洁些生产什么 × 用到什么− 已有什么 还缺什么。生产什么来自 MPS用到什么来自 BOM 的展开系数已有什么来自库存记录里的现货量、已分配量和预计入库量。三者相减得到的缺口再按提前期反推下单时点就是 MRP 的全部输出——采购指令单和生产指令单。1.3 一个具体算例100 台成品背后是六种物料的数量传递抽象讲完用原文那张产品结构图走一遍机制立刻变得具体。最终产品 A 为零层往下第一层是部件 B 和 CB 的用量是 2C 的用量是 3再往下D 同时出现在 B 和 C 的下层B 下用 1 个C 下也用 1 个U 在 B 下用 2 个V 在 C 下用 1 个W 在 C 下用 2 个。要生产 100 件 A各料项的需求量分别是B 为 2×100200C 为 3×100300D 为 1×2001×100300U 为 2×200400V 为 1×300300W 为 2×300600。注意 D 这一项——它是典型的共用件同时挂在 B 和 C 下面需求量必须把两条路径的贡献加起来而不是取其中一个。这就是 BOM 展开时最容易翻车的地方也是后面讲低层码时要专门处理的场景。再注意数量传递的方向从 0 层往 3 层逐层下推每一层的需求量由上一层计划投入量乘以 BOM 中的用量系数得到。这也解释了为什么 MRP 不允许跳层计算——上层还没算完下层的总需求量根本无从确定。原文强调的“信息处理从上至下n 层未处理完之前不能处理 n1 层”说的就是这条依赖链的强制性。1.4 三个输入与四类输出MRP 的逻辑闭环MRP 的信息系统有三个关键输入主生产计划MPS、物料清单BOM和库存记录。MPS 回答“生产什么”来源是潜在客户、预测和合同BOM 回答“用到什么”本质是一棵产品结构树库存记录回答“已有什么”里面装的是现货量、已分配量、即将入库量以及失窃、报损这类损耗调整。三个输入经 MRP 运算后产生四类输出采购计划、生产计划、建议的加工及采购计划以及对各种物料具体需求的措施提示信息。这些输出的形态是订单的发出时间和数量而不是一句“该补货了”。原文特意标注了一句措施提示信息不等于生产指令。这是设计上的一个分寸感——系统只负责算出缺口和时点是否真的下达由计划员结合产能、供应商状况判断。从系统视角看这个闭环还接了两条反馈线。设计侧的产品结构修改、物料用量增减、材料代用会直接改写 BOM 的展开系数销售侧的预测不准、品种变化、数量变化、交货期变化会改写 MPS。库存侧的现货量、已分配量、即将入库量以及失窃报损会改写可用量。三条线任何一条变动MRP 的运算结果都得重算一遍。生产厂长列举的那些烦恼产品信息不确定、主生产计划不确定、库存信息不确定本质上都是这三条反馈线的噪声。2. 物料清单为什么它是一棵必须分层编码的树BOM 在很多人印象里只是一张“产品由哪些零件组成”的清单但在 MRP 里它是数据结构而且是带层级语义的数据结构。它的编制步骤有三条硬规则把最终产品分解后对全部料项分层编码以最终产品为零层与其有直接母子关系的料项为 1 层依次类推同一料项按其在各个 BOM 中的最低层次编码。最后这条是关键也是大多数人第一次接触时会觉得别扭的地方。2.1 分层编码与低层码共用件为什么必须挂到最深的层分层的动机很直接MRP 要逐层展开数量就必须知道每个料项在第几层被处理。零层是最终产品1 层是直接装进成品的部件2 层是装进 1 层部件的零件依此类推。这个顺序决定了计算的先后依赖——下层的总需求量依赖上层已算出的计划投入量所以层号就是计算顺序。麻烦出在共用件上。以前面那个算例为例D 同时出现在 B1 层和 C1 层的下层也就是在两条路径上都位于 2 层。如果只在第一次遇到 D 时处理它那么来自 C 的那部分需求就会被漏算。原文给出的规则是“同一料项按其在各个 BOM 中的最低层次编码”即 D 要被登记为 2 层两条路径中最低的那一层并且必须在所有可能引用它的上层物料都处理完毕之后才轮到 D 计算。这条规则在工程实现里通常体现为一个低层码low-level code字段。每个料项存一个整数表示它在所有产品结构中能被引用到的最深层次。展开计算时按低层码升序处理同一低层码的料项可以并行算因为它们的总需求量都只依赖更低层号物料的计划投入量。这个字段的维护成本不低——新增一个产品结构或改动一处用量都可能让某个共用件的低层码发生变化随之整张表的计算顺序也变。我一般会这么理解低层码不是给机器看的索引而是给“时间上必须是这个顺序”的依赖关系做的一次静态编译。2.2 展开计算从 100 台成品到各层需求量的传递过程展开计算的核心是一个自顶向下的循环。零层先算最终产品的计划投入量乘以 BOM 中 1 层料项的用量系数得到 1 层料项的总需求量1 层料项结合自身的库存记录算出净需求量和计划订货量再按提前期反推出计划投入量乘以 2 层用量系数得到 2 层料项的总需求量如此逐层向下。用原文的算例可以把这个传递过程写清楚A 的计划投入量 100B 的用量系数 2得 B 的总需求量 200C 的用量系数 3得 C 的总需求量 300。进入 2 层D 从 B 这条路得到 1×200200从 C 这条路得到 1×100…… 这里要注意不是 1×300因为 C 的总需求量 300 是总需求而传递给 D 的应当是 C 的计划投入量只有在 C 的库存足以覆盖部分需求时计划投入量会小于总需求量。原文算例中直接用了 1×100隐含的假设是 C 的计划投入量为 100差额由库存消化。这个细节在纸面算例里容易被忽略但在实际系统里是硬性约束数量传递的源头永远是上一层的计划投入量不是总需求量。这条链还有个方向性约束n 层未处理完之前不能处理 n1 层。原因是同一层的多个料项可能共同指向同一个下层料项必须等这一层所有料项的计划投入量都确定之后才能汇总出下层的总需求量。原文举的例子是 D 需要把两条路径的贡献相加说的正是这个汇总动作必须在层内做全。2.3 方桌案例从销到产到供的集成数据模型原文给了一个方桌的例子用来展示 BOM 不只是物料清单而是一个集成销、产、供业务信息的数据结构模型。10000 套方桌对应 10000 件桌面、10000 件面框、1.0 个单位的油漆、10000 平方米板材、4.0 个单位的螺钉、40000 件方木、8000 立方米的方木…… 每一项都带一个用量系数有的是整数有的是小数油漆 1.0、板材 1.0、方木 0.2。这个模型的集成性体现在三个方向。往销售端看方桌的订单量是 BOM 展开的起点订单变化直接改变所有下层的需求量往生产端看BOM 里的用量系数决定了每个工序要加工多少件往供应端看展开出来的净需求量决定了采购部门要买多少板材、多少油漆。同一份 BOM 同时服务于三个部门这是它被称为“集成销、产、供业务信息的数据结构模型”的原因。小数系数的存在还引出一个工程细节用量系数不一定是整数油漆按配比算、板材按面积算、方木按体积算单位都不统一。系统里每个料项都必须绑定计量单位换算关系错一处展开出来的需求量就会离谱。这也是实务中 BOM 数据治理最耗时的部分——不是结构复杂而是基础数据脏。2.4 时间坐标上的产品结构MRP 就是简化的网络计划原文有一张“时间坐标上的产品结构”图横轴是交货日期纵轴是时间刻度 5、10、15、20、25产品结构被画在时间轴上各层物料的提前期表现为斜向的箭头。这张图想说明的是MRP 本质上是简化的网络计划期量标准在这里被重新定义。传统网络计划方法关注工序之间的先后关系和关键路线MRP 把同样的思想压缩到物料维度——每种物料的计划投入量对应一个时间点物料之间的供需关系对应一条带提前期的依赖边。优优先级计划的含义也在这里体现越靠近交货期的物料其投入时点越靠后、时间余量越少属于关键路线上的节点提前期宽裕的物料可以缓一缓。原文把工艺路线、工序、关键路线这些概念和 BOM 放在一起讲就是在提示这层对应关系产品结构是静态的物料依赖时间坐标给它加上了期量两者合起来才是可执行的计划。3. MRP 的计算项目六个字段如何凑出“还缺什么”MRP 的计算听上去复杂拆开看其实就是每层每个料项、每个时间周期上重复六件事算总需求量、看预计入库、查现有库存、求净需求、定计划订货量、反推计划投入量。这六个字段构成一个周期内的完整状态转移理解它们的先后依赖比背公式有用得多。3.1 粗需求量 Gj(t)上层计划投入量与独立需求的叠加粗需求量也叫总需要量公式是 Gj(t) 非独立需求量 独立需求量 上层物料计划投入量 × 物料清单中每个组装件的用量 独立需求量。这个公式把两类需求合并在同一个字段里是 MRP 设计上一个很实用的取舍。非独立需求部分是相关需求由 BOM 展开得到来源是上层物料的计划投入量乘以用量系数这一点在上一章已经展开。独立需求部分则来自备件销售、售后服务、试验消耗这类直接面向市场的用量它不挂在上层产品下面必须人工录入或由预测系统提供。把两者加在同一个粗需求量里好处是后续的净需求计算只需要面对一个数不用区分需求来源代价是独立需求部分无法参与 BOM 的一致性校验数据录入错了系统发现不了。工程上这里有个常见做法把独立需求单独存一张表按料项和周期索引展开计算时再合并进粗需求量。这样既能保持公式的形态又能在排错时把两类需求分开看。哪个周期的粗需求量异常先查是展开系数错了还是独立需求录错了路径清晰。3.2 净需求量 Nj(t)库存、在途与缺口的三角关系净需求量是整个 MRP 里最核心的一个字段因为它直接决定要不要下单。公式是 Nj(t) Gj(t) − Hj(t−1) − Sj(t)计算结果为负数时取零表示库存有余不需要订货。三个参数各有讲究。Gj(t) 是本期的粗需求量。Hj(t−1) 是上期期末的现有库存量注意下标是 t−1 而不是 t因为本期期初的库存等于上期期末结转过来的量这个时序细节错一位整条库存链就断了。Sj(t) 是预计入库量指已经投产或已经订购、预计可在计划周期 t 内到货入库的物料数量——它是在途量不是现有量把它减掉才能避免重复下单。三者相减的语义是本期要用多少减去手头已有的再减去马上会到的剩下的缺口才需要新下订单。这个顺序不能颠倒因为库存和在途的可靠性不同——库存在手在途还有不到货的风险。取零的处理也很关键负数取零而不是保留负值是为了防止“负需求”向下层传递否则上层库存富余会凭空抵消下层缺口。注意Hj(t−1) 用的是上期期末库存不是本期期末。若在实现中误用本期库存会形成循环依赖——本期净需求影响本期订货本期订货又影响本期库存。3.3 计划订货量与计划投入量批量规则与提前期的两次转换净需求量算出来只是“缺多少”还不是“订多少”。计划订货量 Pj(t) 是按批量规则把净需求量调整成生产批量或采购批量后的结果。批量规则有很多种最朴素的是直接按净需求下单批量对批量也有按固定批量、按经济批量、按周期合并等方式。原文提到“按批量规则将净需要量调整为生产批量或采购批量就是计划订货量”没有指定具体规则因为规则本身是可配置的策略不属于 MRP 的机制内核。真正体现机制的是下一步计划投入量 Rj(t′) Pj(t−L)其中 L 是物料的生产提前期或采购提前期。这一步把时间从“交货时点”反推到“动手时点”是 MRP 区别于普通库存补货的标志性动作。提前期 L 的准确性直接决定这份计划可不可执行——L 估短了订单一到就发现来不及L 估长了物料提前进厂变成库存。这两个字段的关系值得强调计划订货量管“量”计划投入量管“期”两者通过提前期这一个参数耦合。也正因为只有一个参数耦合提前期一旦失真整条倒推链上所有相关物料的时点都会偏而量却看起来是对的。这是 MRP 实施里最隐蔽的坑之一。3.4 时间周期 t 的推进从 n 层到 n1 层、从 t 到 t1 的双重循环原文的逻辑流程图里有两个嵌套的循环判断所有时间周期 t 算完没有所有产品结构层次已分解没有。外层是层次 n 从 0 往深走内层是周期 t 从前往后推两个循环的推进顺序有严格约束。内层周期循环先走完是因为同一个料项在不同周期的库存是连续结转的——本期期末库存等于下期期初库存净需求量、计划订货量、可用库存量在时间轴上前后的计算互相依赖。跳过某个周期后面的库存结转就失去基准。外层层次循环后走是因为下层的粗需求量依赖上层的计划投入量层次不推进到底下层的总需求就凑不齐。流程图里还有一个“计算 n 层 t 周期物料 j 可用库存量 Hj(t)”的环节位置在净需求与订货量之后。这个字段是本期算完之后的余额等于期初库存加预计入库加计划订货量减粗需求量它会被下一个周期当作 Hj(t) 使用。整条链就是靠这个余额在时间上串起来的任何一期算错错误会顺着时间轴一直传下去这也是 MRP 重算必须全量跑、不能只补算局部的原因。4. 避坑与排查MRP 跑出来的计划为什么不像人话4.1 现象计划里同一物料在不同周期反复下单量还很小原因通常出在批量规则和时间周期粒度的配合上。如果批量规则选的是批量对批量而时间周期又切得很细那么每个周期只要有一点净需求就会生成一张订单结果就是订单碎片化。另一种可能是库存结转算错了某期可用库存被算成负数或异常小导致后续每期都在补缺口。排查顺序建议这样走先看该料项的粗需求量在各周期的分布确认是不是需求本身就碎再看 Hj(t) 在周期之间的结转是否连续本期期初是否等于上期期末最后检查批量规则有没有被误配成批量对批量。如果是共用件还要回头看低层码有没有维护正确低层码错了会导致某些周期的需求被重复计入。4.2 现象某个共用件的需求量明显偏大像是被算了两遍这是 BOM 展开里最经典的翻车场景。共用件挂在多条路径下如果系统在第一次遇到它时就把它算完后面那条路径的贡献就会在另一个周期被重复加一次导致总量偏大。原因在于没有严格按低层码汇总。正确的做法是同一低层码的所有料项全部处理完毕、把所有上层路径的贡献累加完毕之后才开始计算该料项的净需求和订货量。解决方式是检查低层码字段的维护逻辑确认新增产品结构或修改用量系数后有没有触发重算同时在展开循环里加一道断言同一料项在同一周期内只能被汇总一次。4.3 现象计划显示某物料本周必须下单但供应商根本来不及这不是计算错误而是提前期参数与现实的偏差。MRP 的倒推完全信任输入的 L 值L 填的是理论采购周期实际供应商的排产、物流、检验都要时间两者对不上计划就会“算得对、做不了”。排查时把该料项最近几个周期的计划投入量和实际到货日期拉出来对比看偏差是系统性偏短还是偶发。系统性偏短说明 L 需要整体上调并固化到物料主数据偶发偏差则要考虑在提前期里加安全时间或者调整批量规则把下单时点提前。原文强调措施提示信息不等于生产指令留的就是这个人工校准的口子。4.4 现象改了 BOM 用量系数重跑之后下游计划纹丝不动多半是数据没有真正落到展开计算读取的那张表上或者缓存没有失效。BOM 修改涉及产品结构修改、物料用量增减、材料代用三种类型其中材料代用最容易被漏掉——代用关系往往存在另一张关联表里展开时如果只读主 BOM代用料的用量就不会被计入。解决路径是先确认修改落在哪张表、展开程序读的是不是同一张再检查低层码是否因结构变化而需要重算最后确认 MRP 是增量跑还是全量跑增量跑在没有正确标记脏数据的情况下会沿用旧结果。这类问题的血泪经验是BOM 变更后不要相信增量结果全量重算一遍再对比。4.5 现象库存明明有货净需求量却还是正的先分清“现有库存量”和“可用量”的区别。库存记录里有现货量、已分配量、即将入库量还有失窃报损这类调整。如果已分配量没有从现货量里扣掉可用量就会被高估反过来如果预计入库量被重复计入实际缺口会被掩盖。另一个常见原因是 Hj(t−1) 的下标取错用了本期库存去算本期净需求形成自指。排查时把该料项该周期的四个数——粗需求、期初库存、预计入库、净需求——单独列出来手工验算一遍公式对不上就是实现里的时序或字段取错了。5. 从倒推到重排MRP 的边界与它的下一代MRP 的能力边界其实在它的两个基本原理里就写清楚了。它假设提前期是已知且固定的所以能倒推它假设产能无限所以敢按需展开。这两个假设让 MRP 的计算变得干净、可复现也让它在真实车间里经常撞墙——倒推出来的开工时点集中在同一周车间根本排不开固定提前期遇上换型、缺人、设备故障时点立刻失真。这不是实现缺陷而是设计上的自觉取舍MRP 先把“物料该在什么时候到位”算清楚把“能不能做到”留给下一层。这也解释了原文为什么反复强调措施提示信息不等于生产指令。系统输出的是建议计划员要拿着这份建议去和产能、供应商、资金对账。MRP 的定位是物料维度的推演器不是车间的调度器。想让它更贴近现实业界的做法是往上叠能力把粗能力计划挂在 MPS 上做平衡把车间级排产挂在计划订单上做有限产能排程前者回答“主生产计划现不现实”后者回答“这批订单按什么顺序上机”。再往后走就是 MRP II 把财务、采购、销售并进来以及 ERP 把这些模块统一到一个数据库里。但无论往上叠多少层底下的那套推演逻辑没变从 MPS 出发按 BOM 展开扣库存算净需求按提前期反推时点。这套逻辑之所以能活到今天是因为它把一个组合爆炸的问题压成了可计算的树形展开——每一层只依赖上一层每一个周期只依赖上一个周期局部算对整体就对。代价是它必须假设下层不受上层之外的干扰一旦共用件、替代料、联副产品这些交叉关系变多低层码和展开顺序的维护成本就直线上升。我自己的习惯是每次拿到一份 MRP 跑出来的计划先不看总量先随机抽三个料项把它们的六个字段手工走一遍粗需求从哪来、期初库存对不对、在途量有没有重复、净需求取零的边界有没有踩到、批量规则是什么、提前期填的是多少。走通三个基本能判断这份计划的参数底座是干净的还是带病的。这个习惯是被一次共用件重复计算的事故逼出来的——当时整条产线的计划全线偏移了两周查到最后只是一个低层码字段没跟着产品结构改。从那以后我每次改动 BOM 结构或用量系数都会强制走一遍低层码校验和全量重算对比再去看计划。希望帮到你。这份资料把 MRP 的输入、BOM 分层、六个计算字段和逻辑处理流程拆得很细从 100 台成品展开到各层需求量的算例、方桌的集成数据模型都在里面适合拿来对照自己手上的系统逐项核对。需要完整内容的话可以在资源页查看并下载。本文还有配套的精品资源点击获取