fy36
2025-05-14 a37aca60ff9914b0abb710f04118b22420f4f398
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
--[[
    编码: JX-51-11
    名称: 出库单-出库后处理
    作者:HAN  
    日期:2025-1-29
 
 
    级别:项目
    
    函数: PostProcess
 
    功能:
        【配盘】出库完成后,需要检查一下该配盘下面明细中相关的出库单是否可以完成
 
    更改记录:
 
--]]
wms_base = require ("wms_base")
 
function PostProcess ( strLuaDEID ) 
    local nRet, strRetInfo
    local dc_obj = {}
    nRet, dc_obj = m3.GetSysCurEditDataObj( strLuaDEID, "Distribution_CNTR" )
    if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "获取【配盘】对象属性失败!"..operation_obj ) end
    if ( dc_obj.dc_no == '' or dc_obj.dc_no == nil ) then return end
 
    -- 只有对状态=5(回库)=6(完成)状态的配盘容器进行后处理
    local strCondition, strSetAttr
 
    if ( dc_obj.b_state == 5 or dc_obj.b_state == 6 ) then 
        if ( dc_obj.bs_type == "Outbound_Wave" ) then
 
            strCondition = "F_QTY > (F_ACC_O_QTY + F_ACC_C_QTY) AND S_WAVE_NO = '"..dc_obj.bs_no.."'"
 
            nRet, strRetInfo = mobox.getDataObjCount( strLuaDEID, "OW_Detail", strCondition )
            if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "getDataObjCount失败!"..strRetInfo ) end
            local nCount = lua.StrToNumber( strRetInfo ) 
            
            if ( nCount == 0 ) then
                -- 出库波次可以完工
                -- N_B_STATE = 4 出库完成
                strSetAttr = "N_B_STATE = 4"
                strCondition = "S_WAVE_NO = '"..dc_obj.bs_no.."'"
                nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Outbound_Wave", strCondition, strSetAttr )
                if ( nRet ~= 0 ) then  lua.Error( strLuaDEID, debug.getinfo(1), "更新【出库波次】状态息失败!"..strRetInfo ) end  
                -- 设置 N_B_STATE = 4 出库单完成
                nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Outbound_Order", strCondition, strSetAttr )
                if ( nRet ~= 0 ) then  lua.Error( strLuaDEID, debug.getinfo(1), "更新【出库单】状态息失败!"..strRetInfo ) end                  
    
                nRet, strRetInfo = wms_base.OutboundWave_Finish_PostProce( strLuaDEID, dc_obj.bs_no )
                if ( nRet ~= 0 ) then  lua.Error( strLuaDEID, debug.getinfo(1), "WMS_OutboundWave_Finish_PostProce失败!"..strRetInfo ) end
    
                -- 触发出库波次里的【出库单】报完工 WFP
                strCondition = "S_NO IN ( Select S_OO_NO From TN_OW_Compose with (NOLOCK) Where S_WAVE_NO = '"..dc_obj.bs_no.."')"
                -- 找出出库波次组成的出库单
                local data_objs
                nRet, data_objs = m3.QueryDataObject(strLuaDEID, "Outbound_Order", strCondition, "S_NO" )
                if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1),"QueryDataObject失败!"..data_objs ) 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.Error( strLuaDEID, debug.getinfo(1), "AddSysWFP失败!"..strRetInfo )  
                    end      
                end           
            end
        end
    end
end