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

Odoo中如何将销售订单自定义one2many字段值传递到发票对应字段

Odoo销售订单自定义头one2many字段传递到发票的实现方案

原生_prepare_invoice方法仅用于构造发票头的基础字段值,_prepare_invoice_line仅用于处理标准销售订单行到发票行的转换逻辑,二者都不包含订单头自定义one2many关联字段的处理逻辑,因此直接重写这两个方法无法实现需求。

实现步骤

  • 第一步:确认字段对应关系
    提前定义好两套模型字段:

    1. 销售订单侧:sale.order模型新增one2many字段x_sale_custom_lines,关联自定义行模型x.sale.custom.line,外键字段为order_id
    2. 发票侧:account.move模型新增one2many字段x_invoice_custom_lines,关联自定义行模型x.account.move.custom.line,外键字段为move_id
      两个自定义行模型的传递字段的类型、约束需保持一致。
  • 第二步:重写销售订单的_create_invoices核心方法
    该方法是点击「创建发票」按钮后的实际执行入口,在原生逻辑生成发票实例后,追加自定义行的写入逻辑即可,示例代码如下:

from odoo import models

class SaleOrderInherit(models.Model):
    _inherit = 'sale.order'

    def _create_invoices(self, grouped=False, final=False, date=None):
        # 执行原生逻辑获取生成的发票记录
        moves = super()._create_invoices(grouped=grouped, final=final, date=date)
        
        for order in self:
            # 适配合并开票场景:筛选出当前订单关联的所有发票
            related_moves = moves.filtered(lambda m: order in m.line_ids.sale_line_ids.order_id)
            for move in related_moves:
                # 构造发票自定义行的写入值列表
                custom_line_vals = []
                for sale_custom_line in order.x_sale_custom_lines:
                    custom_line_vals.append((0, 0, {
                        # 按实际业务需求补充字段映射
                        'x_product_id': sale_custom_line.x_product_id.id,
                        'x_quantity': sale_custom_line.x_quantity,
                        'x_price': sale_custom_line.x_price,
                    }))
                # 写入发票自定义one2many字段
                move.write({'x_invoice_custom_lines': custom_line_vals})
        return moves
  • 第三步:验证逻辑
    升级对应模块后,新建销售订单填写自定义行,点击创建发票即可看到自定义行自动同步到发票的对应字段。

注意事项

  • 如果你的自定义one2many字段绑定在sale.order.line(销售订单行)上,需同步到account.move.line(发票行)的自定义one2many字段,直接在重写的_prepare_invoice_line方法中追加one2many的构造逻辑即可
  • 合并开票场景下需自行调整自定义行的汇总规则,避免重复写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:48:03