| | |
| | | c.contractAmounts, |
| | | -- 付款金额:逐合同按合同金额封顶后再汇总,避免重复付款导致付款金额大于合同金额 |
| | | c.paymentAmount, |
| | | -- 应付金额:逐合同「取(入库金额, 合同金额)较小者 - 封顶后付款金额 - 退货金额」后再汇总,下限为 0 |
| | | -- 应付金额:逐合同「取(入库金额, 合同金额)较小者 - 封顶后付款金额 - 退货金额」后再汇总,下限为 0。 |
| | | -- 入库金额由 6 位小数的含税单价累加而来,会带出「厘」及以下的小数, |
| | | -- 因此逐合同先四舍五入到分再汇总,保证「供应商应付金额 = 各合同应付金额之和」、且页面上只出现 2 位小数。 |
| | | c.payableAmount |
| | | from ( |
| | | select pl.supplier_id, |
| | | sum(COALESCE(pl.contract_amount, 0)) as contractAmounts, |
| | | sum(LEAST(IFNULL(pay.paymentAmount, 0), COALESCE(pl.contract_amount, 0))) as paymentAmount, |
| | | sum(GREATEST( |
| | | sum(ROUND(GREATEST( |
| | | IFNULL(ib.InboundAmount, 0) |
| | | - IF(ib.InboundAmount <![CDATA[ > ]]> COALESCE(pl.contract_amount, 0), ib.InboundAmount - COALESCE(pl.contract_amount, 0), 0) |
| | | - LEAST(IFNULL(pay.paymentAmount, 0), COALESCE(pl.contract_amount, 0)) |
| | | - IFNULL(rt.returnAmount, 0) |
| | | , 0)) as payableAmount |
| | | , 0), 2)) as payableAmount |
| | | from purchase_ledger pl |
| | | left join ( |
| | | select |
| | |
| | | -- 应付金额 = 取(入库金额, 合同金额)的较小者 - 封顶后付款金额 - 退货金额 |
| | | -- 入库金额按合同金额封顶,避免入库流程重复提交导致应付金额大于合同金额; |
| | | -- 已付款金额(回款/付款单)与退货金额均需从应付中扣减。 |
| | | GREATEST( |
| | | -- 逐合同四舍五入到分(与 supplierTransactions 汇总口径一致),避免出现 3 位以上小数 |
| | | ROUND(GREATEST( |
| | | IFNULL(T2.InboundAmount, 0) |
| | | - IF(T2.InboundAmount <![CDATA[ > ]]> COALESCE(pl.contract_amount, 0), T2.InboundAmount - COALESCE(pl.contract_amount, 0), 0) |
| | | - LEAST(IFNULL(T1.paymentAmount, 0), COALESCE(pl.contract_amount, 0)) |
| | | - IFNULL(T3.returnAmount, 0) |
| | | , 0) AS payableAmount |
| | | , 0), 2) AS payableAmount |
| | | from purchase_ledger pl |
| | | left join ( |
| | | select |