【OpenERP】Report 生成

以模塊oecnj_trainning爲例,模塊路徑: ~/openerp/addons/oecn_training/ ,如下簡寫爲 path/oecn/

Report生成方法:(手寫) rml + reportlab生成.

實踐步驟:

1. 在 path/oecn/oecn_report.xml ,
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <report
                id="report_oecn_training_lesson" # 標籤 id
                name="oecn.lesson" # 標籤名稱, 是下文中oecn_print.py中的 "'report.oecn.lesson"中除去前面report.的部分.
                model="oecn.training.lesson" # 標籤匹配的model
                rml="oecn_training/report/oecn_report.xml" # 使用到的 rml 文件
                string="打印課程" # 客戶端上 顯示此報表 的對應菜單的文本
                header="False" # 是否在本報表中顯示公司統一的表頭和表尾
                auto="False" />
    </data>
</openerp>

2. 在 path/oecn/__openerp__.py, 注意update_xml的值
# -*- coding: utf-8 -*-
{
        "name" : "OECN Training", #模塊名
    "version" : "1.0", #模塊版本
    "description" : 'OECN Training Demo', #模塊說明
    "author" : "Shine IT", #做者
    "website" : "http://www.openerp.cn", #網址
    "depends" : [], #依賴的模塊
    "update_xml" : ["lesson_view.xml",
                                        "lesson_report.xml",
                                        "report/oecn_report.rml"
        ], #模塊更新的時候會讀入的文件
    "installable" : True, #能否安裝
    "category":'Generic Modules/Others' #模塊類型
}




3. 新增path/oecn/report/ 文件夾, 其下有 __init__.py, oecn_print.py, oecn_report.rml 文件,
 3.1) __init__.py:
  import oecn_print

 3.2) oecn_print.py:
import time
from openerp.report import report_sxw

# rml parser 類
class rpt_oecn_training_lesson(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(rpt_oecn_training_lesson, self).__init__(cr, uid, name, context)
        self.localcontext.update({"time": time,})
        
report_sxw.report_sxw('report.oecn.lesson', # 對象的內部名字,能夠任意取, 以"report."開頭
                      'oecn.training.lesson', # 與報表想關聯的對象(model),報表數據經過該對象訪問.
                      'addons/oecn_training/report/oecn_report.rml', # 與報表關聯的RML文件名及路徑.
                      parser=rpt_oecn_training_lesson, # 解析rml文件的對象。
                      header=False) # 表示要不要在本報表中顯示公司統一的表頭和表尾。


 3.3) oecn_report.rml , <template> 標籤下必須對頁面進行設置,不然在OpenERP運行會報錯。
<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<document filename="report.pdf">
    <!-- 報表頁面設置 -->
    <template>
        <pageTemplate id="main">
            <frame id="first" x1="72" y1="72" width="451" height="698"/>
        </pageTemplate>
    </template>
    
    <!-- 報表頁面樣式設置 -->
    <stylesheet>
        <paraStyle name="Standard" fontName="Helvetica" fontSize="14.0" leading="16.0" alignment="CENTER" />
    </stylesheet>
    
    <!-- 報表頁面正文-->
    <story>
        <para>[ repeatIn(objects,'o') ]</para>
        <para style="Standard">介紹</para>
        <para style="Standard">[ o.name ]</para>
    </story>
</document>

note:
 將 repeatIn( ) 放在 <section> tag 下,內容迭代不分頁
 將 repeatIn( ) 放在 <story> tag 下,內容迭代分頁
測試發現,objects 參數 必須在 <story>下,否則會報錯。

4. 升級該模塊, 就能夠打印report。 因爲 OpenERP 對中文支持不夠, 輸出的pdf文檔會顯示爲黑塊。 安裝第三方模塊oecn_base_fonts(安裝說明)便可解決中文打印的問題:web

相關文章
相關標籤/搜索