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
相关产品推荐
相关产品推荐

