马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
×
在平常处理的问题中,经常会碰到诸如:单据保存时提示“违反了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值即可。 对应单据名称
| cvouchtype
| data库中相关联主子表
| 相关联主子表ID字段标识
| 采购请购单
| PuApp
| PU_AppVouch/s
| ID/Autoid
| 采购订单
| Pomain
| PO_Pomain/PO_Podetails
| POID/ID
| 采购到货单
| PuArrival
| PU_ArrivalVouch/s
| ID/autoid
| 采购入库单
| rd
| Rdrecord/s
| ID/Autoid
| 采购发票
| Purbill
| PurBillVouch/s
| PBVID/ID
| 销售报价单
| QuoMain
| SA_QuoMain/ SA_QuoDetails
| ID/Autoid
| 销售订单
| Somain
| SO_SOMain/SO_SODetails
| ID/Autoid
| 销售发(退)货单
| Dispatch
| DispatchList/s
| DLID/Autoid
| 销售发票
| Billvouch
| SaleBillVouch/s
| SBVID/Autoid
| 委托代销发货(退)单
| Dispatch
| DispatchList/s
| DLID/Autoid
| 委托代销结算单
| SettleVouch
| SA_SettleVouch/s
| ID/Autoid
| 委托代销调整单
| Dispatch
| DispatchList/s
| DLID/Autoid
| 销售调拨单(红、蓝)
| Billvouch
| SaleBillVouch/s
| SBVID/Autoid
| 销售零售日报(红、蓝)
| Billvouch
| SaleBillVouch/s
| SBVID/Autoid
| 代垫费用单
| Expense
| ExpenseVouch/s
| ID/Autoid
| 销售支出单
| Salepay
| SalePayVouch/s
| ID/autoid
| 委外发票
| Wwpurbill
| OM_PurBillVouch/s
| PBVID/ID
| 产成品入库单
| rd
| Rdrecord/s
| ID/Autoid
| 其他入库单
| rd
| Rdrecord/s
| ID/Autoid
| 材料出库单
| rd
| Rdrecord/s
| ID/Autoid
| 其他出库单
| rd
| Rdrecord/s
| ID/Autoid
| 调拨单
| td
| TransVouch/s
| ID/Autoid
| 盘点单
| ch
| CheckVouch/s
| ID/autoid
| 限额领料单
| ma
| MatchVouch/s
| ID/autoid
| 不合格品记录单
| sc
| ScrapVouch/ScrapVouchs
| ID/Autoid
| 不合格品处理单
| sc
| ScrapVouch/ScrapVouchs
| ID/Autoid
| 货位调整单
| ad
| AdjustPVouch/s
| ID/Autoid
| 应收应付单
| sk
| ap_closebill/s
| IID/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为问题帐套数据库名称。 |