wsz
2025-06-20 19898bd66dec87b500b200d5d50961d0fb538ce5
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
--[[
   编码: JX-102-02
   名称: 创建后
   作者:
   日期: 2025-1-29
 
   函数: AfterDataObjDelete
 
   功能:
        -- 删除【波次组成】【波次明细】
        -- 删除入库波次计划出库的料箱等,更新入库单信息
 
   更改记录:
 
--]]
 
wms_base = require ("wms_base")
 
function AfterDataObjDelete( strLuaDEID )
    local   nRet, strRetInfo
 
    -- 获取 S_NO
    nRet, strRetInfo = mobox.getCurEditDataObjAttr( strLuaDEID, "S_WAVE_NO", "N_B_STATE" ) 
    if ( nRet ~= 0 )  then lua.Error( strLuaDEID, debug.getinfo(1), "获取当前编辑属性失败! "..strRetInfo ) end 
 
    local obj_attrs = json.decode( strRetInfo ) 
    local wave_no = obj_attrs[1].value                
    local b_state = lua.StrToNumber( obj_attrs[2].value )   
 
    if ( wave_no == '' or wave_no == nil ) then return end           
 
    -- 删除波次组成
    local strCondition = "S_WAVE_NO = '"..wave_no.."'"
    nRet, strRetInfo = mobox.dbdeleteData( strLuaDEID, "IW_Compose", strCondition )
    if ( nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "删除入库波次相关的【波次组成】失败!  "..strRetInfo ) end  
 
    -- 删除入库波次组成
    local strCondition = "S_WAVE_NO = '"..wave_no.."'"
    nRet, strRetInfo = mobox.dbdeleteData(strLuaDEID, "IW_Detail", strCondition)
    if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "删除【IW_Detail】失败!"..strRetInfo) end   
    
    -- 更新【入库单】中的 S_WAVE_NO,S_STATION_NO, S_OPERATOR_NAME, S_OPERATOR, N_B_STATE
    local strUpdateSql = "N_B_STATE = 0, S_WAVE_NO = '', S_STATION_NO ='', S_OPERATOR_NAME = '', S_OPERATOR = ''"
    local strCondition = "S_WAVE_NO = '"..wave_no.."'"
    nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Inbound_Order", strCondition, strUpdateSql )
    if ( nRet ~= 0 ) then  return 2, "更新【入库单】信息失败!"..strRetInfo end  
 
 
    -- 如果业务状态不等于完成 要把容器解锁
    if ( b_state ~= 3 ) then
        -- 释放预分配的料格数量
        strCondition = "S_BS_NO = '"..wave_no.."'"
        nRet, data_objs = m3.QueryDataObject(strLuaDEID, "Pre_Alloc_CNTR_Detail", strCondition, "S_CNTR_CODE" )
        if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1),  "QueryDataObject失败!"..data_objs ) end
 
        if ( data_objs ~= '' ) then 
            local n, m
            local pac_detail
            local cntr_list = {}
            local find
            for n = 1, #data_objs do
                pac_detail = m3.KeyValueAttrsToObjAttr(data_objs[n].attrs)
                find = false
                local cell = { cell_no = pac_detail.S_CELL_NO }            
                for m = 1, #cntr_list do
                    if ( cntr_list[m].cntr_code == pac_detail.S_CNTR_CODE ) then
                        find = true
                        table.insert( cntr_list[m].cell_list, cell )
                        break
                    end
                end
                if ( find == false ) then
                    local cntr = {
                        cntr_code = pac_detail.S_CNTR_CODE,
                        cell_list = {}
                    }
                    table.insert( cntr.cell_list, cell )
                    table.insert( cntr_list, cntr )
                end
            end
 
            local cell_num
            for m = 1, #cntr_list do
                strCondition = "S_CODE = '"..cntr_list[m].cntr_code.."'"
                cell_num = #cntr_list[m].cell_list
                nRet, strRetInfo = mobox.decDataObjAccQty( strLuaDEID, "Container", strCondition, "N_ALLOC_CELL_NUM", cell_num )
                if ( nRet ~= 0 )  then lua.Error( strLuaDEID, debug.getinfo(1), "decDataObjAccQty(Container)失败! "..strRetInfo ) end            
            end
 
            -- 把料格状态=3(预约)的设置为 0 
            strUpdateSql = "N_EMPTY_FULL = 0, S_ALLOC_OP_CODE = ''"
            strCondition = "N_EMPTY_FULL = 3 AND S_ALLOC_OP_CODE = '"..wave_no.."'"
            nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Container_Cell", strCondition, strUpdateSql )
            if ( nRet ~= 0 ) then  lua.Error( strLuaDEID, debug.getinfo(1), "更新【Container_Cell】状态信息失败!"..strRetInfo ) end              
        end
    end
 
    -- 删除[预分配容器/Pre_Alloc_Container]
    local strCondition = "S_BS_TYPE = 'Inbound_Wave' AND S_BS_NO = '"..wave_no.."'"
    nRet, strRetInfo = mobox.dbdeleteData(strLuaDEID, "Pre_Alloc_Container", strCondition)
    if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "删除【Pre_Alloc_Container】失败!"..strRetInfo) end      
    
    -- 删除[组盘明细/Pre_Alloc_CNTR_Detail]
    nRet, strRetInfo = mobox.dbdeleteData(strLuaDEID, "Pre_Alloc_CNTR_Detail", strCondition)
    if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "删除【Pre_Alloc_CNTR_Detail】失败!"..strRetInfo) end      
 
end