Odoo V15:如何区分生产订单(MO)与欠料订单,避免自动化动作误触发
在Odoo V15中区分生产订单与欠料订单的方法
欠料订单(Backorder)与原始生产订单同属mrp.production模型,可通过以下方式区分,确保自动化动作仅作用于原始生产订单:
核心区分字段:backorder_id
Odoo中,欠料订单会通过backorder_id字段关联到其对应的原始生产订单,而原始生产订单的backorder_id为空。以此为判断依据,可精准筛选目标订单。
1. 自动化规则中添加过滤条件
在配置自动化规则时,在过滤条件中添加:
- 字段:
Backorder(对应模型字段backorder_id) - 条件:
is not set
这样规则只会触发在backorder_id为空的原始生产订单上。
2. 服务器动作中加入判断逻辑
如果是通过Python代码执行的服务器动作,可在代码开头加入判断:
# 仅处理原始生产订单,跳过欠料订单 if record.backorder_id: return # 后续执行你的自动化动作逻辑 # ...
3. 自定义计算字段(可选)
如果需要在视图或更多场景中直观区分,可给mrp.production模型添加一个计算字段:
from odoo import models, fields class MrpProduction(models.Model): _inherit = 'mrp.production' is_backorder = fields.Boolean(compute='_compute_is_backorder', string='Is Backorder') def _compute_is_backorder(self): for rec in self: rec.is_backorder = bool(rec.backorder_id)
添加后,可在自动化规则、视图筛选中直接使用is_backorder = False作为条件,更直观易读。
验证方法
可进入生产订单列表视图,添加Backorder字段列:
- 原始生产订单的该列值为空
- 欠料订单的该列值会显示对应的原始生产订单名称,以此验证区分逻辑的准确性。
内容的提问来源于stack exchange,提问作者kayalotta
相关产品推荐
相关产品推荐

