You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 15多公司流程自动确认销售订单异常问题求助

Odoo 15多公司销售订单确认流程错乱问题解决办法

问题根源

当同时选中多家公司时,Odoo上下文里的allowed_company_ids是多公司数组,系统会优先使用环境里的**主公司(数组第一个)**的流程逻辑。哪怕调用了with_company,只要主公司没切换,还是会走主公司的流程。只有单独选中公司B时,上下文里仅包含B的ID,才会触发正确的专属流程。

具体解决步骤

1. 强制切换到单公司上下文

调用确认方法前,必须把上下文改成仅包含目标公司B的ID,同时指定company_id为B的ID。代码示例:

# 获取需要确认的B公司销售订单
so_res = self.env['sale.order'].browse(your_so_id)
# 创建仅包含B公司的新环境
target_so_env = self.env['sale.order'].with_context(
    allowed_company_ids=[so_res.company_id.id],
    company_id=so_res.company_id.id
)
# 在新环境中执行订单确认
target_so_env.browse(so_res.id).action_confirm()

2. 检查重写的确认逻辑

如果两家公司的确认流程是通过重写action_confirm实现的,一定要确保代码基于订单自身的company_id做逻辑判断,而非依赖环境中的公司。比如避免以下错误写法:

# 错误写法:依赖环境公司判断流程
if self.env.company.id == company_a_id:
    # A公司流程逻辑
else:
    # B公司流程逻辑

改成基于订单自身公司的判断:

# 正确写法:基于订单所属公司判断流程
if self.company_id.id == company_a_id:
    # A公司流程逻辑
else:
    # B公司流程逻辑

3. 排查OdooBot的初始上下文

在OdooBot执行代码的开头,先打印当前环境的公司信息,确认初始上下文是否默认绑定了公司A:

print("当前allowed_company_ids:", self.env.context.get('allowed_company_ids'))
print("当前环境company_id:", self.env.company.id)

如果初始环境默认是公司A,必须先切换上下文再执行订单确认操作。

4. 避免多公司选中状态下操作

自动生成B公司的销售订单后,直接切换到仅B公司的上下文执行确认,不要保留多公司选中的状态,从根源上避免流程冲突。

内容的提问来源于stack exchange,提问作者Johan Pham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:10:16