状态机——单据生命周期的管理方式
前面我们提到了很多”状态”:草稿、待审核、已审核、执行中、关闭……这些状态不是随意定义的,它们构成了一个状态机。理解状态机,是理解 ERP 业务逻辑的关键。
一、什么是状态机
状态机(State Machine) 是描述一个对象在其生命周期内所有可能状态,以及状态之间转换规则的模型。 以采购订单为例:草稿 → 待审核 → 已审核 → 执行中 → 全部到货 → 关闭
每个状态代表单据的”当前身份”,每种转换代表一个”业务动作”。
二、AperBio ERP 各单据的状态机
2.1 生产订单状态机
创建(10) ──审核──▶ 已审核(20) ──开工──▶ 执行中(30)
│ │
├──取消──────────────────────────────────▶ 取消(00)
└──强制关闭─────────────────────────────▶ 关闭(90)
2.2 生产计划单/采购计划单状态机
草稿(10) ──送审──▶ 待审核(15) ──审核──▶ 已审核(20) ──关闭──▶ 关闭(90)
│ │
├──取消─────────────────┘
└──驳回─────────────────┘
2.3 请购单状态机
草稿(10) ──送审──▶ 待审核(15) ──审核──▶ 待采购(20) ──生成PO──▶ 已采购(30) ──全部入库──▶ 关闭(90)
│ │
├──取消─────────────────┘
└──驳回─────────────────┘
2.4 采购订单状态机
草稿(10) ──审核──▶ 已审核(20) ──执行──▶ 执行中(30) ──全部到货──▶ 全部到货(80) ──关闭──▶ 关闭(90)
│ │
├──取消─────────────────┘
└──强制关闭─────────────▶ 关闭(90)
2.5 到货单状态机
草稿(10) ──审核──▶ 已审核(20) ──待送检(30) ──发起送检──▶ 已送检(40) ──关闭──▶ 关闭(90)
│ │
├──取消─────────────────┘
└──拒收────────────────▶ 到货拒收单(16)
2.6 送检单状态机
草稿(10) ──审核──▶ 待检验(20) ──开始检验──▶ 检验中(30) ──完成检验──▶ 已检验(40) ──关闭──▶ 关闭(90)
2.7 检验单状态机
草稿(10) ──提交──▶ 待审核(15) ──审核──▶ 已审核(20) ──驱动下游──▶ 关闭(90)
2.8 入库单状态机
草稿(10) ──审核──▶ 已审核(20) ──记账──▶ 已记账(30) ──关闭──▶ 关闭(90)
│
└──退库冲销
2.9 不合格品单状态机
草稿(10) ──审核──▶ 已审核(20) ──处理──▶ 已处理(30) ──关闭──▶ 关闭(90)
2.10 退货单状态机
草稿(10) ──审核──▶ 已审核(20) ──已退货(30) ──关闭──▶ 关闭(90)
2.11 出库单状态机
草稿(10) ──审核──▶ 已审核(20) ──已出库(30) ──关闭──▶ 关闭(90)
三、状态机的设计原则
- 终结态不可逆:一旦进入关闭/取消状态,不可再执行任何操作
- 状态跳跃禁止:不允许从非当前状态直接跳转到目标状态
- 权限绑定:某些状态转换需要特定角色权限
- 后置动作:状态转换后自动执行的业务逻辑(如更新台账)
四、小结
状态机是 ERP 单据管理的核心模型。它确保了:- 业务流程的方向性(不能回退)
- 操作的可控性(不同状态做不同事)
- 数据的完整性(状态转换有完整记录)
这是「ERP 业务知识系列」第 10 篇,系列共 15 篇。