一键追欠料!WPS表格实战MRP欠料计算-5
优秀创作者
昨天第4章内容主要围绕MPS主生产计划展开,着重对主生产计划的自动排程进行动态数组公式化处理,并实现了快速换线、快速排程、快速定位预计开工与完工日期的功能。
今日第5章则聚焦于主生产计划MPS一维排程转换以及转换后如何根据此计划进行快速分解MRP。
一维排程
二维自动排程是公式全自动生成的,可以非常清晰的看到每张订单的进度,以及预计开工日期与预计完工日期。但是需要者MRP物料需求运算的情况下,这样的表格结构并不适合,需要把此表格转换成一维表格。转换的过程中我们用的核心函数为TOCOL,通过IF函数判断排程区间是否大于来来返回对应的数据。
线体:=LET(A,MPS输出!I2#,B,MPS输出!A2#,TOCOL(IF(A>0,B,\),3))
任务:=LET(A,MPS输出!I2#,B,MPS输出!B2#,TOCOL(IF(A>0,B,\),3))
编码:=LET(A,MPS输出!I2#,B,MPS输出!C2#,TOCOL(IF(A>0,B,\),3))
数量:=LET(A,MPS输出!I2#,B,MPS输出!A2#,TOCOL(IF(A>0,A,\),3))
日期:=LET(A,MPS输出!I2#,B,MPS输出!I1#,TOCOL(IF(A>0,B,\),3))
物料需求
一维排程转换完成后,接下来就是物料需求运算,原来的方案是用堆叠函数,运算效率低下,这次采用查找引用加辅助列的方案。先在一维排程中加两列辅助列,一列为序号,一列为子件数,分别录入动态数组公式:
序号=SEQUENCE(ROWS(B2#))
子件数:=XLOOKUP(D2#,SKU数输出!B2#,SKU数输出!C2#)
分解需求
新建一张工作表,并命名为MPS分解,MPS一维中的第1列序号就是维一值,序号的最大值代表排程的总生产任务数量,每行对应的子件数代表需要重复的行数。所以可以先重复序号对应的子件数,然后再用这序号查找引用对应的生产任务与编码、排程数量、排程日期等信息。
子件数量可以用子件序号加产品编码的方式进行双条件查找引用来判断。
重复序号:=LET(X,MPS一维输出!A2#,Y,MPS一维输出!G2#,TOCOL(IF(SEQUENCE(,MAX(Y))<=Y,X,A),3))
查找引用:
线体:=XLOOKUP(C2#,MPS一维输出!C2#,MPS一维输出!B2#)
任务:=XLOOKUP(A2#,MPS一维输出!A2#,MPS一维输出!C2#)
编码:=XLOOKUP(A2#,MPS一维输出!A2#,MPS一维输出!D2#)
数量:=XLOOKUP(A2#,MPS一维输出!A2#,MPS一维输出!E2#)
日期:=XLOOKUP(C2#,MPS一维输出!C2#,MPS一维输出!F2#)
子件序号,这个序号就是查找引用的辅助列,通过判断序号的重复数来快速生成一组数据,如1、2、3、……这样的连续数字号。
子件序号:=SCAN(0,A2#,LAMBDA(X,Y,IF(Y<>OFFSET(Y,-1,),1,X+1)))
子件编码就是通过查找引用的方式实现,核心就是双条件引用,过程中用文本连接符号“&”进行快速拼接
子件代码:=XLOOKUP(D2#&G2#,BOM输出!A2#&BOM输出!E2#,BOM输出!B2#)
用量,也就是需求量:=XLOOKUP(D2#&G2#,BOM输出!A2#&BOM输出!E2#,BOM输出!C2#)*E2#
双条件查找并乘以对应的排程数量,得到分解后所有的子件明细
、通过以上的动态数组公式,我们实现了排程快速分解的功能,明天将依据此数据,进行欠料运算。
未完待续……