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

