--[[ 版本: Version 1.0 创建日期: 2025-4-20 创建人: HAN WMS-Basis-Model-Version: V15.5 功能: 在处理入库作业时,将入库单明细中的货品预先分配到具体容器料格的过程在WMS系统里叫 预分配容器 一般用在料箱库,空料箱有多种规格,根据货品中的设置呼出适配的料格 --]] wms_cntr = require ("wms_container") wms_wh = require ("wms_wh") local wms_pac = {_version = "0.1.1"} --[[ 预分配料箱,物料预先指定存储料格及料格中最大存储数量,或重量 如果货品 Designated Material Grid -- 简称 DMG 意思是每个货品都指定了一种料格进行存储 特点: 一种货品保存在一种类型的料格 料格中货品最大存储数量计算方法有两种, 1 -- 系统设置最大储藏数量 2 -- 系统设置重量后根据料格载重进行计算 在匹配料箱时,一个料箱只能用相同的数量计算方法 来源项目: 艾默生料箱库 输入参数: alloc_rule -- 补料规则(呼出补料料箱匹配规则) { replenishment_call_out = false/true -- 是否启用未满料格呼出补料 matching_attrs = {"S_ITEM_CODE","S_ITEM_STATE",...} -- 这些属性相同的料格可以进行补料 matching_method = "latest_storage_time" -- 可以为空,latest_storage_time -- 只匹配最近一次入库的相同货品料格 } wh_code --入库仓库编码 area_code -- 入库库区 aisle -- 如果是立库这里设置了哪些巷道可用 station -- 入库站台(不是必须) bs_type -- 来源业务类型(比如入库单,入库波次) bs_no -- 来源业务单据编码 ---- 下面两个参数是系统运算后的结果返回 ---- pac_list -- Pre_Alloc_Container 对象列表 pac_detail_list Pre_Alloc_CNTR_Detail 列表 --]] function wms_pac.Pre_Alloc_CNTR_By_DMG( strLuaDEID, alloc_rule, wh_code, area_code, aisle, station, bs_type, bs_no, pac_list, pac_detail_list ) local nRet, strRetInfo, n -- step1: 输入参数合法性检查 if ( bs_no == nil or bs_no == '') then return 1, "Pre_Alloc_CNTR_By_DMG 函数中业务单号 bs_no 有值!" end if ( bs_type ~= "Inbound_Order" and bs_type ~= "Inbound_Wave") then return 1, "Pre_Alloc_CNTR_By_DMG 函数的业务来源类型 bs_type 只能是【入库单】或【入库波次】" end if ( wh_code == nil or wh_code == '') then return 1, "Pre_Alloc_CNTR_By_DMG 函数中仓库编码 wh_code 有值!" end if ( area_code == nil ) then area_code = '' end if ( aisle == nil ) then aisle = {} end if ( station == nil ) then station = '' end -- step2: 获取入库货品明细 item_lis -- 确定要联表查询的表和条件 local strTable, strCondition if ( bs_type == "Inbound_Order" ) then strTable = "TN_Inbound_Detail a LEFT JOIN TN_Material b ON a.S_ITEM_CODE = b.S_ITEM_CODE" strCondition = "a.S_IO_NO = '"..bs_no.."'" else strTable = "TN_IW_Detail a LEFT JOIN TN_Material b ON a.S_ITEM_CODE = b.S_ITEM_CODE" strCondition = "a.S_WAVE_NO = '"..bs_no.."'" end -- 要查询的属性 local strAttrs = "a.S_ITEM_CODE, a.S_ITEM_NAME, a.S_ITEM_STATE, a.S_BATCH_NO, a.S_SERIAL_NO, a.D_PRD_DATE, a.D_EXP_DATE, a.N_ROW_NO,".. "a.S_SUPPLIER_NO, a.S_OWNER, a.S_STORER, a.S_EXT_ATTR1, a.S_EXT_ATTR2, a.S_EXT_ATTR3, a.S_EXT_ATTR4, a.S_EXT_ATTR5,".. "b.F_WEIGHT, b.F_VOLUME, b.S_CNTR_TYPE, b.S_CELL_TYPE, b.S_ABC_CLS, b.N_LOADING_LIMIT, b.F_LOAD_CAPACITY" local strOrder = "a.N_ROW_NO" nRet, strRetInfo = mobox.queryMultiTable(strLuaDEID, strAttrs, strTable, 1, strCondition, strOrder ) if (nRet ~= 0) then return 2,"QueryDataObject失败!"..strRetInfo end if ( strRetInfo == '' ) then return 1, bs_type.."'"..bs_no.."'明细为空!" end local ret_attr = json.decode(strRetInfo) for n = 1, #ret_attr do local item = { item_code = ret_attr[n][1], item_name = ret_attr[n][2], item_state = ret_attr[n][3], batch_no = ret_attr[n][4], serial_no = ret_attr[n][5], prd_date = ret_attr[n][6], exp_date = ret_attr[n][7], row_no = lua.Get_NumAttrValue( ret_attr[n][8] ), supplier = ret_attr[n][9], owner = ret_attr[n][10], storer = ret_attr[n][11], ext_attr1 = ret_attr[n][12], ext_attr2 = ret_attr[n][13], ext_attr3 = ret_attr[n][14], ext_attr4 = ret_attr[n][15], ext_attr5 = ret_attr[n][16], weight = lua.Get_NumAttrValue( ret_attr[n][17] ), volume = lua.Get_NumAttrValue( ret_attr[n][18] ), cntr_type = ret_attr[n][19], cell_type = ret_attr[n][20], abc_cls = ret_attr[n][21], load_limit = lua.Get_NumAttrValue( ret_attr[n][22] ), load_capacity = lua.Get_NumAttrValue( ret_attr[n][23] ), } end return 0 end return wms_pac