#实践案例#启用批号的物料可以反启用吗?方案来了!!原创
金蝶云社区-叶落无声
叶落无声
28人赞赏了该文章 1,223次浏览 未经作者许可,禁止转载编辑于2022年12月08日 20:18:10
summary-icon摘要由AI智能服务提供

本文讨论了企业在使用批号管理业务时遇到的问题及解决方案。启用批号管理后,因操作复杂导致数据录入不及时、实物与系统批号不符等问题,增加仓库与财务工作量。为改善现状,决定去除批号管理,并通过SQL脚本清除与批号相关的所有数据,涵盖物料属性、出入库单据等多个环节。此方案减少工作量,提升数据及时性和工作效率,适用于广泛场景及误操作情况,但需注意操作需谨慎并备份数据。

1 业务背景

1.1业务场景

本案例基于启用批号业务场景而撰写,产品为旗舰版V7.0,在企业的实际业务中,有启用批号管理业务场景,但是在使用过程中,批号并没有给公司带来很大便捷性,反而给后续的仓库造成很大的工作量,比如启用批号,下推领料的时候,有时候由于未能及时入库,或者由于入库单未能及时审批,出库的批号是未知之数,因此不能选择或者随便填写,出库单也就无从选择批号。此种情况是最为常见并且仓库工作量投入大量精力,往往数据不能及时有效录入系统。


1.2客户痛点分析

帐套中去掉批号管理

本来物料启用批号的主要目的就是想要追溯来源,并且为后续订单质量进行追踪,方便分批进行成本计算。但是在实际的操作过程中,仓库的工作也做了,不但没有起到强大的管理作用,反而经常出现实物批号跟系统库存批号不符的情况,更有甚者,库存中某个批号为正数,某个批号为负数,数量刚好相反,如果物料的计价方法为分批认定法的话,给财务的工作也造成了很大的困扰,往往获取不到负结存料号的单价,存货核算也就结账不成功。给财务造成很大的工作量,往往在期末结账的时候,都在大量查找各种产品,的各种成本,严重延误出报表的时间

 

1.3客户诉求与期望

客户最大的期望是仓库数据及时稳定,同时财务可以正常快速结账。考虑再三,还是决定去掉物料中的批号管理,这样仓库的工作量也会小一些,财务结账也会更顺畅一些

 

2 解决方案

 2.1整体思路

根据客户实际的业务场景,在加上金蝶系统本身的功能,不在数据库中进行处理,系统中是根本不具有解决方案的,因此考虑到直接在数据库中清掉跟批号有关的所有数据,具体方案如下:


需要考虑的点

1)物料属性修改:去掉所有物料的批号控制设置;

2)出入库单据修改:清除所有出入库单据的批号;

3)生产投料资料批号清除;

4)生产投料变更单批号清除;

(5)生产任务单批号清除;

(6)生产任务变更单批号清除;

(7)生产物料报废/补料单批号清除;

(8)采购销售发票批号清除;

(9)初始化库存单据批号清除;

(10)库存余额数据批号清除和数据处理;

(11)即时库存重算:前端系统重算【校对及时库存】。

  

关键步骤及效果展示 

步骤1:物料属性修改:去掉所有物料的批号控制设置;

update t_icitem set FBatchManager = 0  where FBatchManager = 1

如果只是某一个或者部分料号误操作,启用了批号,则直接在最后增加where语句即可

 

步骤2:出入库单据修改:清除所有出入库单据的批号;

update ICStockbillEntry set FBatchNo = '' where isnull(FBatchNo,'') <> ''

如果只是某一个或者部分料号误操作,启用了批号,在入库的时候提示需要输入序列号,还未入库的情况下,则不需要处理此步骤

 

步骤3:生产投料资料批号清除

update PPBOMEntry set FBatchNo = '' where isnull(FBatchNo,'') <> '' 

 

步骤4:生产投料变更单批号清除

update PPBomChangeEntry set FBatchNo = '' where isnull(FBatchNo,'') <> ''

 

步骤5:生产任务单批号清除;

update ICMO set FGMPBatchNo = '' where isnull(FGMPBatchNo,'') <> ''

 

步骤6生产任务变更单批号清除;

 update ICMOChangeEntry set FBatchNo = '' where isnull(FBatchNo,'') <> '' 

 

步骤7生产物料报废/补料单批号清除;

update ICItemScrapEntry set FBatchNo = '' where isnull(FBatchNo,'') <> '' 

 

步骤8采购销售发票批号清除;

update ICPurchaseEntry set FBatchNo = '' where isnull(FBatchNo,'') <> ''

update ICSaleEntry set FBatchNo = '' where isnull(FBatchNo,'') <> ''

 

步骤9初始化库存单据批号清除;

第一步删掉期初数据并且备份数据,参考如下:

select a.* into ICInvBal_bak01 from ICInvBal a,(

select FYear,FPeriod,FStockID,FItemID

from ICInvBal

group by FYear,FPeriod,FStockID,FItemID

having count(1) > 1 ) b

where a.FYear = b.FYear and a.FPeriod = b.FPeriod and a.FStockID = b.FStockID and a.FItemID = b.FItemID

 

delete a 

from ICInvBal a,ICInvBal_bak01 b

