作者:姜佳言
在基础设置 - 基础档案 - 业务 - 工作日历维护模块中,新年度修改工作日历若出现“操作失败,已存在相同记录,无法保存”提示,可按以下方法快速解决!

一、问题原因
后台单据编号生成控制表(UA_Identity)最大 ID 有误,导致系统识别到重复记录,无法完成保存操作。
二、方案总结
1.修改设定时间范围
将开始日期选择为2010年1月1日(重要),截止日期选择为2026年12月31日,其他条件保持与之前一致,再进行保存;
2.数据库后台调整最大单据号
根据日历数据的最大标识更新控制表相关标识值 ,可参考以下相关脚本:
--在当前账套UFDATA库中执行以下语句查询最大ID
Select max(calendardid) as 最大工作日历明细ID,max(calendarwktid) as 最大工作日历明细 from bas_calendardetail_wkhour
--在 UFSystem库执行检查并调整,修改前请务必做好数据备份及数据表备份
Select cVouchType ,iChildId from UFSystem..UA_Identity where cAcc_Id=‘账套号’ and cVouchType in(‘bas_calendardetail’,‘bas_calendardetail_wkhour’)
三、详细解决步骤
(优先推荐)解决方案一:U8 软件中直接修改设置
该方案无需操作数据库,操作简单,优先尝试。
1、进入【工作日历维护】功能页面,点击 “修改” 按钮,进入编辑模式。
2、关键参数设置(需严格按要求配置):
起始设定日期:固定选择 2010.01.01(核心解决重复问题的关键);
结束设定日期:选择 2026.12.31(覆盖长期周期,减少频繁新增操作);
覆盖设置:勾选 “是否覆盖” 选项(允许替换已存在的重复记录);
工作日选择:默认勾选星期一至星期五;若企业周末正常上班,需额外勾选星期六、星期天;
工作时间设置:起始时间选 00:00,结束时间选 23:59(可根据企业实际上下班时间调整,确保覆盖完整工作时段)。
3、完成设置后,点击 “确定” 按钮保存配置。
注意事项:若系统中存在多个工作日历代号,需针对每个代号分别执行以上操作,确保所有代号的配置均已更新。

解决方案二:数据库后台调整(方案 1 无效时使用)
需具备数据库访问权限,且操作前建议备份相关数据,避免数据丢失。
1、第一步:查询当前账套 UFDATA 库中 bas_calendardetail_wkhour 表的最大最大工作日历明细ID与 最大工作日历明细 值,后续用于数据更新
参考 SQL 查询语句:Select max(calendardid) as 最大工作日历明细ID,max(calendarwktid) as 最大工作日历明细 from bas_calendardetail_wkhour

2、第二步:查询 UFSystem 库中 UA_Identity 表的对应记录
执行 SQL 查询语句:Select cVouchType ,iChildId from UFSystem..UA_Identity where cAcc_Id=‘账套号’ and cVouchType in(‘bas_calendardetail’,‘bas_calendardetail_wkhour’)
(说明:将语句中的 “账套号” 替换为实际操作的账套编号,例如 003、004 等)。

3、第三步:备份 UA_Identity 表数据
参考 SQL 语句:select * into UA_Identitybak from UA_Identity
(创建备份表 UA_Identitybak,防止更新操作出错后可恢复原始数据)。

4、第四步:更新 UA_Identity 表的 iChildId 值
参考 SQL 更新语句:
update UA_Identity set iChildId=‘最大工作日历明细ID’ where cVouchType=‘bas_calendardetail’ and cAcc_Id=‘账套号’
update UA_Identity set iChildId=‘最大工作日历明细’ where cVouchType=‘bas_calendardetail_wkhour’ and cAcc_Id=‘账套号’

5、操作完成后,重新登录U8进行【工作日历维护】修改即可。