LiteMES 第 7 天:取消工单时,产品和物料到底怎么处理
本文记录 LiteMES 第 7 天的工单状态机设计过程。当前完成的是业务与五项对齐设计,尚未进入源码实现。
一、工单取消不是删除
制造现场会出现客户取消、工程变更、长期缺料、设备故障或质量风险。此时不能直接删除工单,因为已经开工的产品、设备记录、参数、质检结果、物料批次和操作记录都已经成为生产事实。
因此,生产中的工单必须先暂停、盘点,再决定是否可以关闭。草稿或已下发但没有任何执行事实的工单,才允许直接进入“已取消”。
二、不要把产品、状态和质量混成一个分类
电控箱控制器 A 型始终是同一个产品。它在生产过程中可能是未开工、在制、待检、合格、不合格、返修或报废,但这些是执行或质量事实,不是新产品类型。
LiteMES 因此分开处理:产品主数据回答“生产什么”;工单和工序执行回答“做到哪里”;质量记录回答“是否合格”;订单处置回答“取消后怎么处理”。这个分层能避免一个状态字段既表示生产进度、又表示质量结论、还表示订单去向。
三、取消前先做四类数量盘点
计划数量 = 合格完成品 + 在制品 + 已开工不良/待判定品 + 未开工剩余例如计划 40 台,18 台合格完成、5 台在制、2 台待判定、15 台尚未开工:
- 18 台继续保留为完成事实,即使正在产线等待包装或入库;
- 5 台在制品要记录所在工序、批次、物料、设备和质量状态;
- 2 台待判定品要进入质检、隔离、返修或报废等后续流程;
- 15 台未开工需求才可以取消或转单。
在制品并不必然报废。它可能继续完成,也可能转入返修、隔离或报废。第一版的状态机不替代这些流程,但会阻止系统在它们尚未处理时提前关闭工单。
四、备料也必须结算
工单取消常被遗漏的部分是物料。已备料不代表已消耗:
- 已备料、未投料的物料可以退料、转移或暂留在线边;
- 已投料但未安装的物料需要判断是否可退、隔离、损耗或转移;
- 已安装或已消耗的物料保留消耗事实,不能当作普通退料;
- 拆解、损坏和不合格物料需要留下损耗、报废或质量处置记录。
因此,第 7 天新增的设计不是把“退料数量”写回工单,而是把备料、投料、消耗、退料、转移、损耗和隔离都作为独立的关系型物料事实。这样既能知道一个批次物料最终去了哪里,也不会覆盖生成工单时冻结的 BOM 需求。
MES 记录现场执行事实;WMS 或 ERP 负责正式库存和库存凭证。LiteMES 第一版会记录退料/转移及外部凭证信息,但不自动回冲库存。
五、提前关闭的真正门槛
订单取消提前关闭允许合格完成数量小于计划数量,但不意味着可以跳过结算。关闭前需要确认:
- 未开工剩余已经取消或转单;
- 在制品和待判定品已经独立处理,或工单恢复生产继续完成;
- 已备料、已投料、已消耗、退料、转移和损耗的数量能够解释;
- 必要质检、参数、追溯和工序待办已经清零。
这也是正常关闭和订单取消提前关闭必须使用不同关闭类型的原因:两者都保留完整事实,但统计和责任边界不同。
六、当前边界
当前仅完成可开发设计,不包含数据库脚本、接口、页面或库存集成。返工路由、报废审批、库存自动回冲、跨工单自动转移、ERP/WMS 自动回传将作为后续独立能力补充。
七、今天完成的设计任务
今天已经把七状态迁移、两种关闭类型、产品与状态边界、状态/工序/物料事实分层,以及取消和物料处置的接口页面边界整理为可开发设计。下一步进入源码前,仍需确认数据库选型和统一实施计划,并为数量、物料余额、幂等和并发规则编写测试。