Odoo13创建报表
前提:参考Odoo13创建一个基本模块创建好Academy模块
1.安装并配置wkhtmltopdf
- 安装windows版wkhtmltopdf ,按照官网要求安装最新版的wkhtmltopdf,当前最新版为0.12.5;
- 配置wkhtmltopdf,在window中配置环境变量,在系统变量path中添加wkhtmltopdf的bin路径,配置完成也可以在命令行测试
- 重启,如果在启动日志中看到You need Wkhtmltopdf to print a pdf version of the report,则在配置完环境变量后重启PyCharm或者重启电脑即可,会看到日志输出Will use the Wkhtmltopdf binary at X:\xxx\wkhtmltopdf\bin\wkhtmltopdf.exe
2.创建报表
- 创建report文件夹 ,在academy模块下创建report文件夹
- 创建声明文件 ,在report文件夹下创建一个teachers_report.xml文件
- 添加report标签,在teachers_report.xml文件中添加report标签,model属性的值对应academy的teachers,report_type可以是qweb-html或qweb-pdf,qweb-pdf是直接下载,因此使用qweb-html先进行浏览再进行下载,name属性的值为这个报表使用到的模板
- 添加template模板,在teachers_report.xml文件中添加name属性的值声明的模板,其中id的值就为name中声明的值,template模板也可以单独写在一个xml文件中,但是要注意文件引用顺序
<?xml version="1.0"?>
<odoo>
<report
id="action_academy_teachers_report"
model="academy.teachers"
string="报表"
report_type="qweb-html"
name="academy.teachers_report_template"
/>
<template id="teachers_report_template">
<t t-call="web.html_container">
<div class="page">
<h2>Teachers Info</h2>
<br/>
<table>
<tr><th>id</th><th>name</th></tr>
<t t-foreach="docs" t-as="o">
<tr><td><span t-field="o.id"/></td><td><span t-field="o.name"/></td></tr>
</t>
</table>
</div>
</t>
</template>
</odoo>
- 添加声明文件,将teachers_report.xml加入到__manifest__.py的data数组里
'data': [
'security/ir.model.access.csv',
'views/views.xml',
'views/templates.xml',
'reports/teachers_report.xml',
],
- 重启应用并更新模块,通过命令启动应用并快速更新模块,可以添加-d和-u参数指定更新某个数据库的某个模块,这样就不需要在页面上进行更新模块
python odoo-bin -r root -w admin --addons-path=addons,my-modules --db-filter=^odoo$ -d odoo -u academy
3.访问报表
- 打开academy模块,打开academy模块,并勾选所有记录,此时会看到多出了一个打印按钮,点击可以看到我们添加的报表功能
- 打开报表,打开报表后,可以看到我们使用teachers_report.xml声明的报表及模板生成的打印格式
- 官网参考文档,https://www.odoo.com/documentation/13.0/reference/reports.html
- 模块源码xia载,https://download.youkuaiyun.com/download/u010520912/12027109
4.实现打印预览
- 修改report配置,odoo的打印功能默认是需要下载pdf的,我们修改report配置添加file和print_report_name,并修改report_type为qweb-pdf,注意print_report_name指定的文件名不能包含中文
<report
id="action_academy_teachers_report"
model="academy.teachers"
string="报表"
report_type="qweb-pdf"
name="academy.teachers_report_template"
file="academy.teachers_report"
print_report_name="'%s' % (object.name)"
/>
- 下载并添加预览模块,prt_report_attachment_preview
http://www.odoo.com/apps/modules/11.0/prt_report_attachment_preview/ - 更新模块并查看报表,即可实现打印预览