在在昨天的文章中,我们已完成净需求计算前的关键准备工作:
对毛需求数据按子件编码进行排序,确保相同物料连续排列;
通过XLOOKUP引用“库存输出”中的可用库存,实现需求与库存的关联;
并利用SCAN函数完成子件需求的累计求和,避免重复扣减问题。
这些前置步骤为净需求的精准计算打下了坚实的数据基础。
今天,我们将正式进入净需求的实际运算阶段——基于“总毛需求”与“可用库存”的对比,计算每个子件的净需求量,并进一步判断是否存在欠料情况。这不仅是MRP逻辑的核心环节,更是后续采购计划、补料建议和齐套分析的决策依据。
净需求计算
在完成子件排序、库存引用和累计需求汇总之后,我们已具备计算第1级净需求的全部数据条件。净需求的核心逻辑非常直观:
净需求=可用库存-子件累计总需求
该计算反映的是:在当前库存水平下,某一物料是否足够支持所有相关生产任务的消耗。其结果具有明确的业务含义:
正数:库存富余,满足需求后仍有结余;
0:库存刚好满足,无多余也不短缺;
负数:库存不足,存在欠料,需采购或调拨。
动态数组公式
在“第1级净需求”工作表中新增一列,命名为“净需求”,在对应单元格输入以下公式:
=J2#-I2#

公式说明:
J2#:引用的“库存”数量(来自“库存输出”表)
I2#:通过SCAN计算出的“累计需求”值
结果为每个子件对应的净库存余额,由于“累计需求”是逐行累加的,因此“净需求”的结果也呈现出动态累计过程。子件需求对应3行,100、200、300;虽然库存只有50,但总需求不断累加,导致净需求持续下降。最后一行的负值(-550)即为该物料的最终短缺量
单个净需求
在上一节中,我们通过库存-累计需求计算出了累计性净需求。虽然该结果能反映整体短缺趋势,但其值是逐行累加的(如-50、-250、-550),无法体现每一行原始需求所对应的独立欠料情况。
例如,当某子件有多个生产任务共用时,我们更希望知道:
“每一个生产任务单独来看,是否缺料?缺多少?”
为此,我们需要重新计算一个独立的、非累计的净需求;
在合适位置录入公式:
=LET(Y,H2#,L,I2#,K,J2#,J,K-L,A,IF(J>=0,0,J),IF(ABS(A)<Y,A,-Y))

公式解释:
H2#:当前行的“子件需求”(即该任务所需数量)
I2# :“累计需求”——从第一个相同子件开始到当前行的总需求
J2# :“库存”——从“库存输出”表引用的可用总量
K-L :当前累计净库存余额(可能为负)
A :实际累计欠料(取负值,富余时为0)
先判断到当前行为止,总需求是否已超过库存;
如果已超(J < 0),则产生累计欠料 A;
再判断:当前任务的需求量 Y 是否大于总欠料的绝对值?
是 → 表示该任务部分参与了短缺,欠料为 A(如总欠50,当前需求100,则欠50)
否 → 表示该任务全部未满足,欠料为 -Y(如需求30,但总欠50,则这30全缺)
最终结果呈现出每条任务的真实缺料量,而非累计过程。
应用价值
精准定位缺料任务:明确哪个生产任务缺了多少料;
支持任务级齐套分析:可用于判断“某订单是否可执行”;
为替代料匹配提供输入:后续可基于此字段触发替代逻辑;
便于生成可视化报表:可直接用于图表展示各任务缺料情况。
未完待续……
