1
0
forked from erp-dev/erp
Files
erpnew/docs/STATEMENT_BUG_FIX_PLAN.md
2026-05-19 23:41:34 +08:00

4.8 KiB
Raw Permalink Blame History

客户对账单 Bug 修复计划

本文档列出 antd-demo 后端对账单同步与计算中已确认的所有问题,按优先级排序。


问题总览

# 问题 影响金额(腾飞案例) 影响金额(张晓鹏案例) 优先级
1 退货单金额放错列 7,378 17,224 P0
2 退货单被冗余写入收款桶 7,378 17,224 P0
3 SfJinE 未按 BianHaoID 去重 0 197,280 P0
4 销售折扣F_Skd XS% 行 ZkJinE无法获取 2 583 P1

Bug 1退货单金额放错列

现象

"外部销售退货单"行的金额被放到了"已收金额"列,应该放到"本单应收"列(负数)。

antd-demo 当前 ERP 正确值
本单应收 0 -7,378负数
已收金额 7,378 0

影响

退货对欠款的减少效果被抵消,导致累欠偏高。

修复

同步 sale_return 类型的 ExternalCustomerStatementOrder 时:

  • positive_amount = 0
  • negative_amount = |JinE|(取绝对值,如 7,378

对账单视图中"本单应收"显示为负数(= positive_amount - negative_amount = -7,378


Bug 2退货单被冗余写入收款桶

现象

同一笔 XT 退货单同时出现在"外部销售退货单"和"收款单"两种类型里。

腾飞纺织:收款单 101 行(应为 92多出的 9 行 = 退货单。

影响

收款行数虚增,但金额被退货冲减,导致退货效果完全抵消。

修复

同步逻辑中XT 退货单只写入退货桶(external_sales_return_order),不写入收款桶(receipt_order)。

检查点:finance/by-customer?record_types=refund 返回的 XT 记录不应该再创建 ReceiptOrder


Bug 3SfJinE 未按 BianHaoID 去重

现象

I_Sale.SfJinE 是单据头级别字段,被冗余写到同一 BianHaoID 的每一行明细上。直接对所有明细行求和会重复计入。

张晓鹏案例:

  • 7 笔现场收款订单,共 22 行明细
  • 去重后 SfJinE = 77,132正确
  • 直接 SUM = 274,412错误多算 197,280

影响

欠款被严重低估(张晓鹏少算了 197,280 元)。

修复

同步时按 BianHaoID 分组,每组只取一次 SfJinE

seen = set()
total_sf = 0.0
for record in sales_records:
    if record.BianHaoID not in seen:
        seen.add(record.BianHaoID)
        total_sf += record.SfJinE

Bug 4销售折扣数据缺失

现象

/api/v1/i-sale/by-customer 返回的 ZkJinE 全部为 0。真实的销售折扣存在于 F_Skd 表的 XS% 行中,但当前只从 F_Skd 拉 SK%(收款)记录。

张晓鹏案例:

  • receipt.ZkJinE = 233已正确获取
  • sales.ZkJinE = 583存在于 F_Skd XS% 行,无法获取)
  • 总差额 = 816 元

影响

欠款偏高 583 元(销售折扣未扣减)。影响较小,大部分客户折扣为 0 或极小。

解决方案(需 haobuye API 配合)

方案 A推荐:让 haobuye API 的 finance/by-customer 接口支持 record_types=sale

GET /api/v1/finance/by-customer?customer_name_b64=xxx&record_types=sale

返回 F_Skd 中 sType=1 AND BianHaoID LIKE 'XS%' 的记录,包含 ZkJinE 字段。

方案 B:用 db/select 补查非零折扣

GET /api/v1/db/select?table=dbo.F_Skd
  &columns=BianHaoID,ZkJinE
  &where=KhID='KH00308' AND BianHaoID LIKE 'XS%' AND ZkJinE<>0
  &limit=1000

非零折扣行通常很少,不会触及 1000 行上限。

方案 C:让 haobuye API 修改 i-sale/by-customer 接口,按 BianHaoID join F_Skd 把真实 ZkJinE 填入返回值。


修复优先级建议

第一步:修 Bug 1 + Bug 2退货相关影响最大纯后端改动
第二步:修 Bug 3SfJinE 去重,纯后端改动)
第三步:修 Bug 4需要 haobuye API 配合,影响最小)

修复后预期结果

以腾飞纺织为例:

项目 修复前 修复后 ERP 正确值
累欠金额 60,899 53,521 53,521

以张晓鹏为例(截至 5-18

项目 修复前 修复后(不含 Bug4 修复后(含 Bug4 ERP
累欠金额 748,563 748,330 747,747 747,747

验证方法

修复后用以下客户验证:

  1. 木棉KH01078— SfJinE=0无折扣预期 10,718
  2. 腾飞纺织KH00311— SfJinE=0折扣=2预期 53,521
  3. 金庸KH00290— SfJinE=23,3941笔1行不涉及去重折扣=13,009预期 82,670
  4. 张晓鹏KH00308— SfJinE=77,1327笔22行必须去重折扣=816预期与 ERP 实时值一致