用友软件中最大单据号及常见问题解决方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在平常处理的问题中,经常会碰到诸如:单据保存时提示“违反了primary key 约束'****'不能在对象'***'中插入重复键。新增单据保存失败”的问题。
北京可为分析这种错误主要有两个原因:
1、系统库ufsystem中ua_identity表存在重复的记录;
2、Ufsystem中ua_identity表的ifather、ichildid值小于data库中相关联主子表的
最大id值。
那么对于第一种情况,解决办法很简单,删除多余的记录。但是该删哪一条呢?我们必须找到对应单据的最大ID,才可判断哪一条是多余的;
第二种情况,新增的单据在data库中是什么表?对应的在系统库中ua_identity表中字段cvouchtype是什么?相对应Id又是什么呢?
通过做新的单据找规律,下面我总结出了各种业务单据在系统库和data库中相关联的表和字段。
注:对应单据名称为我们新增单据的名称,cvouchtype为系统库中ua_identity表对应单据类型字段,ua_identity表中ifatherid对应关联表主表中ID标识,ichildid 对应关联表子表中ID标识。
这样我们从cvouchtype判断是什么业务单据,然后到data库中找到相对应单据的主子表,找到其最大的俩ID,与ua_identity表中ifatherid、ichildid比较,保证ifatherid、ichildid大于等于关联data库中关键ID值即可。
举一个实例,问题现象如下图:
我们查询关联的rdrecord/s表中记录,找其最大ID值,参考语句如下:
use UFDATA_883_2008
select max(autoid) from rdrecords
select max(id) from rdrecord
这时我们再看系统库中identity表中记录:
use ufsystem
select * from ua_identity where cacc_id='883' and cvouchtype='rd'
我们发现系统库中ifatherid和ichildid小于data库中的,参考以下语句进行调整
即可:
update ua_identity set ifatherid=(select max(id) from ufdata_883_2008..rdrecord where cacc_id='883')
update ua_identity set ichildid=(select max(autoid) from ufdata_883_2008..rdrecords where cacc_id='883')
其中UFDATA_883_2008为问题帐套数据库名称。