核算、存货结账报错包含内容“Message:将expression转换为数据类型int时出现算术溢出错误”的解决方案

背景:出库核算、成本计算以及存货结账如出现类似报错:Message:将expression转换为数据类型int时出现算术溢出错误
如下图1或者图2


报错原因:此类报错为核算以及结账涉及的部份表主键超长溢出导致,8.0版本前启用成本的账套存货核算表的主键类型都是int,(8.0及以后版本新的账套启用成本则表的主键类型为bigint,不会存在此类问题),
int类型在数据库存储大小为带符号的范围是-2147483648到2147483647(10位),即出现以上报错则表明某张或者多张表的主键最大值(分录行的最大序号)超出了int的存储大小范围
解决方法:
方案一适用于私有云用户且版本低于8.0不方便升级的情况,公有云用户需提单协助或者参考方案二
方案一、
1、定位表,通过存货核算——成本云巡检服务配置(旧版本原名为业务云巡检配置)勾选第21项检查数据表主键内码超出预警值,重新进行巡检如有不通过项,点详细内容显示如下图,此处巡检为提前预警,需要及时处理,不然等到数据真的达到2147483647(10位)则就会影响系统核算以及结账出现上述的报错(如巡检没有此项检查功能的版本用户建议升级到8.1.0.202306及以后的版本,直接看方案二,此为最优方案)


2、定位出异常的表后,具体修复方案有两种具体为
A、(此方法耗时长,且执行非常耗性能,中途停止不可控,谨慎选择)可点击如上图所示巡检中的立即修复按钮(此处默认隐藏,如要使用
修复功能在数据库执行以下语句后,再次进入云巡检功能就会显示出来,点击立即修复即可
注意:此处修复的原理为回收主键的内码,即针对序号有断码的情况往前补齐,由于成本每个表主键关联的表较多,所以请勿在系统进行核算以及结账的时候点修复,最好是在系统空闲时间段,数据越多耗时越久
select * into T_HS_PATCHECKITEMbak from T_HS_PATCHECKITEM ;
UPDATE T_HS_PATCHECKITEM SET FISSYSDEFAULT=2 WHERE FID=1032 AND FISSYSDEFAULT =1
)
B、在数据库执行脚本修改主键类型为bigint,此方法执行后云巡检中关于检查数据表主键内码超出预警值还会提示,但可直接忽略
以上图为参考脚本,提示只有本期表,但需同时修改对应历史表(一般本期表后缀_H)以避免结账报错
注意:请勿在系统进行核算以及结账的时候执行,最好是在系统空闲时间段,数据越多耗时越久
--本期表
--历史表
EXEC p_AlterColum
核算、存货结账报错包含内容“Message:将expression转换为数据类型int时出现算术溢出错误”的解决方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



