本文介绍了应收应付单在收付款核销后的金额计算方式,包括按到期日、订单、物料明细收款的不同处理逻辑。同时,指出因历史收款条件修改导致的不匹配问题,需进行数据修复,特别是针对已完全核销的单据,通过SQL语句更新其已结算金额为价税合计,未结算金额为0。
应收应付单做了收付款核销后,会按比例计算明细行对应的已结算金额和未结算金额进行反写,已结算金额的计算方式和单据的收付款条件的收款方式有关。
以应收单为例,收款条件的收款方式分为按到期日收款、按订单收款、按物料明细收款。
1. 按到期日收款或收款条件为空时,应收单的收款计划仅有一行,且不会携带订单号,分配方式是每行明细占总金额的比例*已核销金额计算;
2. 按订单收款时,应收单的收款计划根据明细的销售订单号(FORDERNUMBER)分组汇总生成,每个订单对应一行计划,且会携带订单号,在这一行计划分录核销后,仅反写相同订单的明细,按每行价税合计占该订单总金额的比例*已核销金额计算;
3. 按物料明细收款时,应收单的收款计划根据明细的订单分录内码(FORDERENTRYID)和物料(FMATERIALID)分组汇总生成(订单号默认是一致的所以作为分组字段),相同订单分录内码和物料才生成一行收款计划,且会携带订单号、订单分录内码、物料这三个字段,在这一计划分录核销后,仅反写相同订单分录内码、物料内码的明细,按每行价税合计占该订单分录物料总金额的比例*已核销金额计算。
异常情况:历史收款条件不符合业务需求,所以自行放开了已使用的收款条件基础资料的收款方式的锁定性(一般已经创建的收款条件就不允许修改收款方式)做了修改,或修改了历史单据的收款条件,使应收单的计划分录和单据现在的收款方式不匹配了,即不符合上述的逻辑关系,比如从按到期日收款修改为按订单收款,明细有多个订单或多个物料,而收款计划只有一行分录且没有订单号,因订单号不匹配,就会影响已结算金额的反写。此时就需要做数据修复。
但部分核销的单据分摊逻辑略复杂,所以建议是只针对已完全收付款核销的单据,将明细分录的已结算金额修改为和价税合计一致,未结算金额修改为0,部分核销的单据待完全核销后再统一修复。
--修改已完全核销的应收单的已结算金额=价税合计 MERGE INTO T_AR_RECEIVABLEENTRY T1 USING ( SELECT A.FBILLNO,A.FWRITTENOFFSTATUS,B.FENTRYID,B.FRECEIVEAMOUNT 已结算金额,B.FNORECEIVEAMOUNT 未结算金额,B.FALLAMOUNTFOR 明细价税合计,B.FORDERNUMBER 采购订单号 FROM T_AR_RECEIVABLE A LEFT JOIN T_AR_RECEIVABLEENTRY B ON A.FID=B.FID WHERE A.FWRITTENOFFSTATUS='C' AND B.FRECEIVEAMOUNT<>B.FALLAMOUNTFOR ) T2 ON (T1.FENTRYID=T2.FENTRYID) WHEN MATCHED THEN UPDATE SET T1.FRECEIVEAMOUNT=T1.FALLAMOUNTFOR,T1.FNORECEIVEAMOUNT=0; --修改已完全核销的应付单的已结算金额=价税合计 MERGE INTO T_AP_PAYABLEENTRY T1 USING( SELECT A.FBILLNO,A.FDATE,A.FWRITTENOFFSTATUS,B.FALLAMOUNTFOR 明细价税合计,B.FPAYMENTAMOUNT 已结算金额,B.FNORECEIVEAMOUNT 未结算金额,B.FORDERNUMBER 采购订单号,B.FENTRYID FROM T_AP_PAYABLE A LEFT JOIN T_AP_PAYABLEENTRY B ON A.FID=B.FID WHERE A.FWRITTENOFFSTATUS='C' AND B.FPAYMENTAMOUNT<>B.FALLAMOUNTFOR ) T2 ON (T1.FENTRYID=T2.FENTRYID) WHEN MATCHED THEN UPDATE SET T1.FPAYMENTAMOUNT=T1.FALLAMOUNTFOR,T1.FNORECEIVEAMOUNT=0;
推荐阅读