科目父级内码错误修复原创
金蝶云社区-i求知若渴
i求知若渴
12人赞赏了该文章 1,290次浏览 未经作者许可,禁止转载编辑于2020年06月11日 14:17:03

偶尔会在账套中发现,科目(t_bd_account)的父级内码(fparentid)与实际情况不符,这个时候需要重新获取到正确的父级内码并加以更新。当需要批量修改的时候,出于安全性考虑,要求修改科目父级内码的SQL的逻辑与实际科目的内码判断的逻辑是等价的。另外,科目是否使用管控的情况也要区分开来。

在没有使用科目管控的情况下,我们通过下面的逻辑去确定科目A的内码:

1、科目A匹配父级的范围为科目A所在的科目表

2、科目A的父级编码,满足【科目A编码.】的格式

3、科目A的层级=科目A的父级层级+1

以上可以准确找到科目A的父级,因此批量修改的脚步如下:

查询:

 select a.FPARENTID, b.FACCTID,a.facctid,a.fnumber,b.fnumber, a.FACCTTBLID

 from  T_BD_ACCOUNT a join T_BD_ACCOUNT b  on a.FACCTTBLID=b.FACCTTBLID and SUBSTRING(a.FNUMBER,1,LEN(b.fnumber))=b.FNUMBER

 and SUBSTRING(a.FNUMBER,LEN(b.fnumber)+1,1)='.' and a.FLEVEL=b.FLEVEL+1 

 join T_BD_ACCOUNTTABLE c on a.FACCTTBLID=c.FACCTTABLEID and c.FISENABLEDIST=0

 where   a.FPARENTID<>b.FACCTID 

修改:

 update a set a.FPARENTID=b.FACCTID 

 from  T_BD_ACCOUNT a join T_BD_ACCOUNT b  on a.FACCTTBLID=b.FACCTTBLID and SUBSTRING(a.FNUMBER,1,LEN(b.fnumber))=b.FNUMBER

 and SUBSTRING(a.FNUMBER,LEN(b.fnumber)+1,1)='.' and a.FLEVEL=b.FLEVEL+1 

 join T_BD_ACCOUNTTABLE c on a.FACCTTBLID=c.FACCTTABLEID and c.FISENABLEDIST=0

 where   a.FPARENTID<>b.FACCTID 

科目启用管控的情况下,同一个科目表会出现编码重复,科目根据使用组织隔离,因此,匹配科目A的父级需要添加——科目A的使用组织和父级的使用组织相同的条件。因此批量修改的脚本如下:

查询:

 select a.FPARENTID, b.FACCTID,a.facctid,a.fnumber,b.fnumber, a.FACCTTBLID

 from  T_BD_ACCOUNT a join T_BD_ACCOUNT b  on a.FACCTTBLID=b.FACCTTBLID and SUBSTRING(a.FNUMBER,1,LEN(b.fnumber))=b.FNUMBER

 and SUBSTRING(a.FNUMBER,LEN(b.fnumber)+1,1)='.' and a.FLEVEL=b.FLEVEL+1 and a.FUSEORGID=b.FUSEORGID

 join T_BD_ACCOUNTTABLE c on a.FACCTTBLID=c.FACCTTABLEID and c.FISENABLEDIST=1

 where a.FPARENTID<>b.FACCTID

修改:

update a set a.FPARENTID=b.FACCTID 

 from  T_BD_ACCOUNT a join T_BD_ACCOUNT b  on a.FACCTTBLID=b.FACCTTBLID and SUBSTRING(a.FNUMBER,1,LEN(b.fnumber))=b.FNUMBER

 and SUBSTRING(a.FNUMBER,LEN(b.fnumber)+1,1)='.' and a.FLEVEL=b.FLEVEL+1 and a.FUSEORGID=b.FUSEORGID

 join T_BD_ACCOUNTTABLE c on a.FACCTTBLID=c.FACCTTABLEID and c.FISENABLEDIST=1

 where a.FPARENTID<>b.FACCTID

后台修改数据有一定的风险性,请务必测试测试。

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