手把手教你构建PMC全自动多工序分解系统-4

古哥计划

优秀创作者

全文约800字

大家好,我是古老师。昨天的《全自动工序分解表》的第3章中,完成了MPS订单模块和部分分解模块。其中MPS.输出又分为二维输出和一维输出,输出分开两步的原因是为了后续动态数组引用方便,同时也能能够动态扩展,减少后续公式的复杂度。

今天的第4章,主要设计根据MPS分解工艺排程了,这部分就是整体工艺表的核心了。

引用工艺数量

需要快速根据所排的产品编码进行快速工序分解,核心就是需要知道所排编码有多少道工序,根据这个数字来快速分解生产任务行数,所以需要在MPS一维.输出这里增加一列查找与引用列,引用工艺二维.输出这里的工序数量。

录入公式:

=XLOOKUP(C2#,工艺二维.输出!A2#,工艺二维.输出!B2#)

公式解释:

通过MPS主计划这里的编码快速索引工艺二维数据库中的工艺数;

重复MPS编码

分解本质上是一行变成多行,例如一个产品有7道工序,就是原来在表格中的1行数据变成7行数据,也就是需要重复7次,所以我们需要把MPS中相关的信息重复7次。

有些信息是不需要重复的,如生产任务是MPS中,线体也是,只需要核心知道编码、数量、交期对应有多少工序就可以了。所以对应这三个字段的公式为:

产品编码:

=LET(X,MPS一维.输出!C2#,Y,OFFSET(X,,3),TOCOL(IF(SEQUENCE(,MAX(Y))<=Y,X,A),3))

排程数量:

=LET(X,MPS一维.输出!D2#,Y,OFFSET(X,,2),TOCOL(IF(SEQUENCE(,MAX(Y))<=Y,X,A),3))

上线日期:

=LET(X,MPS一维.输出!E2#,Y,OFFSET(X,,1),TOCOL(IF(SEQUENCE(,MAX(Y))<=Y,X,A),3))

公式解释:

这里用最小模型解释一下:

定义X为{"A";"B"},Y为{2;3}。

计算MAX(Y)=3,生成SEQUENCE(1,3)即{1,2,3}。

对于每个X的元素(行方向),检查SEQUENCE的每个值是否小于等于对应的Y值。

如果是,返回X的元素,否则返回A(强制错误)

使用TOCOL将结果数组转换为列,忽略错误和空值,从而得到每个元素重复指定次数的结果。

筛选堆叠工序

接下来就是根据产品编码进行工序筛选了,也就是通过MPS一维.输出表中的产品编码到工艺一维.输出进行筛选判断,判断出对应的工序名称,最后用堆叠函数进行堆叠。其他加工周期(秒)和加工顺序大同小异,只需要更改筛选函数的第一参数的显示引用位置就可以了

=DROP(REDUCE("",MPS一维.输出!C2#,LAMBDA(X,Y,VSTACK(X,FILTER(工艺一维.输出!B2#,工艺一维.输出!A2#=Y)))),1)

未完待续……

山东省
浏览 60
收藏
5
分享
5 +1
1
+1
全部评论 1
 
学习
· 广东省
回复