1、中途启用批次管理方案一、 业务场景有些存货在启用之初没有进行批次管理,随着管理的细化,在使用一段时间后,需要启用批次管理。因为标准产品控制存货档案一旦被引用后,就不能再编辑勾选批次管理的属性.为实现该场景,特提供如下方案。二、 方案应用前提1、 方案适用于中途启用批次管理属性,而非批次核算.2、 方案执行过程中不能执行相关影响存货批次管理的操作.3、 方案允许存在流程中的销售或采购的业务单据。4、 方案暂不适用于做过数据卸载的项目。5、 执行方案之前注意确定库存现存量、收发存汇总表等数据的准确性。6、 因批次管理的存货,在销售订单、采购订单、调拨订单、库存调整(转库单、形态转换单等)等单据中是
2、可以不录入批次号的,所以方案没有考虑销售、采购、调拨、库存调整等相关单据的处理。基于此也没有对可用量的预计入和预计出进行处理。三、 具体方案1、 将存货管理方案的批次管理属性设置为是,使用SQL脚本处理,涉及表bd_invmandoc;2、 为该存货默认一批次号,用来补充之前的出入库记录上的批次号,例如为20140911;3、 新增批次号档案,新增该存货的默认批次号档案,前台手工录入;登录对应公司,打开批次号档案节点,手工增加;也可通过SQL脚本处理;4、 更新该存货库存管理所有出入库单据的批次号,更新为默认批次号20140911,使用SQL脚本处理,涉及表ic_general_b;5、 更新
3、该存货库存管理相关月结表纪录的批次号,更新为默认批次号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脚本处理,可能会存在遗漏或
4、者错误的情况,需要大量数据验证。2、 因方案涉及库存和存货核算模块所有相关明细单据,会影响所有相关报表查询,涉及面很大。3、 SQL脚本会涉及所有历史出入库单据,如果数据量很大,执行效率也需要测试评估。4、 脚本更新后,如果出现现存量不正确,可通过调整现存量的功能进行修复。5、 脚本更新后,如果出现收发存汇总表不正确,可通过调整月结数据进行修复。五、 建议的方案执行过程1、 搭建测试环境2、 在测试环境上执行方案3、 记录方案执行过程和执行时间,以预估生产环境的执行情况4、 在测试环境上验证数据5、 安排生产环境停机时间,如果执行时间很长,可考虑分多次进行执行,每次调整部分存货6、 备份最新的
5、生产环境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 = 公司主键;-更新存货管理档案批次管理属
6、性,把非批次管理更新为批次管理-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, -存货基本档案主键- 存货基本档案
7、主键, 20140901 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;-更新该存货库存管理现存量表
8、纪录的批次号,更新为默认批次号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 i
9、c_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
10、-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 = 公司主键;-更新该存货存货核算所有出入库单单据的批次号,更新为默认批次号20140911update ia_bill_b iab set iab。vbatch = 20140911 where iab。cinventoryid = 存货管理档案主键 and iab.pk_corp = 公司主键 and iab。dr = 0;-