手把手教你构建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)
未完待续……