本地测试环境:admin admin123
备品备件的入库流程有五种流程,每种流程对应的查询条件都不一样。
类型 | 对应页面 | 查询条件 | 字段 |
---|---|---|---|
采购入库 | ProcurementWarehousing.vue | 内向交货单 | reNumberSap |
跨公司调拨入库 | CrossCompanyWarehousing.vue | 交货单号 | reNumberSap |
赠品入库 | GiftsWarehousing.vue | 采购订单 | reNumberSap |
商贸入库 | CommercialWarehousing.vue | 采购订单 | reNumberSap |
退库入库 | ReturnWarehousing.vue | 物料凭证 | reNumberSap |
入库流程:
当输入交货单查询的时候,货物送到了,但是没有入备品备件库,没有入备品备件库。
交货单号里能看到单子里包含的货物明细。
查看明细按钮会根据 SRM送货单号 + 物料编码 去查询这批货物是哪个部门预留的,然后进行分配。
(物料一般都不知道,所以就是根据 SRM送货单号去查询明细。)
分配完,点击暂存,二次确认无误,点击提交,这批货物就会进入库存。
接下来,根据交易凭证(如果是采购入库单,那就是reNumberSap,其实就是入库中输入的查询条件,5个流程,查询条件不同,都是一一对应的。)可以在入库记录里看到(此步骤可以省略。)
进入库存后,可以在库存管理看到,这批货物生成的批次码,把这个批次码打印出来,贴在对应的货物上,然后去仓库的货架边,扫面对应的货架码,再扫描批次码,就可以上架了。
采购入库
以内向交货单号:0180363009 为例。
入库流程的表单数据是由两个info拼接而成。
查询数据的方法如下:
可以看到,采购入库流程先查询InInfo,然后根据其中的asnNumber去查询hdInfo。
hdInfo:
InInfo:
数据加载的时候,先查询lnInfo
再根据 hdInfo 里的SRM送货单号-ASN_NUMBER
,去查询hdInfo
stockinInfo.lnInfo:(一条或多条数据)
-- 查询stockinInfo.lnInfo
SELECT ASN_NUMBER, ASN_LINE_NUM,RE_NUMBER_SAP,REQUIRE_ITEM_CODE,
REQUIRE_ITEM_NAME,SHIP_QUANTITY,UOM_DESC,LINE_RECEIVE_STATUS,
PO_NUM,LINE_NUM,REQ_COMMENTS,COST_CENTER_TEXT_DESCRIPTION,
NEED_BY_DATE,INV_WAREHOUSE,LINE_DESC,COMMENTS
FROM
spare_asnln where RE_NUMBER_SAP = '0180353672';
stockinInfo.hdInfo:(仅有一条数据)
-- 查询stockinInfo.hdInfo
select asn_number, vendor_name, ship_date_fmt, company_name,
ship_to_organization_name, asn_type_name, expected_date_fmt,
actual_receiver_name, comments, create_by, create_time, update_by,
update_time, remark, display_vendor_code, display_code from spare_asnhd
where asn_number = 'ASN210328000084';
点击查看明细的方法(根据**送货单号 asn_number
**查询):
SELECT asn_number,
ASN_LINE_NUM,
require_item_code,
require_item_name,
uom_desc,
re_number_sap,
a.rsnum,
a.rspos,
PUR_REQ_NUM,
PUR_REQ_LINE_NUM,
ZJHD,
need_by_date,
UNIT_DESC,
MENGE,
sum(b.amount) qamount
FROM
spare_asnln_resb a
left join spare_batch_detail_history b on b.rsnum=a.rsnum and b.rspos=a.rspos and b.detail_change_direction='I'
where asn_number = 'ASN210119000177'
group by
asn_number,
ASN_LINE_NUM,
require_item_code,
require_item_name,
uom_desc,
re_number_sap,
a.rsnum,
a.rspos,
PUR_REQ_NUM,
PUR_REQ_LINE_NUM,
ZJHD,
need_by_date,
UNIT_DESC,
MENGE
数据暂存后,点击 提交 按钮的方法,额,没招到
但是我知道点击提交后,可以在批次管理中出现记录,那我就去找批次管理页面加载的方法,然后反向Alt+F7,查找方法的引用。
找到了!
我真是个天才啊!
前台在:warehousing.js 后台处理类:SpareWarehousingController。
批次号生成逻辑
批次号是货物入库之后,系统根据规则自动生成的。
批次号会被打印出来,然后贴到货物上,进行一对一绑定。
而货物,最终放到货架上,用PDA设备扫描货架二维码,再扫描批次号二维码,进行绑定,就完成了上架。
此时批次号就从批次库中删除,进入库存记录表。
以采购入库为例:
批次码生成逻辑:
getByWDM有三个参数,第一个是redis,第二个是仓库码,第三个是物料编码。
目前系统中有2个仓库码:
物料编码是SAP或者SRM系统自带的,如下:
假定 warehourseCode = D101,requireItemCode = 60037679,则生成批次码如下:
// warehourseCode =
public static String getByWDM (RedisCache redisCache,String warehourseCode,String matnr){
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyMMdd");
//今天是2022年4月25日,则formatter.format(date) = 220425
// wd(仓库+日期)=D101220425
String wd = warehourseCode + formatter.format(date);
// wdm(仓库+日期+物料) =D10122042560037679,如果仓库,日期,物料相同,则批次号相同
String wdm = warehourseCode+formatter.format(date)+matnr;
String batch = redisCache.getCacheObject(wdm);
if (batch==null){
//从内存中获取存的当天的序号
String batchcodeCache = redisCache.getCacheObject(wd);
if (batchcodeCache==null){
batchcodeCache="0001";
}else {
batchcodeCache = String.format("%04d", (Integer.valueOf(batchcodeCache) + 1));
}
//假定该仓库第一次入库,则batch = D1012204250001
batch = wd+batchcodeCache;
// key = D101220425,value = 0001
redisCache.setCacheObject(wd,batchcodeCache);
// key = D10122042560037679,value = D1012204250001
redisCache.setCacheObject(wdm,batch);
}
return batch;
}
这里说一下String.format(“%04d”, Object args)方法,这个方法是数字前面补0(加密常用)
比如:String.format (“%04d”, 99) ,则输出 0099
详细的方法介绍----->String.format()的用法