如何在Odoo 17采购订单打印按钮添加自定义XLSX报表?
在Odoo 17中添加采购订单自定义XLSX报表的正确步骤
1. 编写XLSX报表生成的Python类
Odoo 17的XLSX报表需要继承ReportXlsxAbstract类实现具体生成逻辑,在模块的report目录下创建purchase_order_report_xlsx.py文件:
from odoo import models from odoo.report.report_xlsx import ReportXlsxAbstract class PurchaseOrderXlsxReport(ReportXlsxAbstract): _name = 'report.module_name.purchase_order_report_xlsx' _description = '采购订单XLSX报表' _inherit = 'report.report_xlsx.abstract' _template = False def generate_xlsx_report(self, workbook, data, orders): # 编写XLSX报表生成逻辑,以下为示例 for order in orders: sheet = workbook.add_worksheet(f"采购订单 {order.name}") # 写入表头 sheet.write(0, 0, '订单编号') sheet.write(0, 1, '供应商') # 写入订单数据 sheet.write(1, 0, order.name) sheet.write(1, 1, order.partner_id.name) # 按需添加更多报表内容
2. 修正XML报表动作配置
Odoo 17已移除旧的binding_type和binding_model_id配置,改用binding_view_types绑定视图,同时需关联Python类的标识:
<odoo> <record id="action_report_purchase_order_es" model="ir.actions.report"> <field name="name">Orden de compra Español</field> <field name="model">purchase.order</field> <field name="report_type">xlsx</field> <!-- 对应Python类中的_name值 --> <field name="report_name">module_name.purchase_order_report_xlsx</field> <!-- 自定义报表文件名模板 --> <field name="report_file">module_name.purchase_order_report</field> <!-- 绑定到采购订单表单视图,使打印按钮显示该报表 --> <field name="binding_view_types">form</field> </record> </odoo>
3. 注册Python类
在模块根目录的__init__.py中导入报表模块:
from . import report
在report/__init__.py中添加:
from . import purchase_order_report_xlsx
4. 模块更新与测试
升级模块后,打开采购订单表单视图,点击打印按钮即可看到自定义的XLSX报表选项。
关键注意事项
report_name必须与Python类中的_name完全匹配- 必须实现
generate_xlsx_report方法处理报表数据写入逻辑 - 仅配置XML而缺少Python报表类会导致报表无法生效
内容的提问来源于stack exchange,提问作者damar
相关产品推荐
相关产品推荐

