昨天交大家教建立完報表的model後,要換來建立報表的模板了。
範例如下:
<report
id="idx_repair_report"
string="維修單"
model="idx.repair"
report_type="qweb-pdf"
name="idx_interview.idx_repair_template"
file="idx_interview.idx_repair_template"
/>
<template id="idx_repair_template">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="web.external_layout">
<div class="page">
<h4>維修單</h4>
<p t-field="o.name"/>
<table class="table table-sm table-bordered">
<tr>
<td>
<strong>客戶</strong>
</td>
<td>
<span t-field="o.partner_id"/>
</td>
<td>
<strong>報修日期</strong>
</td>
<td>
<span t-field="o.repair_date"/>
</td>
</tr>
<tr>
<td>
<strong>報修原因</strong>
</td>
<td>
<span t-field="o.reason"/>
</td>
</tr>
</table>
<h5>維修內容</h5>
<table class="table table-sm">
<thead>
<tr>
<th>內部編號</th>
<th>名稱</th>
<th>數量</th>
<th>單價</th>
<th>合計</th>
</tr>
</thead>
<tbody>
<tr t-foreach="o.repair_detail" t-as="detail">
<t>
<td>
<span t-field="detail.product_id.name"/>
</td>
<td>
<span t-field="detail.default_code"/>
</td>
<td>
<span t-field="detail.qty"/>
</td>
<td>
<span t-field="detail.price_unit"/>
</td>
<td>
<span t-field="detail.amount"/>
</td>
</t>
</tr>
</tbody>
</table>
</div>
</t>
</t>
</t>
</template>
<report>
內含的參數:
<template>
中設定的id有關,固定設定為model名稱 + template的id
。<template>
中設定的id有關,固定設定為model名稱 + template的id
。<field name="print_report_name">'%s' % (object.name)</field>
<template>
為報表的模板,在撰寫某些語法時與HTML有點相像,但有些css或style不盡相同,下面簡單的介紹報表中常見的幾個部分:
<t>
:為odoo的框架,用來處理報表上各欄位的值。<t t-foreach='' t-as=''>
:用來對資料做for迴圈處理,若同時傳遞多筆資料時,報表可依每筆資料分開顯示。<t t-call>
:用來call其他模板,通常用於讓報表加上基本的header與footer記得撰寫完report的模板後,要在__menifest__.py中的data加上report模板檔案的路徑,才會在畫面上看到列印報表的按鈕。
根據上面的範例,列印出來的報表會長這個樣子:
odoo的報表部分就先到這邊。