摘要:昨天已经设计了工艺路线的二维动态数组转换,这个转换的目的是把标题列变成类似的数据库的字段模式,也就是有符号 “#”的标识。同时我们也增加了统计加工工序总数、和工艺路线(合并单元格)的分析。也把函数的逻辑更新为更加智能的判断,增加了MTACH定位的写法;
昨天已经设计了工艺路线的二维动态数组转换,这个转换的目的是把标题列变成类似的数据库的字段模式,也就是有符号 “#”的标识。同时我们也增加了统计加工工序总数、和工艺路线(合并单元格)的分析。也把函数的逻辑更新为更加智能的判断,增加了MTACH定位的写法;
今天我们就直接来到MPS分解这一个部分的设计了。
多工序分解的来源就是MPS主生产计划,这个计划先录入后,然后根据这个计划进行快速分解,原来的MPS计划输入与输出分开是直接用的裁剪函数直接裁剪。当有工作表输入有列增加的时候,输出这里就会出现引用错位,升级更改输出如下:
=INDEX(TRIMRANGE(MPS.输入!$A$2:$ZZ$10000),,MATCH(A1,MPS.输入!$A$1:$ZZ$1,0))
把这个公式向右填充到合并位置,通过判断标题行来进行动态引用字段;
在这张MPS输出的表上把核心分解的加工工序总数引用过来,录入动态数组公式:
=XLOOKUP(A2#,工艺.输出!A2#,工艺.输出!E2#)
最后一步就是分解计划,这一步就是多工序排程的基础数据源,后续就用这个来测试分解速度,先不加入负荷计算与自动排程,只是分解。因为前期用的是筛选加堆叠的方案,运算效率低下,这次更改为辅助列加引用的方式来测试运算效率。
录入公式:=SEQUENCE(ROWS(A2#)),这个作为辅助列,用于查找引用函数进行引用的索引,也就是数字1、2、3、4;
接下来就是分解MPS计划,第一个部分是重复,也就是加工工序总数有多少就重复多少,如代码、数量、交期、序号,因为序号这里作了唯一值判断,所以只需要重复序号,其他全部可以用查找引用。
序号录入动态数组公式:
=LET(X,MPS.输出!E2#,Y,MPS.输出!D2#,TOCOL(IF(SEQUENCE(,MAX(Y))
代码、数量、交期分别用查找引用公式引用通过序号(A列)索引过来。录入以下公式:
代码=XLOOKUP($A2#,MPS.输出!$E2#,MPS.输出!A2#),并向右填充到D列,得到分解后的MPS主计划信息;
产品代码的加工工序顺序,这里可以用函数进行判断,判断的方法为第1列A列的判断,录入公式:
加工工序顺序=SCAN(0,A2#,LAMBDA(X,Y,IF(YOFFSET(Y,-1,),1,X+1))),得到具体的加工顺序,这个公式用的是偏移判断,速度高效了不少;
未完待续……
来源:古哥计划一点号