【业务场景】
多组织,A组织为总公司,B为生产组织,业务单据7月下达当月无领料入库,8月入库。8月时发现单据生产组织选错,导致单据生产车间内码也错了。这时7月已成本核算完成,并结账。手工修改后台字段,把组织、生产车间改对。
【问题说明】
8月核算时,自动生成作业数量维护时报错。
合法性检查报告中提示:
ORA-00001: unique constraint (LTTC.IDX_CB_PROORDERDIME) violated
【问题分析】
检查数据库中索引IDX_CB_PROORDERDIME
大致分析为插入到T_CB_PROORDERDIME表时,FPROORDERTYPE, FPRODUCTNO, FCOSTCENTERID, FBILLENTRYID, FPRODUCTID这几个字段已存在重复值。
2.通过查找服务器日志,找到报错堆栈:
中间省略反编译代码、翻找代码过程……
最终定位到下面这段代码:
大致思路是,生成DIME表数据时,查找业务单据与T_CB_PROORDERDIME的差集,然后再插入到T_CB_PROORDERDIME中。
但是他去重的时候是拿FPRODUCTID、FPRODUCTNO、FBILLENTRYID、FWORKSHOPID这四个字段去关联,
而T_CB_PROORDERDIME索引中是FPROORDERTYPE, FPRODUCTNO, FCOSTCENTERID, FBILLENTRYID, FPRODUCTID 这几个字段。
接前文,8月手工修改的是生产车间(FWORKSHOPID)字段,
这不掉bug了?!去重没去掉,插入就报错。
【解决方案】
删除做错单据,重新来过。(最稳妥保险)
把数据改回去,然后再重新走一遍核算流程。(后悔药系列)
修改后台所有关联单据:投入产量归集、入库单、在产品盘点、费用分配(指定费用的)。。。(不用动业务单据,但是可能有无穷后患)
删除7月生成错误的T_CB_PROORDERDIME表中错误数据,上月没生产,无投入,无入库,就放弃掉上个月的,只处理这期数据。(自己取舍)
最后敬告业务员,以后再做错就自己删了单据重新做,我才不给自己挖坑。