在昨天的文章中,我们已成功完成第一级净需求的全面计算,不仅实现了按子件汇总的累计净需求分析,还通过精细化公式还原了每一条生产任务对应的单个净需求,准确识别出各环节的具体欠料数量(以负数形式呈现)。

至此,系统已能清晰回答:“哪些物料缺、缺多少、对应哪个生产任务”。然而,现实生产中常面临一种典型场景:某主料虽已欠料,但仓库中存在其对应的替代料(如“可替代料1”),且可直接用于生产。若不考虑这一层逻辑,将导致误判为“缺料停线”,造成不必要的采购或延误。

因此,在今天的内容中,我们将正式进入第二级子件(可替代料1)的净需求计算。

判断逻辑

针对第一级中已出现欠料的子件,系统将首先查询其是否登记有“可替代料1”。若存在替代料,则引用该替代料的可用库存,用于冲抵主料的欠料数量,冲抵后的剩余缺口才作为最终缺料纳入后续处理;若无替代料或替代料库存不足,则直接沿用第一级的原始欠料结果,进入预警或采购流程。

这一机制的引入,标志着我们的MRP系统从“静态需求计算”迈向“智能替代响应”的关键一步。接下来,我们将逐步构建替代料匹配引擎,实现“主料缺→查替代→扣库存→算余缺”的完整闭环逻辑,提升物料齐套分析的准确性与生产计划的柔性应对能力。

告别手工算料:动态数组打造智能BOM替代分析-9

第1级净需求库存

为了避免在多级需求展开过程中出现库存重复扣减的问题,我们需要为后续层级的净需求计算建立一个统一的库存引用基准。为此,需返回到“库存输入”工作表,新增一列,命名为“第1级净需求库存”。

该列的作用是:记录在完成第一级子件需求扣减后,各物料的剩余可用库存状态,作为第二级(如可替代料1)判断的起始库存依据,确保库存扣减具有顺序性和继承性。:

=IFNA(IF(XLOOKUP(A2#,第1级净需求!F2#,第1级净需求!K2#,,,-1)<0,0),B2#)

告别手工算料:动态数组打造智能BOM替代分析-9

公式说明:

A2# :“库存输入”表中的物料编码列

第1级净需求!F2# 净需求表中的“子件编码”列(用于查找)

第1级净需求!K2# 对应的“累计净需求”结果列(负值表示短缺)

XLOOKUP(…,-1):从后往前查找,确保获取该编码最后一行的累计净需求值,即最终库存余缺状态

IF(…<0,0):若最终净需求为负(表示已耗尽甚至超支),则返回0——即主料已无可用库存

IFNA(…,B2#):若未找到匹配项(即该物料未参与第一级需求),则保留原始库存数量B2#(库存数量);

是否有替代

在完成第一级净需求计算并更新库存状态后,我们进入替代料分析的关键步骤——判断哪些欠料的子件存在可替代料,并将其引入后续的补缺逻辑。

为此,我们回到 “第1级净需求” 工作表,新增一列,命名为 “替代料1”,用于查询并返回每个子件对应的第一级替代料编码(即“可替代料1”)。在对应单元格(如 M2)输入以下公式:

=VLOOKUP(B2#&”-“&E2#,PIVOTBY(BOM输出!F2#,BOM输出!E2#,BOM输出!C2#,T),3,0)

告别手工算料:动态数组打造智能BOM替代分析-9

公式说明:

该公式通过 PIVOTBY + VLOOKUP 的组合,实现从BOM结构中提取“子件 → 替代料”的映射关系。

B2# & “-” & E2# 构造查找键:将“产品编码”与“子件顺序”拼接为 “A-1” 形式,对应BOM中的唯一行标识

PIVOTBY(BOM输出!F2#, BOM输出!E2#, BOM输出!C2#, T) 动态生成一个二维透视表:

行组:F2# —— “父件&子件顺序号”(如 A-1, A-2)

列组:E2# —— “替代料等级”(如 0=主料,1=替代料1)

聚合值:C2# —— “子件编码”

函数:T —— 返回文本值(避免数值干扰)

→ 最终生成一个结构化的替代料矩阵 | | VLOOKUP(…, 3, 0) | 在生成的透视表中精确查找拼接键,并返回第3列(即“替代料1”字段),0 表示精确匹配 |

相关新闻

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

立即咨询 企业版试用 上门服务

请您留言

感谢您的关注,你可留下联系方式,我们将第一时间与您联系。