Jianw
2025-05-13 3b39fe3810c3ee2ec9ec97236c1769c5c85e062c
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
--[[
    编码: WMS-19-01
    名称: 容器货品明细-创建前
    作者:HAN  
    日期:2025-1-29
 
    级别:固定 (说明本段代码在项目中不太会变化)
    
    函数: BeforeDataObjCreate
 
    功能:
        1)创建一个【容器货品明细】需要到【容器货品】表找一下这个物料是否存在,有存在合并数量,
           不存在就要创建一个【容器货品】,并且把【容器货品】的ID作为 S_CG_ID 设置到【容器货品明细】
    更改记录:
 
--]]
 
wms_base = require( "wms_base" )
 
function BeforeDataObjCreate ( strLuaDEID ) 
    local   nRet, strRetInfo
 
    -- step1: 获取当前【容器货品明细】的关键信息
    nRet, strRetInfo = mobox.getCurEditDataObjAttr( strLuaDEID, "S_CNTR_CODE","S_ITEM_CODE","N_ITEM_STATE","S_END_USER","F_QTY",
                                                                "S_ITEM_NAME","S_ITEM_SPEC","S_UOM","C_ITEM_MERGE") 
    if ( nRet ~= 0 )  then lua.Error( strLuaDEID, debug.getinfo(1), "获取当前编辑属性失败! "..strRetInfo ) end 
    local obj_attrs = json.decode( strRetInfo ) 
    local cntr_code = obj_attrs[1].value             
    local item_code = obj_attrs[2].value    
    local item_state = lua.StrToNumber(obj_attrs[3].value)            
    local end_user = obj_attrs[4].value     
    local qty = lua.StrToNumber(obj_attrs[5].value)   
    local item_name = obj_attrs[6].value
    local item_spec = obj_attrs[7].value
    local uom = obj_attrs[8].value        
    local merge = obj_attrs[9].value            
    local cg_id = ''
    
    if ( merge == 'Y') then
        -- step2: 获取当前【容器货品】记录
        local strCondition
        strCondition = "S_CNTR_CODE='"..cntr_code.."' AND S_ITEM_CODE='"..item_code.."'"
        nRet, strRetInfo = mobox.queryOneDataObjAttr(strLuaDEID, "Container_Good", strCondition, "S_ITEM_CODE" )
        if (nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "获取【容器货品】信息失败! " .. strRetInfo ) end        
        if ( strRetInfo == '') then
            -- 如果不存在【容器货品】就新建一个
            local cntr_good = m3.AllocObject(strLuaDEID,"Container_Good")
            local ret_info
 
            cntr_good.cntr_no = cntr_code
            cntr_good.item_code = item_code
            cntr_good.item_name = item_name
            cntr_good.item_spec = item_spec
            cntr_good.uom = uom
            cntr_good.qty = qty
 
            nRet, ret_info = m3.CreateDataObj(strLuaDEID, cntr_good)
            if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), 'mobox 创建【容器货品】对象失败!'..ret_info ) end
            -- 获取创建成功的【容器货品】对象标识
            cg_id = ret_info.id
        else
            local strSetAttr = ''
            local ret_info = json.decode(strRetInfo)
            cg_id = ret_info.id
            -- 需要累计数量
            strCondition = "S_ID = '"..cg_id.."'"
            strSetAttr = "F_QTY = F_QTY + "..qty
            nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Container_Good", strCondition, strSetAttr )
            if ( nRet ~= 0 ) then  lua.Error( strLuaDEID, debug.getinfo(1), "更新【容器货品】数量失败!"..strRetInfo ) end 
        end
    end
 
    -- 根据字典获取 N_LOCK_STATE 的货品状态
    local item_state_name = wms_base.GetDictItemName( strLuaDEID, "WMS_ItemState", item_state ) 
 
    local   attr_value = {}
    attr_value[1] = lua.KeyValueObj( "S_CG_ID", cg_id )
    attr_value[2] = lua.KeyValueObj( "S_ITEM_STATE", item_state_name )
    nRet, strRetInfo = mobox.setCurEditDataObjAttr( strLuaDEID, lua.table2str(attr_value) ) 
    if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "设置【容器货品明细】信息失败!  "..strRetInfo ) end   
end