中途启用批次管理方案
一、业务场景
有些存货在启用之初没有进行批次管理,随着管理的细化,在使用一段时间后,需要启用批次管理。
因为标准产品控制存货档案一旦被引用后,就不能再编辑勾选批次管理的属性。
为实现该场景,特提供如下方案。
二、方案应用前提
1、方案适用于中途启用批次管理属性,而非批次核算。
2、方案执行过程中不能执行相关影响存货批次管理的操作。
3、方案允许存在流程中的销售或采购的业务单据。
4、方案暂不适用于做过数据卸载的项目。
5、执行方案之前注意确定库存现存量、收发存汇总表等数据的准确性。
6、因批次管理的存货,在销售订单、采购订单、调拨订单、库存调整(转库单、形
态转换单等)等单据中是可以不录入批次号的,所以方案没有考虑销售、采购、
调拨、库存调整等相关单据的处理。
基于此也没有对可用量的预计入和预计出
进行处理。
三、具体方案
1、将存货管理方案的批次管理属性设置为”是”,使用SQL脚本处理,涉及表
bd_invmandoc;
2、为该存货默认一批次号,用来补充之前的出入库记录上的批次号,例如为
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、在测试环境上执行方案
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.0or 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;
-------------------------------------------------------------------------------。