### 打印报表 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> ~~~