2030 年之后,金蝶 KIS 商贸版真的不能新建账套了吗?
我们先来看看具体的问题表现。当使用金蝶 KIS 商贸版新建账套,且指定的启用年度超过 2030 年时,建账过程将无法继续,系统会直接给出如下提示:
为了找出问题根源,我在SQL Server Profiler中跟踪执行发现报错的语句为:execute AIS20250521092040.dbo.prc_CreatePeriodDate 2030。新建账套虽然不成功,但是SSMS里已经有了AIS20250521092040这个数据库,将语句复制到SSMS里执行,结果如下:
接下来,我们开始查找问题的关键。在“可编程性”-“存储过程”中找到 prc_CreatePeriodDate 这个存储过程,右键选择“修改”。在查询窗口中可以看到,@curDate 这个变量属性被设置成了 smalldatetime。在 SQL Server 中,smalldatetime 类型用于存储日期和时间,其范围是从 1900 年 1 月 1 日到 2079 年 6 月 6 日。若尝试将超出此范围的值插入到 smalldatetime 类型的列中,就会引发溢出错误。
既然找到了问题的关键所在,我便尝试进行修复。将存储过程中的 smalldatetime 改成 datetime,再次执行 execute AIS20250521092040.dbo.prc_CreatePeriodDate 2030,此时不再报错。
由于金蝶 KIS 商贸版的建账脚本没有可修改的地方,对于启用期间不能为 2030 年的情况,我们可以采用以下变通解决方法:
1. 新建账套时,指定启用年度为 2030 年以前的时间,如2029年1月。
2. 建账成功以后,手动将 prc_CreatePeriodDate 这个存储过程中的 smalldatetime 修改成 datetime,然后执行 Execute dbo.prc_CreatePeriodDate 2030 预设50年的自然会计期间。
3. 修改启用年度和启用期间。
执行以下语句查询出对应信息:
select * from t_SystemProfile where FKey in ('StartPeriod','CurrentPeriod','CurrentYear','StartYear')
然后写语句更新:
update t_SystemProfile set FValue=2030 where FKey='CurrentYear' and FValue=2029
update t_SystemProfile set FValue=2030 where FKey='StartYear' and FValue=2029
当新建账套时启用期间指定的1月时,StartPeriod和CurrentPeriod这两个不需要更新。
处理完以后正常进行初始化流程即可。
由于金蝶KIS商贸版已经停产多年,这个方案我只是在金蝶云社区看到有伙伴提出这个问题见猎心喜在金蝶KIS云·商贸版环境进行了测试,其他版本号未做测试,以上方案仅供参考。
关于smalldatetime、datetime和datetime2的说明:
在 SQL Server 中,smalldatetime 类型在 SQL Server 中存储的是从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间,datetime 类型可以存储从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间,而 datetime2 提供更高的精度和更大的范围(从 0001 年 1 月 1 日到 9999 年 12 月 31 日)

