结算管理使用说明
分析范围:结算管理下的收入项目、支出项目、供应商结算(及其全部子菜单)、客户结算(及其全部子菜单)。 分析方式:代码只读,未做任何改动(后端
smarterp/erpApplication、前端smarterp-front/app/views/settle)。
一、菜单总览
结算管理
├── 收入项目 (基础资料:费用项目字典)
├── 支出项目 (基础资料:费用项目字典)
├── 供应商结算
│ ├── 结算单 (供应商结算单,收尾"实付")
│ ├── 对账单 (供应商对账单,中间"汇总")
│ ├── 费用单 (供应商应收/应付杂费)
│ ├── 预付款单 (预付给供应商)
│ └── 结算设置 (四类单据各自的开审批/选流程)
└── 客户结算
├── 结算单 (客户结算单,收尾"实收")
├── 对账单 (客户对账单)
├── 费用单 (客户应收/应付杂费)
├── 预收款单 (预收客户货款)
└── 结算设置
收入项目/支出项目是两侧共用的同一套字典(客户费用单也引用
SettleInItem/SettleOutItem)。
二、收入项目 / 支出项目(基础字典)
用途:给"费用单、预付款单、预收款单"的明细行提供可选的费用科目。
| 字段 | 规则 |
|---|---|
| 编号 | 必填,字母/数字/-_.,≤20 位 |
| 名称 | 必填,≤50 |
| 备注 | 选填,≤200 |
操作:按编号/名称查询、新增、修改、查看、删除、批量删除、导出(异步生成,去"导出中心"下载)。
使用场景(哪个单据用哪套项目):
| 单据 | 明细项目字典 | 含义 |
|---|---|---|
| 供应商费用单 · 应收款 | 收入项目 | 应收回的杂费(如供应商赔偿) |
| 供应商费用单 · 应付款 | 支出项目 | 应付出的杂费(如运输费、加工费) |
| 供应商预付款单 | 支出项目 | 提前付给供应商的货款 |
| 客户费用单 · 应收款 | 收入项目 | 应收客户的杂费(如运费) |
| 客户费用单 · 应付款 | 支出项目 | 应付客户的杂费 |
| 客户预收款单 | 收入项目 | 提前收客户的货款 |
三、供应商结算(应付方向)
1. 结算设置
四类单据(结算单/对账单/费用单/预付款单)各自独立配置"是否开启审批流程 + 选哪个审批流程"。开启后:创建单据 → 自动发起 BPM 流程 → 流程中心审批;通过/拒绝会回写单据状态;拒绝后可在列表"流程中心"处重新发起(跳转 modify?isForm=true)。
2. 费用单
选择供应商 → 选"应收款/应付款" → 逐行选项目(收入/支出)+ 金额(必须 >0)。
- 应收款:在供应商对账单里作为负数冲减应付(SUB)
- 应付款:在供应商对账单里作为正数增加应付(ADD)
3. 预付款单
选择供应商 → 逐行选支出项目 + 金额,合计即预付总额。对账单里作为负数(SUB,冲减应付),先预付后抵扣。
4. 对账单(汇总环节,核心)
操作流程:
- 选供应商 + 审核日期区间
- 点"查询" → 拉出该供应商下已审核且未结算的业务单据:
| 单据类型 | 方向 |
|---|---|
| 采购收货单 | +(增加应付) |
| 采购退单 | -(冲减应付) |
| 供应商费用单 | 应付款+ / 应收款- |
| 供应商预付款单 | - |
- 逐行可勾选、填"应付金额"(ADD 行必须 ≥0,SUB 行必须 ≤0),显示"单据总金额"与"应付总金额"
- 保存/审核通过
状态联动:
- 创建对账单 → 明细业务单据标记 结算中(PART_SETTLE)
- 修改/删除对账单 → 明细业务单据还原 未结算(UN_SETTLE)
- 只有 审核通过 的对账单才能被结算单选中
5. 结算单(实付环节,收尾)
操作流程:
- 选供应商 + 审核日期区间
- 点"查询" → 拉出该供应商下已审核未结算的对账单,显示:应付金额 / 已付金额 / 已优惠金额 / 未付金额(未付 = 应付 − 已付 − 已优惠)
- 逐行填实付金额 + 优惠金额(不能同时为 0;且
实付+优惠不得超过未付金额;应付为负时方向相反) - 保存/审核通过
审核通过后的级联写回(关键):
- 逐行把对账单的
已付金额 += 实付、已优惠 += 优惠 - 当剩余 = 0 → 对账单置 已结算(SETTLED),并逐行把底层业务单据(采购收货单/退单等)也置为已结算
四、客户结算(应收方向,与供应商侧完全对称)
| 环节 | 供应商侧 | 客户侧 |
|---|---|---|
| 汇总 | 供应商对账单 | 客户对账单(销售出库单+ / 销售退单- / 客户费用单± / 客户预收款单-) |
| 收尾 | 供应商结算单(实付+优惠) | 客户结算单(实收+优惠) |
与供应商侧唯一实质差异——现场收付抵扣:
- 销售出库单/销售退单创建时可录入现场收付(
OrderPayType,如现金/扫码/储值) - 审核出库单时:若现场已收 ≥ 单据总额 → 单据直接 已结算(SETTLED),不再进入对账;若部分收付 → 对账单只按 "单据总额 − 已现场收付" 的余额计入
- 目的:同一笔货款只回笼一次资金,避免"现场收了钱,结算再收一遍"
五、与采购 / 销售 / 零售的资金关系
【采购 → 供应商结算】
采购订单 ──审核──> 采购收货单(+) ──┐
采购退单(-) ──────┤──> 供应商对账单 ──> 供应商结算单 ──> 付钱给供应商
供应商费用单(±) ───┤
供应商预付款单(-) ─┘
【销售 → 客户结算】
销售订单 ──审核──> 销售出库单(+) ──┐
销售退单(-) ──────┤──> 客户对账单 ──> 客户结算单 ──> 向客户收款
客户费用单(±) ────┤
客户预收款单(-) ──┘
(现场已收金额在出库单层面先抵扣)
【零售 → 现收自清,不进入结算管理】
零售出库单/零售退货单 ──审核──> 按现场收付金额自清
全额收付 → 已结算;未全额 → 结算中
(零售对应"会员",客户结算按"客户"聚合,两套体系分离)
结算状态机
UN_SETTLE(0)未结算 → PART_SETTLE(1)结算中 → SETTLED(3)已结算
UN_REQUIRE(6)无需结算 ← 非经销供应商的采购单据(不参与对账)
几点业务边界(代码层面确认)
- 对账/结算只解决赊销赊购的账期管理;现场即时收付(零售、销售现收)不走结算模块,在单据审核时自清。
- 只有"经销"供应商参与对账,非经销采购单据默认"无需结算"(
ManageType硬编码判断,属既有设计)。 - 每一级单据审核通过后才成为下一级的候选;明细金额一旦被下一级引用即锁定(结算中状态),修改需先删除/还原上一级单据。
- 所有结算单据支持独立配置 BPM 审批,与采购/销售单据走同一套流程中心。