固定资产新增卡片保存失败案例用友软件股份有限公司张睿2010年6月21日具体问题情况:固定资产模块,在当月录入一张新增卡片的时候,保存报错,错误提示如下:由于网络冲突造成数据不能保存!(可能是资产编号重复,请确认后重新保存)下图就是新增的这张卡片,固定资产编号是自动带出的,编号为:02100010保存的时候报错,资产编号自动加1,确定后,卡片没有保存成功。错误如下图:错误既然提示可能是资产编号重复,那我们就进入卡片管理中查看,是否已经有卡片的资产编号为02100010,如下图所示,没有卡片的资产编号是02100010查看固定资产选项,固定资产编码方式是自动编码,按理说自动编码的方式应该不会有此问题,看来这个问题应该是数据库的问题,前台看不出来错误,需要在后台数据库中跟踪在事件探查器中跟踪,在增加卡片的时候,软件执行如下语句:SELECTtop1sAssetNumFROMfa_cardswheresAssetNumlikeN'021_____'ORDERBYsAssetNumDESC该语句的作用是,过滤出固定资产卡片表fa_Cards中该类别(类别编号为021)固定资产编号的最大值,将该最大值+1,自动带出为新增卡片的固定资产编号,即02100009+1=02100010在保存卡片的时候,跟踪到两条insertinto语句,一条是往fa_Cards表中插入记录,另一条是往fa_DeprTransactions表中插入记录往fa_Cards表中插入记录的语句执行正常,往fa_DeprTransactions表中插入记录的语句执行错误,提示:不能在具有唯一索引'sDeprAssetNum'的对象'dbo.fa_DeprTransactions'中插入重复键的行。语句已终止。查看数据字典,fa_DeprTransactions是固定资产折旧数据表,sDeprAssetNum字段是固定资产编码,查看该表发现固定资产编码的确已经存在02100010的编号了查看fa_Cards表,sAssetNum字段是固定资产编码,有很多卡片的固定资产编码和fa_DeprTransactions表不一致执行如下语句,可以过滤出两个表不一致的卡片编号:selecta.scardnum,a.sassetnum,b.scardnum,b.sdeprassetnumfromfa_cardsajoinfa_deprtransactionsbona.scardnum=b.scardnumwherea.sassetnum<>b.sdeprassetnum根据过滤的结果,把相应卡片的fa_DeprTransactions表的sDeprAssetNum字段修改成和fa_Cards表的sAssetNum字段一致,这样就不会有问题了。执行如下语句,可以把两个表的固定资产编号更新为一致:updatefa_deprtransactionssetsdeprassetnum=a.sassetnumfromfa_cardsajoinfa_deprtransactionsbona.scardnum=b.scardnum正常情况下这两个表的固定资产编号应该完全一致才对,可能是有的时候通过一些接口工具导入的卡片,会出现这种情况。