NC65 库存管理销售出库单录入物料时显示现存量曾喜梅 zengxmc@yonyou.com1 引言出库单据填写实发数量保存时都会校验现存量,很多项目都希望在单据上直接显示现存量,这样既可以直接在单据上判断现存量是否足够,又能很直观的根据现存量进行出库,而不需要再另外查询现存量报表。2 应用场景及问题描述2.1 应用场景以销售出库单为例,表体增加字段“现存量”,录入物料后,该字段能自动带出现存量表内对应的值。2.2 问题描述销售出库单 4C,在单据模板初始化---元数据---出库单表体主键内没有现存量字段。尝 试 在 销 售 出 库 单 上 启 用 自 定 义 项 , 写 公 式 如 :getcolvalue(ic_onhandnum,nonhandnum,pk_onhanddim,getcolvalue2(ic_onhanddim,pk_onhanddim,cmaterialoid,cmaterialoid,pk_org,pk_org)); 在销售出库单表体的物料编码、批次号、货位等字段上都设置了编辑公式,由于现存量维度很多,按上述公式取出的值不准确,如下图:现存量内查询结果如下。而按照上述公式,自定义项 2 取出的值和现存量内的值不匹配。3 解决方案3.1 创建视图执行 sql 语句如下: create or replace view v_ic_onhandnum as select pk_org,cwarehouseid,cmaterialvid,sum(nonhandnum) nonhandnum from ic_onhanddim a,ic_onhandnum b where a.pk_onhanddim=b.pk_onhanddim and a.dr=0 and b.dr=0 group by pk_org,cwarehouseid,cmaterialvid; 3.2 增加现存量字段销售出库单单据模板增加自定义字段 itemkey 为 xcl,设置物料编码编辑公式为:xcl->getcolvaluemore("v_ic_onhandnum", "nonhandnum","pk_org",head.pk_org,"cwarehouseid",head.cwarehouseid,"cmaterialvid",cmaterialvid_ID);3.3 实现效果上述方案对于普通的物料是生效的。如下图现存量查询结果,普通仓结存数量为3。销售出库单编辑物料后 xcl 字段显示结果如下:如果仓库启用货位管理,xcl 字段取的是整个仓库的值。下图为现存量表查询结果,货位仓库,1 号货位结存主数量 1,2 号货位结存主数量 4. 销售出库单表头仓库选择货位仓库后,表体编辑物料后,xcl 字段取值结果为 5。3.4 特殊属性物料以仓库启用货位管理为例。如上图中,维护仓库后,表体 xcl 字段取的是整个仓库的存量,并没有根据货位细分。当单据表体的 xcl 字段取值需要根据货位更加细分时,创建视图的语句可进行相应的修改,举例如下:create or replace view vvv_ic_onhandnum as select pk_org,cwarehouseid,cmaterialvid,pk_batchcode,clocationid,sum(nonhandnum) nonhandnum from ic_onhanddim a,ic_onhandnum b where a.pk_onhanddim=b.pk_onhanddim and a.dr=0 and b.dr=0 group by pk_org,cwarehouseid,cmaterialvid,pk_batchcode,clocationid; 单据表体的编辑公式也要进行相应的修改,如:xcl->getcolvaluemore("vvv_ic_onhandnum", "nonhandnum","pk_org",head.pk_org,"cwarehouseid",head.cwarehouseid,"cmaterialvid",cmaterialvid_ID, "clocationid",clocationid_ID);业务流程:销售订单---发货单---销售出库单,在发货单表体维护发货仓库、货位,销售出库单表体编辑物料后,xcl 字段取值为该仓库,该货位下的值。Getcolvaluemore 公式内的字段(如:pk_batchcode 或 clocationid 等)需要销售出库单上游单据内已经维护了此字段的值,销售出库单参照过来后编辑物料编码才能按照相应的字段取值。另外,如果编辑公式使用 clocationid(货位),那么非货位的仓库做单据就无法取出值了。故编辑公式请根据各项目的实际情况使用。4 注意事项无