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

古哥计划
古哥计划

优秀创作者

在在昨天的文章中,我们已经完成了主生产计划(MPS)与物料清单(BOM)的联动展开,成功将每一项生产任务分解为对应的子件毛需求。这一过程清晰地回答了“要生产什么,就需要哪些物料、需要多少”的问题。

然而,毛需求仅是MRP运算的第一步。它并未考虑当前仓库中已有的库存情况,因此无法判断“哪些料已有、哪些料真正短缺”。在实际生产管理中,我们更关心的是——净需求:即在扣除现有库存后,仍需采购或生产的物料数量。

在今天的文章中,我们将正式进入净需求计算阶段,聚焦于第一级物料需求(暂不考虑替代料),结合“库存输出”表中的可用库存数据,进行库存扣减与欠料分析。

我们将解答以下关键问题:

哪些物料库存充足,可直接满足生产?

哪些物料存在缺口?缺多少?

如何自动生成清晰的欠料清单,为采购与计划提供决策依据?

通过本节内容,您将掌握如何从“毛需求”迈向“净需求”,构建一个具备实际指导意义的初级欠料分析系统。

排序子件

在正式计算净需求之前,我们需要对上一阶段生成的第一级毛需求数据进行结构化整理。核心目标是:将相同物料编码的子件集中排列,以便后续高效地与库存数据匹配,并进行统一的库存扣减处理。

为此,我们将通过排序操作,按“子件编码”对毛需求数据进行升序排列,使相同物料连续分布,提升可读性与计算效率。在A2录入动态数组公式:

=SORT(TRIMRANGE(第1级毛需求!A2:I30000),7)

公式说明:

第1级毛需求!A2:I30000:引用毛需求表中的原始数据区域(共9列);

TRIMRANGE:过滤掉空行或无效数据,确保仅处理有效记录;

SORT(..., 7):按第7列(即“子件编码”列)进行升序排序(默认顺序);

结果:返回一个结构完整、按物料编码有序排列的二维数组。

由于SORT 函数返回的是一个完整的二维数组区域,若直接在后续公式中引用特定列(如生产任务、排程数量等),容易因列位置变化导致错误。为提升公式的可维护性与灵活性,我们使用 INDEX 函数将排序后的结果逐列提取,形成独立的字段列。

在对应列中分别输入以下公式:

=INDEX(SORT(TRIMRANGE(第1级毛需求!A2:I30000),7),,1)

=INDEX(SORT(TRIMRANGE(第1级毛需求!A2:I30000),7),,2)

……

提示:只需修改 INDEX 函数的最后一个参数(列号),即可提取对应字段,操作简单、易于复制。

设计价值

数据有序化:按子件编码排序,为后续“按物料汇总需求”和“库存扣减”提供便利;

结构清晰:每列独立引用,避免数组嵌套混乱,提升可读性;

支持动态扩展:结合 TRIMRANGE 与动态数组,自动适应新增生产任务;

便于调试:可逐列检查数据是否正确对齐,降低出错风险。

引用库存

在完成毛需求数据的排序与结构化整理后,下一步是引入仓库的实际库存信息,为计算净需求提供数据支撑。为此,我们将在“第1级净需求”表中新增一列,命名为 “库存”,用于获取每个子件在仓库中的可用现存量。录入公式:

=XLOOKUP(G2#,库存输出!A2#,库存输出!B2#)

公式说明:

G2#:当前表中“子件编码”列的溢出数组;

库存输出!A2:A30000:库存输出表中的“编码”列(查找源);

库存输出!B2:B30000:对应的“汇总数量”列(返回值);

累计需求

在引入库存数据后,我们面临一个关键问题:同一子件可能出现在多个生产任务中,导致其在毛需求表中重复出现。例如,编码为A001 的物料可能在生产产品A和产品B时都被用到。

如果直接用单条记录的“子件需求”去扣减库存,会造成库存被多次独立扣减,而实际上,仓库中的库存是全局共享的。因此,在计算净需求之前,必须先对相同子件的毛需求进行累计求和,得到每个物料的总需求量。

为此,我们新增一列,命名为“累计需求”,使用 SCAN 函数实现按子件编码分组累加。:

=SCAN(0,G2#,LAMBDA(X,Y,LET(A,OFFSET(Y,,2),IF(Y=OFFSET(Y,-1,),X+A,A))))

公式说明:

G2#:当前“子件编码”列的溢出数组

SCAN(0, G2#, LAMBDA(X,Y,...)):从上到下遍历每一行,X 为累积值,Y 为当前子件编码

OFFSET(Y,,2):向右偏移2列,获取当前行的“子件需求”值(假设该列位于编码右侧第2列)

IF(Y = OFFSET(Y, -1,), ...) :判断当前行的子件编码是否与上一行相同

X + A:若相同,则将当前需求累加到前一个累计值上

A:若不同(即新物料首次出现),则重新开始,仅取当前需求值

设计意义

避免重复扣减:确保库存只被总需求扣减一次,而非每行都扣;

支持精准净需求计算:为后续“总需求 - 可用库存”提供准确依据;

提升分析效率:可在后续配合 UNIQUE 或条件判断,提取唯一子件的净需求汇总表。

注意事项

该公式依赖子件编码已排序(相同编码连续排列),否则累加逻辑会中断。请确保前序步骤中已使用SORT 按子件编码排序;

未完待续……

广东省
浏览 284
收藏
6
分享
6 +1
3
+1
全部评论 3
 
1231393578237
学习
· 四川省
回复
 
亂雲飛渡
亂雲飛渡

WPS寻令官

学习
· 广东省
回复
 
TITAN
学习
· 中国
回复