2012-12-16 178 views
2

我一直在努力模仿openerp在Tryton中爲模塊Health GNU找到的報告。在他們的報告文件夾中有一個report.odt文件,與在openerp中找到的任何sxw報告非常相似,只有少數例外。例如,而不是OpenERP的公司:openerp報告語法

[[repeatIn(objects,'test')]]

我們有使先前〔實施例這樣的開口和關閉標籤:

<FOR EACH="TEST IN OBJECTS"> .... </FOR>

我如何可以模仿在以下傳統的sxw報告:

<for each="case in test.critearea">
<if test="case.excluded==0">#這是表外
...values in table... #table這裏開始
</if>
<for>
匹配時,它基本上排除了一整行。
使用熟悉的語法,如[[ case.excluded==False ]]沒有工作。

回答

2
在第一表格單元格

,這工作:
[[((case.excluded == False) or removeParentNode('blockTable')) and '']][[case.name]]
雖然我在知道是否有一個更合乎邏輯的方式,而不是摧毀整個創建blocktable,仍然有興趣尤其是因爲我將試圖找出如何在刪除父節點'blocktable'時不要留空行。

4

tryton報告系統基於relatorio lib,並使用您發現的odt/ods。如果你想使用類似的東西,你必須使用Aeroo(以前的report_openoffice)。它與RML的東西不兼容。

這種方法更加理智,openerp的內部功能更強大,並且會提升您'生產率'。您也可以考慮使用允許您使用HTML編寫報告的report_webkit

+0

感謝simahawk,即時通訊熟悉aeroo和report_webkit但我們我們花費了大量時間用openerp的內部方法創建和完成報告,目前無法通過報告體系結構進行重大更改。這是一個麻煩,但經過sxw和rml文件的充分擺弄後,我們設法得到我們想要的。 – 3a2roub

2

您可以迭代由報告的相關.py文件中定義的函數生成的列表。

只需按一下該插件的例子,有很多人,如:

帳戶/報告/ account_aged_pa​​rtner_balance.rml: [repeatIn(get_lines(數據[ '形式']),「合夥人)]]

1

由於[[...]]的內容僅僅是Python代碼,你可以使用list comprehesions迭代之前過濾掉的東西。因此,而不是這樣的:

[[repeatIn(cases,'case')]] 

試試這個:

[[repeatIn([c for c in cases where not case.excluded], 'case']) 

或者你可以使用內置的過濾器():

[[repeatIn(filter(lambda c: not c.excluded, cases), 'case'])]]