后台批改,引发的血案原创
金蝶云社区-拿了你的糖身份
拿了你的糖
7人赞赏了该文章 1,091次浏览 未经作者许可,禁止转载编辑于2021年09月04日 09:42:50

 【业务场景】

多组织,A组织为总公司,B为生产组织,业务单据7月下达当月无领料入库,8月入库。8月时发现单据生产组织选错,导致单据生产车间内码也错了。这时7月已成本核算完成,并结账。手工修改后台字段,把组织、生产车间改对。

【问题说明】

8月核算时,自动生成作业数量维护时报错。

image.png

image.png

合法性检查报告中提示:

ORA-00001: unique constraint (LTTC.IDX_CB_PROORDERDIME) violated

image.png

【问题分析】

  1. 检查数据库中索引IDX_CB_PROORDERDIME

    image.png

大致分析为插入到T_CB_PROORDERDIME表时,FPROORDERTYPE, FPRODUCTNO, FCOSTCENTERID, FBILLENTRYID, FPRODUCTID这几个字段已存在重复值。

2.通过查找服务器日志,找到报错堆栈:

image.png

中间省略反编译代码、翻找代码过程……

最终定位到下面这段代码:

image.png

大致思路是,生成DIME表数据时,查找业务单据与T_CB_PROORDERDIME的差集,然后再插入到T_CB_PROORDERDIME中。

但是他去重的时候是拿FPRODUCTID、FPRODUCTNO、FBILLENTRYID、FWORKSHOPID这四个字段去关联,

image.png

T_CB_PROORDERDIME索引中是FPROORDERTYPE, FPRODUCTNO, FCOSTCENTERID, FBILLENTRYID, FPRODUCTID 这几个字段。

接前文,8月手工修改的是生产车间(FWORKSHOPID)字段,

111.gif

这不掉bug了?!去重没去掉,插入就报错。

【解决方案】

  1. 删除做错单据,重新来过。(最稳妥保险)

  2. 把数据改回去,然后再重新走一遍核算流程。(后悔药系列)

  3. 修改后台所有关联单据:投入产量归集、入库单、在产品盘点、费用分配(指定费用的)。。。(不用动业务单据,但是可能有无穷后患)

  4. 删除7月生成错误的T_CB_PROORDERDIME表中错误数据,上月没生产,无投入,无入库,就放弃掉上个月的,只处理这期数据。(自己取舍)

image.png

最后敬告业务员,以后再做错就自己删了单据重新做,我才不给自己挖坑。


赞 7