应付单原币和本位币均为人民币,但单据本位币金额不等于原币金额修复SQL参考原创
金蝶云社区-jessie_w
jessie_w
42人赞赏了该文章 118次浏览 未经作者许可,禁止转载编辑于2024年04月16日 18:48:27

业务场景:由于单据引入数据异常或自定义配置异常,导致部分应付单出现本位币金额和原币金额不一致的情况,从而引发报表本位币余额异常(余额不等于原币余额)或暂估财务流程出现异常报错(比如财务单审核提示冲回单明细金额xx和计划金额0不匹配)


注意事项:

1. 请留意涉及修改的单据业务日期,如涉及已结账期间,请在单据修复后将应付款管理反结账至对应期间重新结账回来(仅反结应付款即可,不影响其他模块),否则报表余额不会发生变化。

2. 如下语句适用单据为未开票核销未付款核销的单据。针对已经核销的单据,建议先反核销再修复,否则涉及核销记录会更复杂。

如下SQL语句仅供参考!!!更新前建议做全表备份!!!


大致思路:排查原币和本位币一致,汇率为1,但金额不一致的单据插入临时表,再逐个表修复数据。涉及表会比较多。

--1. 数据备份
SELECT * INTO T_AP_PAYABLEENTRY_SQLBAK_20240416 FROM T_AP_PAYABLEENTRY
SELECT * INTO T_AP_PAYABLEFIN_SQLBAK_20240416 FROM T_AP_PAYABLEFIN
SELECT * INTO T_AP_PAYABLEPLAN_SQLBAK_20240416 FROM T_AP_PAYABLEPLAN

--2. 排查异常单据,并将相关信息插入临时表
SELECT A.FID,B.FENTRYID,A.FBILLNO 单据编号,A.FISINIT 是否期初单据,A.FDATE 业务日期,A.FSETACCOUNTTYPE 立账类型,A.FWRITTENOFFSTATUS 头付款核销状态,A.FOPENSTATUS 头开票核销状态,A.FCURRENCYID 原币,C.FMAINBOOKSTDCURRID 本位币,A.FALLAMOUNTFOR 头价税合计,B.FALLAMOUNTFOR 体价税合计,B.FALLAMOUNT 体价税合计本,B.FNOTAXAMOUNTFOR 体不含税金额,B.FNOTAXAMOUNT 体不含税金额本,B.FTAXAMOUNTFOR 体税额,B.FTAXAMOUNT 体税额本,B.FOPENAMOUNTFOR 已开票核销金额,B.FOPENAMOUNT 已开票核销金额本,B.FMATCHNOTTAXAMTFOR 已开票不含税金额,B.FMATCHNOTTAXAMT 已开票不含税金额本,B.FHADMATCHAMOUNTFOR 已开票金额,C.FALLAMOUNT 财务价税合计本,C.FNOTAXAMOUNTFOR 财务不含税金额,C.FNOTAXAMOUNT 财务不含税金额本,C.FTAXAMOUNTFOR 财务税额,C.FTAXAMOUNT 财务税额本
INTO #TEMP1
FROM T_AP_PAYABLE A
LEFT JOIN T_AP_PAYABLEENTRY B ON A.FID=B.FID
LEFT JOIN T_AP_PAYABLEFIN C ON A.FID=C.FID
WHERE C.FEXCHANGERATE=1 AND (B.FALLAMOUNTFOR<>B.FALLAMOUNT OR B.FTAXAMOUNTFOR<>B.FTAXAMOUNT)   --汇率为1,但价税合计原币不等于本位币或税额原币不等于本位币
AND A.FWRITTENOFFSTATUS IN ('','A') AND A.FOPENSTATUS IN ('','A')  --核销状态为空
AND FBILLNO='单据编号'  --通过单据编号过滤,如批量排查,可去掉该条件
ORDER BY A.FDATE  --按业务日期排序,需留意最早的业务日期

--3. 根据临时表涉及单据更新明细的金额本位币为原币
UPDATE T_AP_PAYABLEENTRY SET FALLAMOUNT=FALLAMOUNTFOR,FTAXAMOUNT=FTAXAMOUNTFOR,FNOTAXAMOUNT=FNOTAXAMOUNTFOR WHERE FENTRYID IN (SELECT FENTRYID FROM #TEMP1)

--4. 更新财务信息的金额本位币为原币
UPDATE T_AP_PAYABLEFIN SET FALLAMOUNT=FTAXAMOUNTFOR+FNOTAXAMOUNTFOR,FTAXAMOUNT=FTAXAMOUNTFOR,FNOTAXAMOUNT=FNOTAXAMOUNTFOR WHERE FID IN (SELECT FID FROM #TEMP1)

--5. 更新付款计划的金额本位币为原币
UPDATE T_AP_PAYABLEPLAN SET FPAYAMOUNT=FPAYAMOUNTFOR WHERE FID IN (SELECT FID FROM #TEMP1)



赞 42