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

