核算、存货结账报错包含内容“Message:将expression转换为数据类型int时出现算术溢出错误”的解决方案原创
金蝶云社区-羊羊羊羊羊羊
羊羊羊羊羊羊
46人赞赏了该文章 3328次浏览 未经作者许可,禁止转载编辑于2024年02月01日 16:34:09

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

如下图1或者图2

image.png

image.png

报错原因:此类报错为核算以及结账涉及的部份表主键超长溢出导致,8.0版本前启用成本的账套存货核算表的主键类型都是int,(8.0及以后版本新的账套启用成本则表的主键类型为bigint,不会存在此类问题),

int类型在数据库存储大小为带符号的范围是-2147483648到2147483647(10位),即出现以上报错则表明某张或者多张表的主键最大值(分录行的最大序号)超出了int的存储大小范围


解决方法:

  方案一适用于私有云用户且版本低于8.0不方便升级的情况,公有云用户需提单协助或者参考方案二


方案一、

1、定位表,通过存货核算——成本云巡检服务配置(旧版本原名为业务云巡检配置)勾选第21项检查数据表主键内码超出预警值,重新进行巡检如有不通过项,点详细内容显示如下图(如巡检没有此项检查功能的版本用户建议升级到8.1.0.202306及以后的版本,直接看方案二,此为最优方案

image.png

image.png


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_AlterColumn 't_cb_costmatterial', 'FENTRYID', 'bigint', 'NOT NULL', '0101', '0';
EXEC p_AlterColumn 't_cb_costmatterialdetail', 'FDETAILID', 'bigint', 'NOT NULL', '0101', '0';
EXEC p_AlterColumn 't_cb_costmatterialdetail', 'FENTRYID', 'bigint', 'NOT NULL', '0101', '0';

--历史表

EXEC p_AlterColumn 't_cb_costmatterial_h', 'FENTRYID', 'bigint', 'NOT NULL', '0101', '0';
EXEC p_AlterColumn 't_cb_costmatterialdetail_h', 'FDETAILID', 'bigint', 'NOT NULL', '0101', '0';

EXEC p_AlterColumn 't_cb_costmatterialdetail_h', 'FENTRYID', 'bigint', 'NOT NULL', '0101', '


随着系统使用时间越久数据越多,会陆续出现别的表主键值超长,根据详细信息提示在脚本替换对应表名以及字段名即可

image.png

补充重点

1、如核算出现此类报错,巡检中检查项没有不通过项,或者详细提示的表主键类型已修改为bigint

核算还是报错相同提示,需要在数据库再执行脚本

EXEC p_AlterColumn 'T_HS_EXPENSES_LK', 'FSUBDETAILID', 'bigint', 'NOT NULL', '0101', '0';
EXEC p_AlterColumn 'T_HS_EXPENSES_LK', 'FDETAILID', 'bigint', 'NOT NULL', '0101', '0';
EXEC p_AlterColumn 'T_HS_OUTINSTOCKSEQ_LK', 'FSOURCESEQENTRYID', 'bigint', 'NOT NULL', '0101', '0';

EXEC p_AlterColumn 'T_HS_OUTINSTOCKSEQ_LK', 'FTARGETSEQENTRYID', 'bigint', 'NOT NULL', '0101', '0';


2、如果详细提示的表主键类型已修改为bigint,存货结账报错如下,但是结账依旧能正常通过,是由于期初在产品成本调整也需要修改

Image_20230724164128.png

 

EXEC p_AlterColumn 'T_CB_INITPROCOSTMATADJENTRY', 'FMATENTRYID', 'bigint', 'NOT NULL', '0101', '0';

EXEC p_AlterColumn 'T_CB_INITPROCOSTEXPADJENTRY', 'FMATSUBENTRYID', 'bigint', 'NOT NULL', '0101', '0';


方案二、用户系统版本是8.1.0.202306及以后的版本,启用成本拆分表就可以完全避免此类问题了

启用拆分表指南:https://vip.kingdee.com/article/372446836444653312?share_fromuid=2147439579&productLineId=1&isKnowledge=2





赞 46