生产用料清单【调拨领料/调拨倒冲】的物料其“仓库”如何取BOM上的“默认发料仓库”
【应用场景】
标准逻辑:当用料清单子项物料的发料方式为调拨领料/调拨倒冲时,生产用料清单的发料仓库取车间的WIP仓
实际场景:一张生产订单上对应的用料清单上的需要调拨的物料,可能存放在不同的WIP仓,仅通过生产订单对应车间的WIP仓无法满足诉求,希望用料清单上的发料仓库能优先取物料清单上的默认发料仓库,若为空,再取生产订单对应车间的WIP仓。
【实现思路】
用料清单的生成或更新有以下场景:
一、生产订单保存时自动产生用料清单;
二、计划订单投放产生生产订单及用料清单(直接存数据库,不经过服务插件)
三、生产订单计划确认时自动调用BOM展开或手工展开;
四、物料清单同步更新用料清单;
如果以上几种场景都需要优先取物料清单上的默认发料仓库,则处理思路应该如下:若用料清单存在调拨子项、生产订单在计划/计划确认状态、且BOM中存在默认发料发料仓库,则在调用料清单保存逻辑时,自动将BOM的默认发料仓库仓位更新至用料清单的发料仓库仓位。
若保存提交数量超过1000的,可尝试将下方代码语法转临时表处理,SQL中IN的数量仅支持1000数量。
【实现步骤】
编写服务插件,代码如下:
1)若202309后的版本,可开启投放后调用订单保存(会影响计划投放效率,可在订单提交处挂插件触发即可),触发用料清单保存服务插件,在保存服务插件的afterexecute...事件中若用料清单存在调拨子项、且生产订单在计划、计划确认状态,BOM中存在默认发料仓库,则将BOM默认发料仓库仓位更新至用料清单仓库仓位库存状态数据。
import clr clr.AddReference('Kingdee.BOS.App') from Kingdee.BOS.App.Data import * def AfterExecuteOperationTransaction(e): if e.DataEntitys is None: return ids = '' for data in e.DataEntitys: ids = ids +','+ str(data["ID"]) if len(ids)==0: return ids = ids[1:] sqlStr = """ MERGE INTO T_PRD_PPBOMENTRY_C A USING( SELECT T1.FENTRYID,T3.FSTOCKID,T3.FSTOCKLOCID,(CASE WHEN ISNULL(T4.FDEFSTOCKSTATUSID,0)>0 THEN T4.FDEFSTOCKSTATUSID ELSE 10000 END) AS FDEFSTOCKSTATUSID,T2.FISSUETYPE,T2.FSTOCKID AS OLDSTOCKID,T2.FSTOCKLOCID AS OLDSTOCKLOCID FROM T_PRD_PPBOM T0 INNER JOIN T_PRD_PPBOMENTRY T1 ON T1.FID = T0.FID INNER JOIN T_PRD_PPBOMENTRY_C T2 ON T2.FENTRYID = T1.FENTRYID AND T2.FISSUETYPE IN ('3','4') INNER JOIN T_ENG_BOMCHILD T3 ON T3.FENTRYID = T1.FBOMENTRYID AND T3.FSTOCKID>0 INNER JOIN T_PRD_MOENTRY_A T5 ON T5.FENTRYID = T0.FMOENTRYID AND T5.FSTATUS IN ('1','2') LEFT JOIN T_BD_STOCK T4 ON T4.FSTOCKID = T3.FSTOCKID WHERE T0.FID IN ({0}) ) B ON (B.FENTRYID = A.FENTRYID) WHEN MATCHED THEN UPDATE SET A.FSTOCKID=B.FSTOCKID,A.FSTOCKLOCID=B.FSTOCKLOCID,A.FSTOCKSTATUSID=B.FDEFSTOCKSTATUSID;""".format(ids) result = DBUtils.Execute(this.Context, sqlStr)
配置投放后保存参数
代码注册位置
2)若202309之前版本,无法配置投放后保存,可增加在生产订单提交服务插件的afterexecute...事件中,根据生产订单分录内码找到用料清单,调用更新代码执行处理。
直接复制上方代码注册到生产订单提交服务插件,修改
WHERE T0.FID IN ({0})
为
WHERE T5.FID IN ({0})
即可。
代码注册位置
生产用料清单【调拨领料/调拨倒冲】的物料其“仓库”如何取BOM上的“默认发料仓库”
本文2024-09-23 03:18:33发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-158032.html