金蝶提示KIS金蝶名称代码在系统中已被使用的解决方法

[全站通告] 想快速节省您的时间并可接受付费的朋友,可扫右边二维码加博主微信-非诚勿扰!

自己记录一下,处理客户可以参考一下,

反正记得执行语句前一定要备份账套!

解决方法:

第一,常见原因是核算项目横表中核算项目个数与 F 列不对应导致的,可通过以下语

句进行修复(直接在查询分析器针对问题账套执行即可),

select * from t_itemdetail

exec sp_cleanitemdetailvGO

update a set a.fdetailcount=b.Fcount

from  t_itemdetail  a  join  (select  Fdetailid,count(*)  as  Fcount  from  t_itemdetailv

where fitemid=-1 group by Fdetailid) b

on a.fdetailid=b.fdetailid  where a.fdetailcount<>b.Fcount

说明:如果已有部分凭证进行了过账,请先通过期末处理功能反结账到上期,

再执行以上 SQL 语句,再进行凭证过账、结账。

 

第二,如果客户环境安装了 MSDE,那么请将以上SQL语句保存为*.sql 的文件,通过

账套管理执行,操作路径:账套管理->选中问题账套->操作菜单,执行命

令->选择*.sql 文件->执行即可。

1、凭证过账时系统提示:名称或代码在系统中已经被使用

错误代码:3604(E14H)

Source :Microsoft OLE DB Provider for SQL Server

Detail :在结果列的列表中多次出现列名 ‘F8′

执行语句校正即可

update d set d.fdetailcount=v.fcount

from t_ItemDetail d,

(select fdetailid,count(*) fcount from t_ItemDetailv where fitemid=-1 group by fdetailid ) v

where d.fdetailid=v.fdetailid

不同的账套,可能会提示不同的列名,如F1等,请变通执行

错误原因:核算项目横表t_itemdetail的核算项目类别数目和科目挂的核算项目数目不一致

2、在查询科目余额表并选择包括核算项目时,系统提示:

名称或代码在系统中已被使用

错误代码:3604(E14H)

Fdetail:列名’F3001’无效

补回此列,如果有数据发生还要补回数据

If Not Exists(Select c.Name from syscolumns c,sysobjects o

where c.Id=o.Id and c.name=’F3001′ and o.name=’t_ItemDetail’)

Begin

Alter Table t_ItemDetail Add F3001 int not null default(0)

Create Index ix_ItemDetail_3001 On t_ItemDetail(F3001)

END

如果还存在其他列名无效,参照修改上述SQL中的列名后,进行添加。

错误原因:在t_itemdetail表中缺少列F3001

3、录入凭证时提示错误代码:3604(E14H), Source :Microsoft OLE DB Provider for SQL Server Detail :分布式事务已完成。请将此会话登记到新事务或 NULL 事务中

此问题是由凭证最大内码号超过2147483647造成的,请参考以下SQL处理

select distinct(fvoucherid) AS Foldid,IDENTITY(int,1,1) as fnewid into #tmpa from t_voucher—-建立新旧凭证内码对应关系

update a set a.fvoucherid=b.fnewid from t_voucher a , #tmpa b where a.fvoucherid=b.folded—–用新内码替换旧内码

update a set a.fvoucherid=b.fnewid from t_voucherentry a , #tmpa b where a.fvoucherid=b.foldid

update t_identity set fnext=(select max(fvoucherid) from t_voucher)+1 where fname=’t_voucher’

凭证无法过账、账薄报表无法查询、无法结转损益结转损益之后无法过帐或仍有余额,提示:在结果列中多次出现F1,名称或代码已存在等

一般是fdetailcount数目不对或者相同的核算项目组合出现重复,对于错误fdetailcount,首先要执行如下语句进行更新:

exec sp_cleanitemdetailv–横表生成纵表的存储结构

update a set a.fdetailcount=b.Fcount from t_itemdetail a join (select Fdetailid,count(Fitemid) Fcount from t_itemdetailv where fitemid<>0 group by Fdetailid) b on a.fdetailid=b.fdetailid–更新fdetailcount

exec sp_cleanitemdetailv–重新生成纵表 作了以上更新后发现表中还存在相同组合的重复记录,这是不允许的:

