1. 程式人生 > >Odoo11新增列印選項及自定義報表

Odoo11新增列印選項及自定義報表

       今天研究Odoo中選中一條資料進行列印,如何建立對應的列印按鈕,以及點選相應的按鈕顯示相應的要列印的介面,具體如下圖所示:

首先需要在模組中建立report目錄,例如官方檔案所示:

     

       其實點選看看官方的模組式怎麼寫的就大概明白怎麼回事了。這裡我用自己的模組大概說一下,也方便以後忘記了可以隨時回來看到,report目錄結構都基本類似。在bn_oracle_report_pzqweb.py中寫了個測試的

其中get_report_values()方法是必須寫的,因為在對應的xml檔案中需要用到報表所需的資料,方法中的docids就是你選擇需要列印的資料的id集合。

用self.env.cr.execute()這個方法執行了原生的SQL語句。

return self._cr.dictfetchall() #返回字典型結果集。

return self._cr.fetchall() #返回列表型結果集。

bn_oracle_report_pzqweb.xml中

<!--測試-->
    <report
            id="action_bn_oracle_report_pzqweb3"
            string="憑證報表測試"
            model="bn.oracle.interface.pz.master"
            report_type="qweb-html"
            name="bn_oracle.report03"
            file="bn_oracle.report03"/>

string: 在列印按鈕那裡的顯示名稱 

id:外id標識

name: 完整主模板名稱 模組名.主機板模名稱  用於管理和呼叫

file: 完整模板檔名 模組名.模板檔名  用於更好地關聯模板

model:相關的模型顯示在那個模組進行列印報表 通常在各檢視中的列印那裡會出現

report_type: 報表型別 是 qweb-pdf 或 qweb-html

       還要有一個對應的報表模板,即點選憑證報表測試後顯示的要列印的介面。可以看到其中用到head.xxx,lines_data.xxx都是同過之前py檔案獲得並返回的資料。

<!--測試-->
    <template id="report03">
        <t t-call="web.html_container">
            <t t-call="web.external_layout">
                <div class="page">
                    <table width="80%">
                        <tbody>
                            <tr>
                                <td>憑證編號:
                                    <t t-esc="heard.pz_sequence"/>
                                </td>
                                <td>日期:
                                    <t t-esc="heard.throw_date" t-options='{"widget": "date"}'/>
                                </td>
                            </tr>

                            <tr>
                                <td>Oracle憑證號:
                                    <t t-esc="heard.strjournalname"/>
                                </td>
                                <td>拋轉狀態:
                                    <t t-esc="heard.oracle_state"/>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                    <br/>
                    <table class="table table-condensed" width="100%">
                        <thead>
                            <th width="15%">科目</th>
                            <th width="12%">部門</th>
                            <th width="10%">人員</th>
                            <th width="8%">專案</th>
                            <th width="5%">借方</th>
                            <th width="5%">貸方</th>
                            <th width="45%">摘要</th>
                        </thead>
                        <tbody>
                            <t t-foreach="lines_data" t-as="o">
                                <tr>
                                    <td>
                                        <t t-esc="o[2]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[3]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[4]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[5]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[6]" t-options='{"widget": "float", "precision": 2}'/>
                                    </td>
                                    <td>
                                        <t t-esc="o[7]" t-options='{"widget": "float", "precision": 2}'/>
                                    </td>
                                    <td>
                                        <t t-esc="o[8]"/>
                                    </td>
                                </tr>
                            </t>
                            <tr>
                                <td>

                                </td>
                                <td>
                                    <strong>合 計:</strong>
                                </td>
                                <td>

                                </td>
                                <td>

                                </td>
                                <td>
                                    <strong>
                                        <t t-esc="sum(line[6] for line in lines_data)"
                                           t-options='{"widget": "float", "precision": 2}'/>
                                    </strong>
                                </td>
                                <td>
                                    <strong>
                                        <t t-esc="sum(line[7] for line in lines_data)"
                                           t-options='{"widget": "float", "precision": 2}'/>
                                    </strong>
                                </td>
                                <td>

                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </t>
        </t>
    </template>

到這裡基本就ok了,可能寫的比較模糊,剛開始寫部落格,有什麼疑問可以大家討論~

對了,還可以設定列印的紙張,這個可以再odoo執行後用管理員登入,然後選擇啟用開發者模式,在設定中報告中設定。

        可以在紙張型別中選擇想列印的紙張格式,紙張格式也可以用自帶的也可以自己設定,但只有在報表型別選擇為PDF時才顯示,html型別想用A4橫向的話可以先切換為PDF型別,選擇了對應的紙張格式後再把報表型別改回html也可生效。