制造现场的质检最怕“填过表”与“放行了工单”之间没有硬连接,最后表单是一回事,产线状态又是另一回事。
这篇文章主要参考了以下企业版源码与测试入口:
enterprise/quality_mrp_workorder_worksheet/models/quality.pyenterprise/quality_mrp_workorder_worksheet/tests/test_shopfloor.py
一、这个模块真正解决的不是表面动作,而是跨模块语义对齐
quality_mrp_workorder_worksheet 把质量检查从一个 yes/no 动作扩展成结构化 worksheet:检查项何时进入 action_worksheet_check,谁来 fill sheet,填完后 shopfloor 又如何推进下一状态。
如果只看 UI,很容易把它理解成一个按钮、一张表或一个新视图。但从 quality_mrp_workorder_worksheet 的模型、测试和桥接关系看,官方真正关心的是:前台动作发生以后,后端主链路能不能继续保持同一套业务语义。
二、核心机制链路
1. 质检先进入 worksheet check 动作
QualityCheck.action_worksheet_check() 说明这类检查不是普通 pass/fail,而是要先打开结构化 sheet。
2. 填写动作是独立状态跳转
action_fill_sheet() 的存在提醒我们,打开 worksheet 与提交 worksheet 不是一个动作,中间还有现场填写过程。
3. shopfloor 测试覆盖最终联动
test_worksheet_quality_check 说明官方关心的不是表单能不能弹出来,而是它是否真的影响工位端质检结果和后续状态。
三、最容易被误解的边界
- 把 worksheet 质检当作普通弹窗附件。
- 打开了 worksheet 就认为检查完成,忽略 fill sheet 提交。
- 工位端状态不消费 worksheet 结果,导致流程断开。
这些误解之所以常见,往往是因为大家只看见“入口动作”,却没有继续追到模型方法、状态切换、聚合口径和测试场景里去看 Odoo 究竟把什么当成事实、把什么当成辅助信息。
四、实施与排查时,建议按这个顺序看
- 先查 quality check 类型是否走 worksheet。
- 再看 fill sheet 后记录了哪些结果。
- 最后验证 shopfloor 状态是否因该结果推进或阻塞。
对企业版功能来说,排查顺序非常重要。很多看似是“结果不对”的问题,真正根因往往更早:字段上下文没带过去、桥接对象没建、状态机没推进、或者权限/公司边界一开始就错了。
五、结论
工单质检 worksheet 的真正意义,是让现场填写动作成为质量状态机的一部分,而不是留下一份无人消费的电子表单。
DISCUSSION
评论区