在OpenERP的使用過程中,我們時刻都需要運用報表進行相關數據的打印。OE系統默認的是SXW/RML式的報表模式,它只能默認打印pdf的報表。這對於一些想在後期修改報表的客戶來說是很不方便的。所以我們希望報表引擎可以打印諸如excel,word等的多種格式報表。經過調查,我們採用aeroo的報表引擎。主要有如下的原因:
第一,報表設計簡單,可視化操作,可進行現場快速修改
第二,支持多種打印格式,同時支持界面導入,不需要硬編碼
但是,aeroo也有缺點,就是必須有openoffice或者libreoffice作爲服務運行。如果沒有他們的話,aeroo就找不到所需的uno運行環境了。不過總的來說,aeroo的優點還是大於缺點的。下面我們就來看一下如何在OE中運用aeroo報表。
二:安裝OpenOffice
上面說了aeroo的運行需要openoffice環境,所以第一步就是安裝openoffice。值得注意的是,我們安裝過後需要把它作爲服務,並且給它開啓8100端口。否則aeroo在安裝的時候是找不到openoffice環境的。具體的步驟如下:
1,在百度搜索openoffice,第二項就是openoffice的下載。也可以去官網http://www.openoffice.org/上下載。
2,解壓下載的壓縮包,點擊setup.py一路下一步,安裝即可完成。
3,到microsoft官網上下載Windows Server 2003 Resource Kit Tools,直接在百度中搜索進入也可。默認裝在C:\Program Files\Windows Resource Kits文件夾中。我們主要用它來製作windows服務。
4,進入命令行,運行以下指令:"C:\Program Files\Windows Resource Kits\Tools\instsrv.exe" OpenOfficeUnoServer "C:\Program Files\Windows Resource Kits\Tools\srvany.exe",注意從引號開始到引號結束(包含引號)全部拷貝進命令行。
5,打開註冊表,找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Openoff
iceUnoServer,在其下新建Parameters項,在Parameters下新建兩個字符串值,分別如下:
Application (:C:\Program Files\OpenOffice 4\program\soffice.exe)
AppParameters(-invisible -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard)也可以建一個soofice.reg的文件將以下內容拷貝進去直接點擊即可:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OpenOfficeUnoServer\Parameters]
"Application"="C:\\Program Files\\OpenOffice 4\\program\\soffice.exe"
"AppParameters"="-invisible -headless -accept=socket,host=127.0.0.1,port=8100;
urp; -nofirststartwizard"
6,打開控制面板\管理工具\服務,找到名爲OpenOfficeUnoServer 的服務,設置屬性啓動類型爲自動,並啓動服務。
7,在cmd下用以下命令查看8100端口是否被監聽,netstat -anp tcp。
8,在python的安裝目錄下D:\software\python\Lib\site-packages新建uno.pth文件,在其中輸入C:\\Program Files\\OpenOffice 4\\program即aeroo運行時所需要的openoffice環境
三,安裝aeroo所需模塊
1,在安裝之前,我們首先需要調查這個庫它依賴哪些模塊。這些內容都在aeroolib的安裝文件setup.py之中。從其中我們看到
install_requires=[
"Genshi >= 0.5",
"lxml >= 2.0"
],
搜索他們分別安裝,在安裝genshi的時候,安裝0.6的版本,0.7的似乎報錯。另外,在安裝aeroolib的時候,會自動下載geshi的egg信息。我們可以進入python的site-packages中查看。雖然有了egg信息,但是並沒有安裝。所以是需要你手動去下載,然後安裝的。
2,安裝aeroolib模塊,下載aeroolib模塊進行安裝
3,Aeroo的運行需要report_aeroo,report_aeroo_ooo兩個模塊,他們可以在http://www.alistek.com/en/component/content/article/110-aeroo-reports-for-openerp-v70x.html官網上下載,也可以在OE官網的應用裏下載。下載下來以後需要修改report_aeroo的ExtraFunctions.py文件第165行爲return val.name_get()[0][1]。
四,定義報表導出格式
Aeroo所支持的導出類型都在report_aeroo_ooo的data文件夾下的xml裏定義出來了,我們只需要根據它的格式定義即可。
下面我們以一個xml爲例,看看如何定義不同類型的報表。看一下xml裏面的定義:
<record model=”ir.actions.report.xml” id=”my_first_aeroo”>
<!--定義報表的類型,默認即可-->
<field name=”report_type”>aeroo</field>
<!--定義輸出的樣式,有oo-ods和oo-odt兩種-->
<field name=”in_format”>oo-ods</field>
<!--輸出格式,即是我們可到的生成的文件的後綴名-->
<field name=”out_format” eval=”ref(‘report_aeroo_ooo.report_mime
Types_pdf_odt’)/>
<field name=”name”>First Aeroo</field>
<!--定義模板文件,有ods和odt兩種-->
<field name=”report_rml”>firstaeroo/data/template.ods</field>
<field name=”report_name”>First.Aeroo</field>
<field name='model'>ir.ui.view</field>
<field name='type'>ir.actions.report.xml</field>
<!--定義渲染器路徑-->
<field name=”parser_loc”>firstaeroo/parser.py</field>
<field name='tml_source'>file</field>
<field name='parser_state'>loc</field>
</record>
以上的xml我們要注意的就是in_format和out_format,比如說我們想讓輸出的文件爲xls格式的,那麼我們可以查看report_aeroo_ooo的data文件夾下的xml裏對xls格式的聲明可知。我們在in_format那裏寫oo-ods,在out_format那裏寫report_aeroo_ooo.report_mime_types_xls_odt,意思是report_aeroo_ooo模塊下id爲report_mime_types_xls_odt的格式類型。然後在report_rml裏定義ods模板路徑即可。
五,aeroo語法介紹
Aeroo的方便之處就是可以直接在openoffice中進行報表開發,這就需要了解aeroo在openoffice中的語法。
1,openoffice writer
在openoffice writer之中我們獲取OE中的內容都是在<>中獲取的,我們以hr.employee爲例。可以通過如下方式獲取hr.employee的信息。
(1)在odt文件中插入如下表格,將光標放在第一行的第二列
(2)點擊“插入——字段——其他”彈出如下的對話框
(3)在提示中輸入如下的內容<o.name>,點擊插入,彈出如下內容,起一個別名Name
(4)確定後Name就填進單元格中了
(5)如果hr.employee對象中有和別的對象進行one2many關聯的。這個時候就需要進行for循環了。比如hr.employee和證書certificate有one2many關聯。則可以如下定義
<for each=”r in o.certificate”> //可以起一個別名,比如loop start
</for> //起一個別名,比如loop end
在for循環中間插入一些需要的字段就可以了,比如插入證書名用<r.cer_name>
2,openoffice calc
Calc和writer的語法稍微有不同的就是他不是放在<>中定義,而是放在python://後面定義,比如上面的<o.name>就可以這樣寫python://o.name。
還有一點需要注意,在calc中沒有字段給你插入,我們用的是超鏈接,也就是在你的calc單元格中插入一個超鏈接。點擊“插入——超鏈接”彈出如下框
如上所示,目標是python語句,提示文字是calc中展示的文字。