本文介绍了使用历史数据清理工具时可能遇到的四种异常问题及其解决方案。强调了在清理或结转前务必进行脚本调整的重要性,包括检查许可、安装补丁、处理报错、重新还原账套等。具体分享了账套结转截断数据、数据清理算术溢出、清理后网络冲突失效、清理后应收款数据不一致等问题的原因分析及解决方案,涉及SQL脚本的修改和调整。
根据使用历史数据清理工具进行清理或者结转所出现的异常问题,这里总结了四个需要涉及脚本调整的内容,请在清理或者结转前(前前前,重要的事说三遍)务必调整好:
注意:
1、目前WISE大部分版本的历史数据清理工具都需要正式许可才能使用;
2、调整前,请务必搜索对应版本是否有关于清理、结转的补丁,如果有必须要先安装好相关补丁);
3、以下内容适用于K/3 WISE产品可以使用历史数据清理工具的所有版本,KIS产品旗舰版的数据清理和账套结转功能也可以参考处理;
4、清理、结转的过程中如出现异常报错必须重新还原新的账套、调整好需要处理的数据再重新处理,不要使用已做过清理、结转的账套继续处理(也即只要是需要重新清理、结转,都需要重新恢复清理、结转前的账套进行处理);
5、以下说提及到的SQL文件路径在于:
目录盘:\Program Files\Kingdee\K3ERP\KDSYSTEM\KDCOM\SQLSRV,里面settleaccount.sql结尾的文件为清理调用的SQL文件,settleaccount_t.sql结尾的文件为结转调用的SQL文件;
分享1:账套结转提示“将截断字符串或二进制数据”(此报错不一定会出现提示)
分析原因:
采购发票【批号】FBatchNo、销售发票【备注】FNote 字段最大长度为255字节(称为前者)
期初发票明细表t_rp_begdataEntry 中【批号】FBatchNo、【摘要】FExplanation 字段最大长度为80字节(成为后者)
账套结转过程中将采购发票、销售发票中的数据向期初发票明细表中插入时,前者超过80字节的内容则不能写入后者中,系统会给出报错
解决方法:可在结转前执行以下语句增大期初发票明细表t_rp_begdataEntry 的【批号】FBatchNo、【摘要】FExplanation 字段长度:
alter table t_rp_begdataEntry alter column FExplanation varchar(255) null
alter table t_rp_begdataEntry alter column fbatchno varchar(255) null
分享2:数据清理时提示“将 expression 转换为数据类型 int 时出现算术溢出错误”
分析原因:
涉及报错的是文件“K3_V10.3_SCM_SettleAccount”里面的语句:
SELECT b1.FClassTypeID, b1.FID , SUM(ISNULL(a1.FICMOInterID,0)) AS FICMOInterID
FROM PPBOMChangeEntry a1
INNER JOIN PPBOMChange b1 ON b1.FClassTypeID=1002502 AND b1.FID=a1.FID
GROUP BY b1.FClassTypeID,b1.FID
FICMOInterID为INT类型,范围为-2147483648到2147483647,如果SUM(ISNULL(a1.FICMOInterID,0)) 超过此范围则会提示溢出报错。该文件中有多个脚本包含SUM(ISNULL(a1.FICMOInterID,0)) ,所以全部需要做调整。
建议方法:
需要在清理前将文件K3_V10.3_SCM_SettleAccount里面所有(所有、所有、所有)的SUM(ISNULL(a1.FICMOInterID,0))都改为SUM(ISNULL(CONVERT(bigint,a1.FICMOInterID),0))
如果是使用结转功能,同样地可以在K3_V10.3_SCM_SettleAccount_t中做上述一样的调整。
分享3、使用历史数据清理工具之后网络冲突失效
解决方法:将K3_V10.4_GL_SettleAccount中的脚本【TRUNCATE TABLE t_mutex】、K3_V10.3_GL_SettleAccount_t的脚本【DELETE FROM t_mutex】注释即可
分享4、数据清理后应收款汇总表的数据与清理前的不一致
分析原因:
清理时涉及的文件为K3_V10.3_ARP_SettleAccount,脚本为:
DELETE a from t_rp_AdjustRateEntry as a
left join t_rp_AdjustRate as b on a.FInterID=b.FInterID
WHERE b.FInterID is null
DELETE a from t_rp_AdjustAccount as a
left join t_rp_AdjustRate as b on a.FInterID=b.FInterID
WHERE b.FInterID is NULL
上述语句的关联字段a.FInterID=b.FInterID有异常,FInterID在上述数据表中均为标识列,而且如果存在反调汇业务的话,就会导致前者FInterID不等于后者finterid的情况
解决方法:
清理前将上述脚本(只限于上述脚本)的FInterID改成FAdjustID
建议需要再核实应收款、应付款汇总表报表、往来对账等应收应付报表的数据是否还有其他问题
同样地,如果是使用结转的功能,则需要调整K3_V10.3_ARP_SettleAccount_t中与上述同样的脚本:
DELETE a from t_rp_AdjustRateEntry as a
left join t_rp_AdjustRate as b on a.FInterID=b.FInterID
WHERE b.FInterID is null
DELETE a from t_rp_AdjustAccount as a
left join t_rp_AdjustRate as b on a.FInterID=b.FInterID
WHERE b.FInterID is NULL
结转前将上述脚本(只限于上述脚本)的FInterID改成FAdjustID
建议需要再核实应收款、应付款汇总表报表、往来对账等应收应付报表的数据是否还有其他问题
推荐阅读