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

如何在Odoo销售订单表单中添加自定义产品汇总报表按钮?

Odoo自定义报表按钮不显示问题排查与解决

问题背景

开发Odoo自定义模块,需在销售订单表单添加名为“Order Product Summary”的自定义报表按钮,生成产品数量聚合的汇总报表。已完成模块基础创建,但按钮未在界面显示。

当前代码

__manifest__.py

{
    'name': 'Order Product Summary Report',
    'version': '1.0',
    'depends': ['sale'],  
    'data': [
        'report/report_product_summary.xml',
    ],
    'installable': True,
    'application': False,
}

sale_order_summary.py

from odoo import models, fields

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

    product_summary_count = fields.Integer(string="Product Summary Count", compute="_compute_product_summary")

    def _compute_product_summary(self):
        for order in self:
            order.product_summary_count = sum(line.product_uom_qty for line in order.order_line)

report_product_summary.xml

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <!-- Report Template -->
    <template id="report_product_summary_template">
        <t t-call="web.external_layout">
            <div class="page">
                <h2>Order Product Summary Report</h2>
                <table class="table table-sm table-hover">
                    <thead>
                        <tr>
                            <th>Product</th>
                            <th>Quantity</th>
                        </tr>
                    </thead>
                    <tbody>
                        <t t-foreach="doc.order_line" t-as="line">
                            <tr>
                                <td><span t-field="line.product_id.name"/></td>
                                <td><span t-field="line.product_uom_qty" /></td>
                            </tr>
                        </t>
                    </tbody>
                </table>
            </div>
        </t>
    </template>

    <!-- Report Action -->
    <report
        id="action_report_product_summary"
        string="Order Product Summary"
        model="sale.order"
        report_type="qweb-pdf"
        name="order_product_summary_report.report_product_summary_template"
        file="order_product_summary_report.report_product_summary_template"
        print_report_name="'Order Product Summary - %s' % (object.name)"
    />
</odoo>

已排查项

  • 检查XML语法无错误
  • 确认用户拥有必要权限
  • 查看服务器日志无相关警告或错误

提问

还需要采取哪些步骤才能让自定义报表按钮显示在Odoo销售订单表单中?有哪些常见陷阱或错误需要注意?


解决方案

1. 显式添加报表按钮到表单视图

Odoo不会自动将报表按钮插入表单视图,需通过XML继承销售订单表单视图,指定位置添加按钮。在report_product_summary.xml中补充以下代码:

<!-- 继承销售订单表单视图,插入报表按钮 -->
<record id="view_sale_order_form_inherit_summary" model="ir.ui.view">
    <field name="name">sale.order.form.inherit.summary</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="arch" type="xml">
        <!-- 定位到表单的按钮组,插入自定义报表按钮 -->
        <xpath expr="//div[@name='button_box']" position="inside">
            <button name="%(order_product_summary_report.action_report_product_summary)d"
                    string="Order Product Summary"
                    type="action"
                    class="btn-primary"/>
        </xpath>
    </field>
</record>
  • 若目标Odoo版本中button_box节点不存在,可通过开发者模式查看表单结构,调整XPath定位到合适的按钮容器节点。

2. 确认模块加载与权限配置

  • 升级模块:修改代码后必须在Odoo应用列表中找到自定义模块,点击升级确保新代码生效。
  • 权限检查:进入开发者模式,打开设置 > 技术 > 动作 > 报表,找到你的报表动作,确认用户所属权限组已被授予该报表的访问权限(可在权限组的“报表”标签中添加)。

3. 清理缓存

  • 升级模块后,点击开发者模式中的清除缓存按钮,或手动清除浏览器缓存,避免旧视图缓存导致按钮不显示。

常见陷阱

  • XPath定位错误:表单视图结构因Odoo版本不同有差异,XPath表达式写错会导致按钮插入失败,需通过开发者模式的视图管理工具确认目标节点路径。
  • 报表动作XML ID引用错误:按钮中%(module_name.action_id)d的模块名和动作ID必须与实际定义一致,否则按钮无法关联报表。
  • 未升级模块:修改XML或Python代码后未及时升级,新代码未被Odoo加载。
  • 权限遗漏:即使报表动作存在,若用户权限组未授权访问该报表,按钮不会显示。
  • 报表模板命名空间错误:报表动作的name和file属性需严格遵循模块名.模板ID的格式,否则无法找到模板。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:27:34