--[[
|
编码: WMS-56-28
|
名称: 组盘明细-超重处理-保存
|
作者: HAN
|
日期: 2025-3-9
|
|
级别: 项目
|
|
函数: Overweight_Save
|
功能:
|
-- 在做巨沃的入库任务时,料箱超重退回后,在超重组盘输入界面中拣出一定数量货品后,点保存按钮
|
-- 点保存按钮后,系统需要处理
|
-- 重新计算 CG_Detail 中货品数量,如果=0 删除
|
-- 从新计算 Pre_Alloc_CNTR_Detail 中 F_ACT_QTY(实际装箱数量)
|
-- 新增【站台货品明细】记录
|
|
更改记录:
|
--]]
|
wms_wh = require( "wms_wh" )
|
wms_cntr= require( "wms_container" )
|
jx_base= require( "jx_base" )
|
|
function Overweight_Save ( strLuaDEID )
|
local nRet, strRetInfo
|
local runtime_parameter
|
|
-- 获取【超重组盘输入】面板的参数
|
nRet, runtime_parameter = m3.GetRuntimeParam(strLuaDEID)
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "GetRuntimeParam失败! "..runtime_parameter ) end
|
local parameter
|
nRet, parameter = m3.GetRuntimePanel_InputParamter( strLuaDEID, runtime_parameter.panel, "组盘输入" )
|
if ( nRet == 1 ) then
|
mobox.setInfo( strLuaDEID, "没有定义'组盘输入'面板参数!")
|
return
|
end
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), parameter ) end
|
if ( parameter == nil ) then return end
|
local id = parameter.id -- 当前点中的入库任务标识(组盘明细)
|
local pac_no = parameter.pac_no -- 当前点中的入库任务所属组盘号
|
local station = parameter.station
|
|
if ( pac_no == nil or pac_no == "") then
|
mobox.setInfo( strLuaDEID, "'组盘输入'面板必须有orgc_no参数!")
|
return
|
end
|
if ( station == nil or station == "") then
|
mobox.setInfo( strLuaDEID, "'组盘输入'面板必须有station参数!")
|
return
|
end
|
|
-- 获取当前计划入库任务装箱数量
|
nRet, strRetInfo = mobox.getCurEditDataObjAttr( strLuaDEID, "F_QTY", "F_ACT_QTY" )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "获取当前编辑属性失败! "..strRetInfo ) end
|
local obj_attrs = json.decode( strRetInfo )
|
local qty = lua.Get_NumAttrValue( obj_attrs[1].value )
|
local act_qty = lua.Get_NumAttrValue( obj_attrs[2].value )
|
local cancel_qty = qty-act_qty
|
|
if ( qty == 0 ) then return end
|
-- V2.0
|
if ( act_qty > qty ) then
|
mobox.setInfo( strLuaDEID, "入库数量不能大于计划数量!")
|
return
|
end
|
|
-- 获取原来组盘明细中的实际入库数量
|
local org_cntr_detail
|
nRet, org_cntr_detail = m3.GetDataObjectByKey(strLuaDEID, "Pre_Alloc_CNTR_Detail", "S_ID", id)
|
if (nRet ~= 0 ) then
|
mobox.stopProgram( strLuaDEID, "获取'Pre_Alloc_CNTR_Detail'信息失败! " .. org_cntr_detail )
|
return
|
end
|
if ( org_cntr_detail.act_qty == act_qty ) then
|
-- 和以前数据对比并没有拣出货品
|
return
|
end
|
if ( act_qty > org_cntr_detail.act_qty ) then
|
-- 和以前数据对比实际入库数量增加,报错
|
mobox.setInfo( strLuaDEID, "入库货品数量大于原入库数量,不符号超重拣出逻辑!")
|
return
|
end
|
|
-- 计算出超重拣出货品数量 qty
|
local qty = org_cntr_detail.act_qty - act_qty
|
|
-- 设置【组盘明细】中的实际入库数量
|
local strCondition = "S_ID = '"..id.."'"
|
local strUpdateSql = "F_ACT_QTY = "..act_qty
|
nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Pre_Alloc_CNTR_Detail", strCondition, strUpdateSql )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "更新【组盘明细】信息失败!"..strRetInfo ) end
|
|
-- 设置CG_Detail中货品数量
|
strCondition = "S_ITEM_CODE = '"..org_cntr_detail.item_code.."' AND S_BATCH_NO = '"..org_cntr_detail.batch_no.."'"..
|
"AND S_CNTR_CODE = '"..org_cntr_detail.cntr_code.."' AND S_CELL_NO = '"..org_cntr_detail.cell_no.."'"
|
local strOrder = ""
|
nRet, strRetInfo = wms_cntr.Reduce_CG_Detail_Qty( strLuaDEID, org_cntr_detail.cntr_code, strCondition, strOrder, qty )
|
if ( nRet ~= 0 ) then
|
mobox.stopProgram( strLuaDEID, strRetInfo )
|
return
|
end
|
local container
|
nRet, container = wms_cntr.GetInfo( strLuaDEID, org_cntr_detail.cntr_code )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "wms_cntr.GetInfo 失败!"..container ) end
|
if ( container == '' ) then
|
mobox.stopProgram( strLuaDEID, "料箱号='"..org_cntr_detail.cntr_code.."'的料箱不存在!" )
|
return
|
end
|
nRet, strRetInfo = wms_cntr.Reset( strLuaDEID, container )
|
if ( nRet ~= 0 ) then
|
mobox.stopProgram( strLuaDEID, strRetInfo )
|
return
|
end
|
|
-- 新增【站台货品明细】
|
local sg_detail
|
sg_detail = m3.AllocObject(strLuaDEID,"Station_Goods_Detail")
|
|
sg_detail.station_no = station
|
sg_detail.from_op = "Overweight-Pick-Out" -- 数据来源超重拣出
|
|
sg_detail.serial_no = org_cntr_detail.serial_no
|
sg_detail.item_code = org_cntr_detail.item_code
|
sg_detail.item_name = org_cntr_detail.item_name
|
sg_detail.batch_no = org_cntr_detail.batch_no
|
sg_detail.item_spec = org_cntr_detail.item_spec
|
sg_detail.item_state = org_cntr_detail.item_state
|
sg_detail.end_user = org_cntr_detail.end_user
|
sg_detail.owner = org_cntr_detail.owner
|
sg_detail.supplier = org_cntr_detail.supplier
|
sg_detail.erp_wh_code = org_cntr_detail.erp_wh_code
|
|
sg_detail.bs_no = org_cntr_detail.bs_no
|
sg_detail.bs_type = org_cntr_detail.bs_type
|
sg_detail.bs_row_no = org_cntr_detail.bs_row_no
|
|
sg_detail.ext_attr1 = org_cntr_detail.ext_attr1
|
sg_detail.ext_attr2 = org_cntr_detail.ext_attr2
|
sg_detail.ext_attr3 = org_cntr_detail.ext_attr3
|
sg_detail.ext_attr4 = org_cntr_detail.ext_attr4
|
sg_detail.ext_attr5 = org_cntr_detail.ext_attr5
|
|
sg_detail.qty = qty
|
sg_detail.uom = org_cntr_detail.uom
|
|
nRet, sg_detail = m3.CreateDataObj( strLuaDEID, sg_detail )
|
if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "创建【Station_Goods_Detail】失败!"..sg_detail) end
|
|
local action = {
|
{
|
action_type = "refresh_master_panel",
|
value = {
|
sub_page = {"站台超重货品明细"}
|
}
|
}
|
}
|
nRet, strRetInfo = mobox.setAction( strLuaDEID, lua.table2str(action) )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "setAction失败! "..strRetInfo..' action = '..strAction ) end
|
|
end
|