where a.FYear = b.FYear and a.FPeriod = b.FPeriod and a.FStockID = b.FStockID and a.FItemID = b.FItemID

 

insert into ICInvBal(FBrNo,FYear,FPeriod,FStockID,FItemID,FBatchNo,FBegQty,FReceive,FSend,FYtdReceive,FYtdSend,FEndQty,FBegBal,FDebit,FCredit,

FYtdDebit,FYtdCredit,FEndBal,FBegDiff,FReceiveDiff,FSendDiff,FEndDiff,FBillInterID,FStockPlaceID,FKFPeriod,FKFDate,

FYtdReceiveDiff,FYtdSendDiff,FSecBegQty,FSecReceive,FSecSend,FSecYtdReceive,FSecYtdSend,FSecEndQty,FAuxPropID,FStockInDate,

FMTONo)

select 

'0',FYear,FPeriod,FStockID,FItemID,'',sum(FBegQty),sum(FReceive),sum(FSend),sum(FYtdReceive),sum(FYtdSend),sum(FEndQty),sum(FBegBal),sum(FDebit),sum(FCredit),

sum(FYtdDebit),sum(FYtdCredit),sum(FEndBal),0,0,0,0,0,0,0,'',

0,0,0,0,0,0,0,0,0,'',''

from ICInvBal_bak01

group by FYear,FPeriod,FStockID,FItemID

第二部更新数据:

update ICInvBal set FBatchNo = '' where isnull(FBatchNo,'') <> ''  

 

步骤10库存余额数据批号清除和数据处理;

第一步删掉期初数据并且备份数据,参考如下:

select a.* into icbal_bak01 from icbal a,(

select FYear,FPeriod,FItemID,FBillInterID,FStockGroupID

from icbal

group by FYear,FPeriod,FItemID,FBillInterID,FStockGroupID

having count(1) > 1 ) b

where a.FYear = b.FYear and a.FPeriod = b.FPeriod and a.FItemID = b.FItemID and a.FBillInterID = b.FBillInterID and a.FStockGroupID = b.FStockGroupID

 

delete a 

from icbal a,icbal_bak01 b

where a.FYear = b.FYear and a.FPeriod = b.FPeriod and a.FItemID = b.FItemID and a.FBillInterID = b.FBillInterID and a.FStockGroupID = b.FStockGroupID

 

insert into icbal(FBrNo,FYear,FPeriod,FItemID,FBatchNo,FBegQty,FReceive,FSend,FYtdReceive,FYtdSend,FEndQty,FBegBal,FDebit,FCredit,FYtdDebit,

FYtdCredit,FEndBal ,FBegDiff,FReceiveDiff,FSendDiff,FEndDiff,FBillInterID,FEntryID,FStockGroupID,FYtdReceiveDiff,FYtdSendDiff,

FSecBegQty,FSecReceive,FSecSend,FSecYtdReceive,FSecYtdSend,FSecEndQty,FStockInDate,FAuxPropID )

select 

'0',FYear,FPeriod,FItemID,'',sum(FBegQty),sum(FReceive),sum(FSend),0,0,sum(FEndQty),sum(FBegBal),sum(FDebit),sum(FCredit),0,

0,sum(FEndBal) ,0,0,0,0,FBillInterID,0,FStockGroupID,0,0,

0,0,0,0,0,0,'',0  

from icbal_bak01

group by FYear,FPeriod,FItemID,FBillInterID,FStockGroupID

第二部更新语句:

update icbal set FBatchNo = '' where isnull(FBatchNo,'') <> '' 

 

步骤11:即时库存重算:前端系统重算【校对及时库存】

select FBatchNo,* from ICInventory  where isnull(FBatchNo,'') <> '' 

--前端系统重算【校对及时库存】

 

4 方案的可推广价值

1、可适用范围广泛

对于启用批号管理的客户,由于前期调研信誓旦旦的启用批号,一旦实施起来,发现并不能严格按照系统进行操作执行,比如仓库出库批号为20221202001,但是到仓库怎么都找不到这个批号的产品,随便出库一批其他批号(20221202002)的产品,上述这种情况就是不按照系统执行,严格意义上来说,就是单跟货物不符。后续想要在取消批号的可以参考如上实践方法。

 

2工程人员建立料号误操作

对于一部分小微企业来说,建立料号可能不是专人负责,即使是专人负责,由于误操作,也有可能不小心勾选了启用批号管理,等到发现问题的时候,往往已经无法在进行处理,因此最简便的方法就是通过数据库脚本进行数据修复,此时发现问题的时候,往往没有进行入库操作,因此处理起来也相对来说简单,此时只需要处理前面第一步骤即可

 

3、保证数据的及时性,减少了仓库以及财务出错概率,提升了工作效率

物料没有启用批号的情况下,作为仓库人员来说,入库,出库变得容易操作,不需要录入批号,也不需要考虑批号,也不需要每批次进行查找,财务也变得顺畅,没有结账负结存的情况出现,大大提升了工作效率

 

注意事项

涉及到SQL脚本操作,没有撤销功能,因此需要慎重,一定要备份出来帐套,在测试环境下进行处理,然后执行完脚本后,要经过严格的测试,确保没有出现问题后在进行正式帐套的执行

 

 

 

相关资料

【批号实践案例】介绍


图标赞 28
28人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!