应付单原币和本位币均为人民币,但单据本位币金额不等于原币金额修复SQL参考原创
42人赞赏了该文章
232次浏览
编辑于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)
推荐阅读