生产用料清单【调拨领料/调拨倒冲】的物料其“仓库”如何取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 F生产用料清单【调拨领料/调拨倒冲】的物料其“仓库”如何取BOM上的“默认发料仓库”
【应用场景】标准逻辑:当用料清单子项物料的发料方式为调拨领料/调拨倒冲时,生产用料清单的发料仓库取车间的WIP仓实际场景:一张生产订单...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



