结算管理使用说明

分析范围:结算管理下的收入项目、支出项目、供应商结算(及其全部子菜单)、客户结算(及其全部子菜单)。 分析方式:代码只读,未做任何改动(后端 smarterp/erpApplication、前端 smarterp-front/app/views/settle)。


一、菜单总览

结算管理
├── 收入项目          (基础资料:费用项目字典)
├── 支出项目          (基础资料:费用项目字典)
├── 供应商结算
│   ├── 结算单        (供应商结算单,收尾"实付")
│   ├── 对账单        (供应商对账单,中间"汇总")
│   ├── 费用单        (供应商应收/应付杂费)
│   ├── 预付款单      (预付给供应商)
│   └── 结算设置      (四类单据各自的开审批/选流程)
└── 客户结算
    ├── 结算单        (客户结算单,收尾"实收")
    ├── 对账单        (客户对账单)
    ├── 费用单        (客户应收/应付杂费)
    ├── 预收款单      (预收客户货款)
    └── 结算设置

收入项目/支出项目是两侧共用的同一套字典(客户费用单也引用 SettleInItem/SettleOutItem)。


二、收入项目 / 支出项目(基础字典)

用途:给"费用单、预付款单、预收款单"的明细行提供可选的费用科目。

字段 规则
编号 必填,字母/数字/-_.,≤20 位
名称 必填,≤50
备注 选填,≤200

操作:按编号/名称查询、新增、修改、查看、删除、批量删除、导出(异步生成,去"导出中心"下载)。

使用场景(哪个单据用哪套项目)

单据 明细项目字典 含义
供应商费用单 · 应收款 收入项目 应收回的杂费(如供应商赔偿)
供应商费用单 · 应付款 支出项目 应付出的杂费(如运输费、加工费)
供应商预付款单 支出项目 提前付给供应商的货款
客户费用单 · 应收款 收入项目 应收客户的杂费(如运费)
客户费用单 · 应付款 支出项目 应付客户的杂费
客户预收款单 收入项目 提前收客户的货款

三、供应商结算(应付方向)

1. 结算设置

四类单据(结算单/对账单/费用单/预付款单)各自独立配置"是否开启审批流程 + 选哪个审批流程"。开启后:创建单据 → 自动发起 BPM 流程 → 流程中心审批;通过/拒绝会回写单据状态;拒绝后可在列表"流程中心"处重新发起(跳转 modify?isForm=true)。

2. 费用单

选择供应商 → 选"应收款/应付款" → 逐行选项目(收入/支出)+ 金额(必须 >0)。

  • 应收款:在供应商对账单里作为负数冲减应付(SUB)
  • 应付款:在供应商对账单里作为正数增加应付(ADD)

3. 预付款单

选择供应商 → 逐行选支出项目 + 金额,合计即预付总额。对账单里作为负数(SUB,冲减应付),先预付后抵扣。

4. 对账单(汇总环节,核心)

操作流程:

  1. 供应商 + 审核日期区间
  2. 点"查询" → 拉出该供应商下已审核且未结算的业务单据:
单据类型 方向
采购收货单 +(增加应付)
采购退单 -(冲减应付)
供应商费用单 应付款+ / 应收款-
供应商预付款单
  1. 逐行可勾选、填"应付金额"(ADD 行必须 ≥0,SUB 行必须 ≤0),显示"单据总金额"与"应付总金额"
  2. 保存/审核通过

状态联动

  • 创建对账单 → 明细业务单据标记 结算中(PART_SETTLE)
  • 修改/删除对账单 → 明细业务单据还原 未结算(UN_SETTLE)
  • 只有 审核通过 的对账单才能被结算单选中

5. 结算单(实付环节,收尾)

操作流程:

  1. 供应商 + 审核日期区间
  2. 点"查询" → 拉出该供应商下已审核未结算的对账单,显示:应付金额 / 已付金额 / 已优惠金额 / 未付金额(未付 = 应付 − 已付 − 已优惠)
  3. 逐行填实付金额 + 优惠金额(不能同时为 0;且 实付+优惠 不得超过未付金额;应付为负时方向相反)
  4. 保存/审核通过

审核通过后的级联写回(关键):

  • 逐行把对账单的 已付金额 += 实付已优惠 += 优惠
  • 当剩余 = 0 → 对账单置 已结算(SETTLED),并逐行把底层业务单据(采购收货单/退单等)也置为已结算

四、客户结算(应收方向,与供应商侧完全对称)

环节 供应商侧 客户侧
汇总 供应商对账单 客户对账单(销售出库单+ / 销售退单- / 客户费用单± / 客户预收款单-)
收尾 供应商结算单(实付+优惠) 客户结算单(实收+优惠)

与供应商侧唯一实质差异——现场收付抵扣

  • 销售出库单/销售退单创建时可录入现场收付OrderPayType,如现金/扫码/储值)
  • 审核出库单时:若现场已收 ≥ 单据总额 → 单据直接 已结算(SETTLED),不再进入对账;若部分收付 → 对账单只按 "单据总额 − 已现场收付" 的余额计入
  • 目的:同一笔货款只回笼一次资金,避免"现场收了钱,结算再收一遍"

五、与采购 / 销售 / 零售的资金关系

【采购 → 供应商结算】
采购订单 ──审核──> 采购收货单(+) ──┐
                 采购退单(-) ──────┤──> 供应商对账单 ──> 供应商结算单 ──> 付钱给供应商
                 供应商费用单(±) ───┤
                 供应商预付款单(-) ─┘

【销售 → 客户结算】
销售订单 ──审核──> 销售出库单(+) ──┐
                 销售退单(-) ──────┤──> 客户对账单 ──> 客户结算单 ──> 向客户收款
                 客户费用单(±) ────┤
                 客户预收款单(-) ──┘
                 (现场已收金额在出库单层面先抵扣)

【零售 → 现收自清,不进入结算管理】
零售出库单/零售退货单 ──审核──> 按现场收付金额自清
   全额收付 → 已结算;未全额 → 结算中
   (零售对应"会员",客户结算按"客户"聚合,两套体系分离)

结算状态机

UN_SETTLE(0)未结算 → PART_SETTLE(1)结算中 → SETTLED(3)已结算
UN_REQUIRE(6)无需结算   ← 非经销供应商的采购单据(不参与对账)

几点业务边界(代码层面确认)

  1. 对账/结算只解决赊销赊购的账期管理;现场即时收付(零售、销售现收)不走结算模块,在单据审核时自清。
  2. 只有"经销"供应商参与对账,非经销采购单据默认"无需结算"(ManageType 硬编码判断,属既有设计)。
  3. 每一级单据审核通过后才成为下一级的候选;明细金额一旦被下一级引用即锁定(结算中状态),修改需先删除/还原上一级单据。
  4. 所有结算单据支持独立配置 BPM 审批,与采购/销售单据走同一套流程中心。