--[[
|
编码: WMS-57-11
|
名称: 预分配容器-入库后处理
|
作者:HAN
|
日期:2025-1-29
|
|
级别:项目
|
|
函数: PostProcess
|
|
功能:
|
-- 检查业务来源【入库波次】中的货品是否有全部入库完成
|
-- 如果已经全部完成,触发【入库单】完工回报
|
更改记录:
|
|
--]]
|
wms_base = require ("wms_base")
|
|
function PostProcess ( strLuaDEID )
|
local nRet, strRetInfo
|
local pa_cntr = {}
|
nRet, pa_cntr = m3.GetSysCurEditDataObj( strLuaDEID, "Pre_Alloc_Container" )
|
if (nRet ~= 0) then
|
lua.Stop( strLuaDEID, "获取【预分配容器】对象属性失败!"..pa_cntr )
|
return
|
end
|
|
m3.PrintLuaDEInfo( strLuaDEID )
|
|
-- 只有对已经完成入库/5的或取消入库/6 预分配容器 进行后处理
|
if ( pa_cntr.b_state ~= 5 and pa_cntr.b_state ~= 6 ) then return end
|
|
-- 判断来源业务(入库波次)是否可以完工
|
local strCondition
|
if ( pa_cntr.bs_type == "Inbound_Wave" ) then
|
strCondition = "F_QTY > (F_ACC_I_QTY + F_ACC_C_QTY) AND S_WAVE_NO = '"..pa_cntr.bs_no.."'"
|
|
nRet, strRetInfo = mobox.getDataObjCount( strLuaDEID, "IW_Detail", strCondition )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "getDataObjCount失败!"..strRetInfo )
|
return
|
end
|
local nCount = lua.StrToNumber( strRetInfo )
|
|
if ( nCount == 0 ) then
|
-- 入库波次可以完工
|
-- N_B_STATE = 3 入库完成
|
strSetAttr = "N_B_STATE = 3"
|
strCondition = "S_WAVE_NO = '"..pa_cntr.bs_no.."'"
|
nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Inbound_Wave", strCondition, strSetAttr )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "更新【入库波次】状态息失败!"..strRetInfo )
|
return
|
end
|
-- 设置 N_B_STATE = 3 入库单完成
|
nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Inbound_Order", strCondition, strSetAttr )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "更新【入库单】状态息失败!"..strRetInfo )
|
return
|
end
|
|
nRet, strRetInfo = wms_base.InboundWave_Finish_PostProce( strLuaDEID, pa_cntr.bs_no )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "WMS_InboundWave_Finish_PostProce失败!"..strRetInfo )
|
return
|
end
|
|
-- 触发入库波次里的【入库单】报完工 WFP
|
strCondition = "S_NO IN ( Select S_WEO_NO From TN_IW_Compose with (NOLOCK) Where S_WAVE_NO = '"..pa_cntr.bs_no.."')"
|
-- 找出入库波次组成的入库单
|
local data_objs
|
nRet, data_objs = m3.QueryDataObject(strLuaDEID, "Inbound_Order", strCondition, "S_NO" )
|
if (nRet ~= 0) then
|
lua.Stop( strLuaDEID, "QueryDataObject失败!"..data_objs )
|
return
|
end
|
if ( data_objs == '' ) then return end
|
|
local n
|
local obj_attrs
|
local add_wfp = {}
|
for n = 1, #data_objs do
|
obj_attrs = m3.KeyValueAttrsToObjAttr(data_objs[n].attrs)
|
-- 增加一个后台进程进行入库单完工回报
|
add_wfp = {
|
wfp_type = 1, -- 触发数据对象事件(指定数据对象标识)
|
cls = "入库单",
|
obj_id = data_objs[n].id,
|
obj_name = "入库单号'"..obj_attrs.S_NO.."'-->完工回报",
|
trigger_event = "完工回报"
|
}
|
nRet, strRetInfo = m3.AddSysWFP( strLuaDEID, add_wfp )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "AddSysWFP失败!"..strRetInfo )
|
return
|
end
|
end
|
end
|
elseif ( pa_cntr.bs_type == "Inbound_Order" ) then
|
strCondition = "F_QTY > (F_ACC_I_QTY + F_ACC_C_QTY) AND S_IO_NO = '"..pa_cntr.bs_no.."'"
|
nRet, strRetInfo = mobox.getDataObjCount( strLuaDEID, "Inbound_Detail", strCondition )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "getDataObjCount失败!"..strRetInfo )
|
return
|
end
|
local nCount = lua.StrToNumber( strRetInfo )
|
|
if ( nCount == 0 ) then
|
-- 入库单可以完工
|
-- N_B_STATE = 3 入库完成
|
strSetAttr = "N_B_STATE = 3"
|
strCondition = "S_IO_NO = '"..pa_cntr.bs_no.."'"
|
nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Inbound_Order", strCondition, strSetAttr )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "更新【入库单】状态失败!"..strRetInfo )
|
return
|
end
|
|
local inbound_order
|
nRet, inbound_order = m3.GetDataObjectByKey( strLuaDEID, "Inbound_Order", "S_IO_NO", pa_cntr.bs_no )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "获取【入库单】信息失败!"..inbound_order )
|
return
|
end
|
-- 触发【入库单】报完工 WFP
|
-- 增加一个后台进程进行入库单完工回报
|
local add_wfp = {
|
wfp_type = 1, -- 触发数据对象事件(指定数据对象标识)
|
cls = "入库单",
|
obj_id = inbound_order.id,
|
obj_name = "入库单号'"..pa_cntr.bs_no.."'-->完工回报",
|
trigger_event = "完工回报"
|
}
|
nRet, strRetInfo = m3.AddSysWFP( strLuaDEID, add_wfp )
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "AddSysWFP失败!"..strRetInfo )
|
return
|
end
|
end
|
end
|
end
|