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

Odoo 13复制销售订单时Many2many关联重复问题排查求助

Odoo 13销售订单复制异常关联原发票的问题定位方案
  • 排查第三方模块的字段继承与重定义

    • 用ir.model.fields搜索sale.order.line的invoice_lines和account.move.line的sale_line_ids,检查是否有第三方模块修改了copy=False属性,或者新增同名字段覆盖原设置。直接在数据库执行查询:
      SELECT name, model, copy, module FROM ir_model_fields WHERE name IN ('invoice_lines', 'sale_line_ids') AND model IN ('sale.order.line', 'account.move.line');
      
    • 重点关注module列非sale和account的记录,这些都是第三方模块做出的修改。
  • 追踪复制操作的完整调用链

    • 重写sale.order的copy方法,在关键节点打印调用栈,代码示例:
      from odoo import models, api
      import traceback
      
      class SaleOrder(models.Model):
          _inherit = 'sale.order'
      
          @api.returns('self', lambda value: value.id)
          def copy(self, default=None):
              print("=== 销售订单复制开始 ===")
              traceback.print_stack()
              res = super(SaleOrder, self).copy(default=default)
              print("=== 新订单关联的发票行: ", res.order_line.mapped('invoice_lines'))
              return res
      
    • 执行复制操作后,查看控制台输出的调用栈,就能定位是否有第三方模块在复制过程中主动关联了原发票。
  • 检查自动触发的业务逻辑

    • 排查第三方模块是否在销售订单/订单行复制完成后,通过onchange、计算字段或者定时任务自动关联原发票。可以临时禁用所有第三方模块,逐个启用排查,找到触发问题的模块。
    • 重点盯涉及发票与销售订单关联的模块,比如自动生成发票、销售订单二次确认类的插件。
  • 数据库层面直接检查关联数据

    • 查询销售订单行与发票行的关联表sale_order_line_invoice_rel,复制新订单后,查看是否有新增的关联记录,记下对应的order_line_id和invoice_line_id,再通过ir_model_data查询这些记录所属的模块,就能定位关联逻辑的来源:
      SELECT * FROM sale_order_line_invoice_rel WHERE order_line_id IN (SELECT id FROM sale_order_line WHERE order_id = 新订单ID);
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:33:18