加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2017-01-03 14:50:03)
标签:

金蝶

代码

金蝶软件

金蝶问题

金蝶学习网

分类: 金蝶
金蝶软件使用过程中,提示名称代码在系统中已被使用,FX 列在多次出现的列名中无效...的解决方法
 
解决方法:  
第一,常见原因是核算项目横表中核算项目个数与 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) 


以上内容,转自金蝶学习网!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有