而我们只需要保留一个fdetailid即可,此时我们取最小的fdetailid,

执行如下语句更新科目表:

update t_account set Fdetailid =(select min(fdetailid) from t_itemdetail where fdetailid in (select Fdetailid from t_itemdetailv where fitemid=-1) and Fdetailcount=1 and F2=-1 ) where Fdetailid in (select (fdetailid) from t_itemdetail where fdetailid in (select Fdetailid from t_itemdetailv where fitemid=-1) and Fdetailcount=1 and F2=-1 )

同时我们还要删除核算项目横表中的多余记录,执行如下语句:

delete from t_itemdetail where Fdetailid in(select (fdetailid) from t_itemdetail where fdetailid in (select Fdetailid from t_itemdetailv where fitemid=-1) and Fdetailcount=1 and F2=-1 ) and Fdetailid <>(select min(fdetailid) from t_itemdetail where fdetailid in (select Fdetailid from t_itemdetailv where fitemid=-1)and Fdetailcount=1 and F2=-1 ) exec sp_cleanitemdetailv–重新生成纵表

另外还要查看各余额表中有没有非法的fdetailid,即不在核算项目横纵表中的,有的话则需要删除:

–查找科目余额表中有没有非法的fdetailid

select * from t_balance where fdetailid not in (select fdetailid from t_itemdetail)

–删除科目余额表中非法的fdetailid delete from t_balance where fdetailid not in (select fdetailid from t_itemdetail)

同理进行以下操作 查找数量余额表中有没有非法的fdetailid

select * from t_quantitybalance where fdetailid not in (select fdetailid from t_itemdetail)

删除数量余额表中非法的fdetailid

delete from t_quantitybalance where fdetailid not in (select fdetailid from t_itemdetail)

查找损益类科目实际发生额表中有没有非法的fdetailid

select * from t_profitandloss where fdetailid not in (select fdetailid from t_itemdetail)

删除损益类科目实际发生额表中有没有非法的fdetailid

delete from t_profitandloss where fdetailid not in (select fdetailid from t_itemdetail)

根据F列进行变通,可以通过下面的语句查查

select * from t_itemdetail where fdetailid in (select fdetailid from t_itemdetailv where fitemid=-1)

附类似问题

【现象】:
在财务期末结账时提示:
错误代码:3631(E2FH)
Source :Microsoft OLE DB Provider for SQL Server
Detail :违反了 PRIMARY KEY 约束 ‘pk_Balance’。
不能在对象 ‘t_Balance’ 中插入重复键。
能继续反结帐到以前期间,反结后也能继续结帐到本期,但从本期向下一期结账时系统仍然报以上的错误。

【分析】:
1、从提示的Detail可以看出,这是因为账套中存在错误的数据,从而导致如果结账的话将在数据库中产生重复的记录。
2、这种情况基本上都发生在余额表中保存了当前期间以后的数据。造成产生这样的数据的可能原因是曾经进行过期末结账,但是在结账过程中遇到意外错误造成程序无法将数据还原。
3、账套结账的原理:根据当期期末数据,形成下期的期初数据。那么在进行期末结账之前,在余额表中不应该存在当前期间以后的数据。
【处理】:
这种情况下的错误,一般需要使用SQL语句来处理。建议在备份账套的情况下,在查询分析器中选择正确的账套数据库实体后,执行以下SQL再结账。
go
declare @Fyear int,@Fperiod int
select @Fyear=fvalue from t_systemprofile where fkey=’currentyear’ and fcategory=’gl’
select @Fperiod=fvalue from t_systemprofile where fkey=’currentperiod’ and fcategory=’gl’
delete from t_balance where fyear*100+fperiod>@Fyear*100+@Fperiod
delete from t_profitandloss where fyear*100+fperiod>@Fyear*100+@Fperiod
delete from t_quantitybalance where fyear*100+fperiod>@Fyear*100+@Fperiod
go
注:这种错误的处理,同样适用于KIS商贸版、K/3账套    , 我自己测试  KIS 专业版也是通用的。

整理不易,可以右边打赏~

发表回复

加入本站VIP会员,海量资源免费查看下载

目前为止共有136位优秀的VIP会员加入! 立即加入!