cloud7.5 会计期间重复引发的问题修复
因星空企业版/标准版系统会计日历仅默认预置到2025年12月为止,如未手工追加会计期间,总账期末结账到2026年1期时,将可能引起会计日历数据错误,从而导致结账失败及明细分类账查询报错等异常情况。如已在2026年1期前手动追加了会计日历且未出现相关异常情况的可忽略本文。
如已发生上述错误,对于有条件执行SQL脚本的用户,可按以下步骤处理:
1. 查否存在有问题的会计期间
SELECT T.FID,CL.FNAME,C.FNUMBER,T.FYEAR,T.FPERIOD,T.FWEEK,COUNT(T.FID) FREPEATCOUNT,
MIN(T.FENTRYID) FMINENTRYID ,MAX(T.FENTRYID) FMAXENTRYID
FROM T_BD_ACCOUNTPERIOD T
JOIN T_BD_ACCOUNTCALENDAR C ON T.FID=C.FID
LEFT JOIN T_BD_ACCOUNTCALENDAR_L CL ON C.FID=CL.FID AND CL.FLOCALEID=2052
GROUP BY T.FID,CL.FNAME,C.FNUMBER,T.FYEAR,T.FPERIOD,T.FWEEK
HAVING COUNT(T.FID)>1
ORDER BY T.FID,T.FYEAR,T.FPERIOD,T.FWEEK;
2. 如存在,则修复错误数据,如不存在,则是跳过该步骤:
--备份会计期间数据
SELECT * INTO T_BD_ACCOUNTPERIOD_2025 FROM T_BD_ACCOUNTPERIOD; --SQL SERVER数据库及公有云执行此句
或
CREATE TABLE T_BD_ACCOUNTPERIOD_2025 AS SELECT * FROM T_BD_ACCOUNTPERIOD; --ORACLE数据库执行此句
--修复错误数据
DELETE FROM T_BD_ACCOUNTPERIOD
WHERE FYEAR>2025 OR FENTRYID NOT IN(
SELECT MIN(FENTRYID) FMINENTRYID
FROM T_BD_ACCOUNTPERIOD
GROUP BY FID,FYEAR,FPERIOD,FWEEK
);
--修复会计日历结束日期
MERGE INTO T_BD_ACCOUNTCALENDAR C
USING (SELECT FID,MAX(FPERIODENDDATE) FPERIODENDDATE FROM T_BD_ACCOUNTPERIOD GROUP BY FID) P ON (C.FID=P.FID)
WHEN MATCHED THEN
UPDATE SET C.FENDDATE=P.FPERIODENDDATE;
pl/sql最后还需要执行
commit;
