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

Odoo 16 Ent自定义报价编号替换原有销售订单编号问题求助

解决Odoo 16销售报表替换报价编号问题

问题原因

你之前的代码只是在报表里新增了一个字段,但原有的销售订单号字段(doc.name)仍未移除,而且字段写法有误(t-field是元素属性,不是文本内容),所以预览和PDF里还是显示旧编号。

正确操作步骤

1. 先搞懂原报表结构

原销售订单报表sale.report_saleorder_document中,显示编号的核心代码是:

<h2 class="mt-4">
    <span t-if="doc.state in ['draft','sent']">Quotation # </span>
    <span t-elif="doc.state == 'sale'">Order # </span>
    <span t-field="doc.name"/> <!-- 这就是显示销售订单号的地方 -->
</h2>

我们要把这里的doc.name替换成你的自定义字段doc.quotation_number。

2. 编写正确的继承代码

两种简单写法,选一种就行:

写法一:仅替换编号字段

直接定位到显示doc.name的span,修改它的t-field属性:

<data inherit_id="sale.report_saleorder_document">
    <!-- 找到显示原订单号的span,替换字段 -->
    <xpath expr="//h2/span[@t-field='doc.name']" position="attributes">
        <attribute name="t-field">doc.quotation_number</attribute>
    </xpath>
</data>

写法二:替换整个标题块

如果需要调整前缀文本(比如修改“Quotation #”的内容),可以直接替换整个h2区域:

<data inherit_id="sale.report_saleorder_document">
    <!-- 替换整个标题区域 -->
    <xpath expr="//h2[@class='mt-4']" position="replace">
        <h2 class="mt-4">
            <span t-if="doc.state in ['draft','sent']">Quotation # </span>
            <span t-elif="doc.state == 'sale'">Order # </span>
            <span t-field="doc.quotation_number"/> <!-- 这里用你的自定义字段 -->
        </h2>
    </xpath>
</data>

3. 验证生效

  • 保存代码后,在Odoo应用列表里找到你的插件,点击升级
  • 打开一个草稿/已发送的报价单,点击预览报表,检查是否显示新的报价编号
  • 如果没生效,做这两步排查:
    • 确认你的quotation_number字段在sale.order模型里已经正确定义,并且对应报价单有值
    • 清除Odoo缓存:进入「设置」→「技术」→「用户界面」→「清除缓存」

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:28:21