生产用料清单【调拨领料/调拨倒冲】的物料其“仓库”如何取BOM上的“默认发料仓库”

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

生产用料清单【调拨领料/调拨倒冲】的物料其“仓库”如何取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上的“默认发料仓库”

【应用场景】标准逻辑:当用料清单子项物料的发料方式为调拨领料/调拨倒冲时,生产用料清单的发料仓库取车间的WIP仓实际场景:一张生产订单...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息