### 打印报表
Odoo 8附带了一个基于新的报表引擎 [QWeb](https://www.odoo.com/documentation/9.0/reference/qweb.html#reference-qweb), [Twitter Bootstrap](http://getbootstrap.com/) 和 [Wkhtmltopdf](http://wkhtmltopdf.org/).
报告是一个组合的元素:
* 一个 `ir.actions.report.xml`, 一个 `<report>` 提供了快捷元素,它为报表设置了各种基本参数(默认类型,是否应该将报表保存到数据库中,…)
~~~ xml
<report
id="account_invoices"
model="account.invoice"
string="Invoices"
report_type="qweb-pdf"
name="account.report_invoice"
file="account.report_invoice"
attachment_use="True"
attachment="(object.state in ('open','paid')) and
('INV'+(object.number or '').replace('/','')+'.pdf')"
/>
~~~
* 一个标准 [QWeb view](https://www.odoo.com/documentation/9.0/reference/views.html#reference-views-qweb) 为实际报告:
~~~ xml
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="page">
<h2>Report title</h2>
</div>
</t>
</t>
</t>
~~~
标准的渲染上下文提供了一些元素,最重要的:
``docs``
报告打印的记录
``user``
用户打印报表
因为报告是标准的网页,他们都可以通过一个URL和输出参数可以通过操纵这个URL,例如*发票*报告的HTML版本 通过[http://localhost:8069/report/html/account.report_invoice/1](http://localhost:8069/report/html/account.report_invoice/1) (如果 `account` 已安装)和PDF版 通过[http://localhost:8069/report/pdf/account.report_invoice/1](http://localhost:8069/report/pdf/account.report_invoice/1).
Danger
看来你的PDF报告失踪的风格(即文本出现,但风格/布局不同于HTML版),可能你的[ wkhtmltopdf ](http://wkhtmltopdf.org/)过程无法达到您的Web服务器下载。
如果你看看你的服务器日志,发现CSS样式不被下载时生成一个PDF格式的报告,当然这是个问题。
wkhtmltopdf ]的[(http://wkhtmltopdf.org/)过程将使用`网站。基地。URL `系统参数为*根路径*所有链接的文件,但此参数自动更新每次管理员登录。如果您的服务器位于某种代理后面,那将无法访问。你可以通过添加一个系统参数来解决这个问题:
* `report.url`,指向一个URL可从您的服务器(可能`http://localhost:8069` 或类似的东西)。它将用于这个特殊用途。
* `web.base.url.freeze`, 当设置为 `True`,将停止自动更新 `web.base.url`.
练习
创建会话模型的报告
为每一个会话,它应该显示会话的名称,其开始和结束,并列出会议的参加者。
*openacademy/__openerp__.py*
~~~ python
'views/openacademy.xml',
'views/partner.xml',
'views/session_workflow.xml',
'reports.xml',
],
# only loaded in demonstration mode
'demo': [
~~~
*openacademy/reports.xml*
~~~ xml
<openerp>
<data>
<report
id="report_session"
model="openacademy.session"
string="Session Report"
name="openacademy.report_session_view"
file="openacademy.report_session"
report_type="qweb-pdf" />
<template id="report_session_view">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="report.external_layout">
<div class="page">
<h2 t-field="doc.name"/>
<p>From <span t-field="doc.start_date"/> to <span t-field="doc.end_date"/></p>
<h3>Attendees:</h3>
<ul>
<t t-foreach="doc.attendee_ids" t-as="attendee">
<li><span t-field="attendee.name"/></li>
</t>
</ul>
</div>
</t>
</t>
</t>
</template>
</data>
</openerp>
~~~