本文目录导读:

Odoo的报告与打印系统是其核心功能之一,它允许用户将业务数据(如销售订单、发票、库存报告等)以PDF或HTML格式输出,并进行自定义排版,以下是关于Odoo报告与打印的全面解析,包括基础操作、自定义开发以及常见问题。
Odoo报告的核心机制
-
报告模板:
- Odoo使用 QWeb 作为模板引擎(类似Django模板或Jinja2)。
- 报告模板是标准的HTML文件,结合Odoo的QWeb指令(如
<t t-esc="...">、<t t-foreach="...">等)。
-
数据源:
- 报告基于 Odoo模型(Model),例如
account.move(发票)、sale.order(销售订单)。 - 通过
report动作绑定到特定的模型和模板。
- 报告基于 Odoo模型(Model),例如
-
PDF生成:
- 默认使用 Wkhtmltopdf 将HTML模板转换为PDF(需要系统安装Wkhtmltopdf)。
- Odoo 17+ 支持 Chromium 渲染(更现代、性能更好)。
-
打印操作:
- 通常在表单视图或列表视图中点击 “打印” 按钮。
- 系统会调用报告动作,生成PDF或直接打开网页打印预览。
如何创建自定义报告(开发示例)
假设你需要为 “客户合同”(contract.contract模型)创建一个PDF报告。
创建QWeb模板文件
在自定义模块中创建文件:
my_module/
├── reports/
│ ├── __init__.py
│ ├── __manifest__.py
│ └── report_contract_template.xml
在 在QWeb模板中,可以使用 在模板中直接调用模型的Python方法: 使用 通过 使用 从Odoo 17开始,官方推荐使用 Chromium 替代wkhtmltopdf,优点是: 启用方式: 掌握了这些技巧,你就可以自由设计Odoo中的各种业务报告,从简单的列表到复杂的多表联查PDF,如果需要更具体的代码示例或解决特定报错,欢迎提供更多细节!
report_contract_template.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- 定义报告动作 -->
<report id="report_contract_pdf"
string="合同报告"
model="contract.contract"
report_type="qweb-pdf"
name="my_module.report_contract_template"
file="my_module.report_contract_template"
print_report_name="'合同-%s' % (object.name)"
/>
<!-- 定义报告模板内容 -->
<template id="report_contract_template">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<div class="page">
<h1><t t-esc="o.name"/></h1>
<p>客户: <t t-esc="o.partner_id.name"/></p>
<p>签署日期: <t t-esc="o.date_start"/></p>
<table class="table table-bordered">
<tr><th>条款描述</th><th>金额</th></tr>
<t t-foreach="o.line_ids" t-as="line">
<tr>
<td><t t-esc="line.description"/></td>
<td><t t-esc="line.amount"/></td>
</tr>
</t>
</table>
</div>
</t>
</t>
</template>
</data>
</odoo>
初始化报告模块
__init__.py中导入报告XML:from . import report_contract_template
在清单文件(manifest)中注册
'data': [
'reports/report_contract_template.xml',
]
更新模块并测试
高级定制技巧
动态条件与分组
t-if、t-foreach进行条件渲染和循环。使用CSS样式
<link>标签)。调用Python方法获取数据
<t t-esc="o._compute_total()"/>多语言支持
t-esc或t-translation标签实现翻译。打印时动态文件名
print_report_name属性定义动态PDF文件名(支持Python表达式)。多级报告(子报告)
<t t-call="other_template_id"/>嵌套子模板。
常见问题与故障排除
PDF无法生成(报错“wkhtmltopdf not found”)
sudo apt install wkhtmltopdfPDF中文乱码
fonts-wqy-zenhei)。报告数据为空
model和name属性是否匹配。模板不更新
未来趋势:Chromium渲染
report_url = False,系统会自动使用Chromium(需安装playwright库)。
实用资源