中途启用批次管理方案 一、 业务场景 有些存货在启用之初没有进行批次管理,随着管理的细化,在使用一段时间后,需要启用批次管理.因为标准产品控制存货档案一旦被引用后,就不能再编辑勾选批次管理的属性。为实现该场景,特提供如下方案。 二、 方案应用前提 1、 方案适用于中途启用批次管理属性,而非批次核算。 2、 方案执行过程中不能执行相关影响存货批次管理的操作。 3、 方案允许存在流程中的销售或采购的业务单据。 4、 方案暂不适用于做过数据卸载的项目。 5、 执行方案之前注意确定库存现存量、收发存汇总表等数据的准确性. 6、 因批次管理的存货,在销售订单、采购订单、调拨订单、库存调整(转库单、形态转换单等)等单据中是可以不录入批次号的,所以方案没有考虑销售、采购、调拨、库存调整等相关单据的处理。基于此也没有对可用量的预计入和预计出进行处理。 三、 具体方案 1、 将存货管理方案的批次管理属性设置为"是”,使用SQL脚本处理,涉及表bd_invmandoc; 为该存货默认一批次号,用来补充之前的出入库记录上的批次号,例如为20140911; 3、 新增批次号档案,新增该存货的默认批次号档案,前台手工录入;登录对应公司,打开批次号档案节点,手工增加;也可通过SQL脚本处理; 4、 更新该存货库存管理所有出入库单据的批次号,更新为默认批次号20140911,使用SQL脚本处理,涉及表ic_general_b; 5、 更新该存货库存管理相关月结表纪录的批次号,更新为默认批次号20140911,使用SQL脚本处理,涉及表ic_month_hand、ic_month_handsign、ic_month_record、ic_month_recordsign; 6、 更新该存货库存管理现存量表纪录的批次号,更新为默认批次号20140911,使用SQL脚本处理,涉及表ic_onhandnum、ic_onhandnum_b; 7、 更新该存货存货核算所有出入库单单据的批次号,更新为默认批次号20140911,使用SQL脚本处理,涉及表ia_bill_b; 四、 存在的风险 1、 方案绝大部分都是通过SQL脚本处理,可能会存在遗漏或者错误的情况,需要大量数据验证. 2、 因方案涉及库存和存货核算模块所有相关明细单据,会影响所有相关报表查询,涉及面很大. 3、 SQL脚本会涉及所有历史出入库单据,如果数据量很大,执行效率也需要测试评估. 4、 脚本更新后,如果出现现存量不正确,可通过调整现存量的功能进行修复。 5、 脚本更新后,如果出现收发存汇总表不正确,可通过调整月结数据进行修复。 五、 建议的方案执行过程 1、 搭建测试环境 2、 2、 在测试环境上执行方案 3、 记录方案执行过程和执行时间,以预估生产环境的执行情况 4、 在测试环境上验证数据 5、 安排生产环境停机时间,如果执行时间很长,可考虑分多次进行执行,每次调整部分存货 6、 备份最新的生产环境 7、 在生产环境上执行方案 8、 在生产环境上验证数据 六、 相关脚本 ———-———--—---—-——-——----———---———-—-—--——-—-—-—-—------——-—--—-----——-----—- ——查询相应公司主键—— select pk_corp from bd_corp where unitcode = ’公司编码’; --查询存货基本档案主键—- select bd。pk_invbasdoc from bd_invbasdoc bd where bd.invcode = ’存货编码’; —-查询存货管理档案主键-— select bm。pk_invmandoc from bd_invmandoc bm where bm。pk_invbasdoc = ’存货基本档案主键' and bm。pk_corp = '公司主键'; —-———————---—------—--——-——--—--——-——--——-——————-——-—---——-—-—-—--———-—---——-— ——更新存货管理档案批次管理属性,把非批次管理更新为批次管理—- update bd_invmandoc bm set bm.wholemanaflag = ’Y' where bm.pk_invmandoc = '存货管理档案主键’ and nvl(bm.wholemanaflag, ’N’) = ’N'; —-插入默认批次号档案-- insert into scm_batchcode (bseal, dr, pk_batchcode, pk_invbasdoc, tbatchtime, ts, vbatchcode) values (’N', 0, -—主键20位,不重复即可-- ’0001AA00000000000001', --存货基本档案主键—- '存货基本档案主键’, '2014-09-01 00:00:00’, ’2014—09-01 00:00:00', --默认批次号—- '20140911'); -—更新该存货库存管理所有出入库单据的批次号,更新为默认批次号20140911—— update ic_general_b icb set icb。vbatchcode = ’20140911’ where icb。cinventoryid = '存货管理档案主键’ and icb。pk_corp = ’公司主键’ and (nvl(icb.noutnum, 0.0) <> 0.0 or nvl(icb.ninnum, 0.0) 〈〉 0。0) and icb.dr = 0; —-更新该存货库存管理现存量表纪录的批次号,更新为默认批次号20140911—- update ic_month_hand icm1 set icm1.vbatchcode = ’20140911' where icm1。cinventoryid = '存货管理档案主键’ and icm1.pk_corp = '公司主键’ and icm1.dr = 0; update ic_month_handsign icm2 set icm2.vbatchcode = ’20140911’ where icm2.cinventoryid = '存货管理档案主键’ and icm2。pk_corp = ’公司主键' and icm2。dr = 0; update ic_month_record icm3 set icm3.vbatchcode = ’20140911’ where icm3.cinventoryid = '存货管理档案主键’ and icm3。pk_corp = '公司主键’ and icm3。dr = 0; update ic_month_recordsign icm4 set icm4。vbatchcode = '20140911' where icm4.cinventoryid = '存货管理档案主键' and icm4。pk_corp = '公司主键’ and icm4。dr = 0; ——更新该存货库存管理现存量表纪录的批次号,更新为默认批次号20140911-- update ic_onhandnum icnumh set icnumh.vlot = '20140911’ where icnumh。cinventoryid = '存货管理档案主键’ and icnumh.pk_corp = '公司主键'; update ic_onhandnum_b icnumb set icnumb.vlotb = ’20140911' where icnumb.cinventoryidb = '存货管理档案主键' and icnumb.pk_corp = '公司主键'; -—更新该存货存货核算所有出入库单单据的批次号,更新为默认批次号20140911-- update ia_bill_b iab set iab。vbatch = '20140911' where iab.cinventoryid = '存货管理档案主键' and iab。pk_corp = '公司主键' and iab。dr = 0; ---—-----—----——--——--—-—---—--—-———-——--—-—---————--—--——----——-—---——---——-—- 本文来源:https://www.wddqw.com/doc/05b73f9fbad528ea81c758f5f61fb7360a4c2b49.html