2

私は、モジュールHealthGNUについてTrytonで見つかったレポートをopenerpで模倣しようと苦労してきました。レポートフォルダには、 openerpにあるsxwレポートと非常によく似たreport.odtファイルがありますが、いくつかの例外があります。たとえば、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... はここから始まり
</if>
<for>
、一致すると基本的に行全体が除外されます。
動作しなかったなどの使い慣れた構文を使用します[[ case.excluded==False ]]

4

4 に答える 4

4

trytonレポートシステムはrelatoriolibに基づいており、発見したとおりにodt /odsを使用します。同様のものを使用したい場合は、Aeroo(以前のreport_openoffice)を使用する必要があります。RMLのものとは互換性がありません。

このアプローチは、openerpの内部アプローチよりもはるかに健全であり、「レポートの生産性」を大幅に向上させます。HTMLでレポートを作成できるreport_webkitの使用を検討することもできます。

于 2012-12-17T08:27:26.163 に答える
2

レポートの関連する.pyファイルで定義された関数によって生成されたリストを反復処理できます。

アドオンの例を探すだけで、次のようにたくさんあります。

account / report / account_aged_pa​​rtner_balance.rml:[[repeatIn(get_lines(data ['form'])、'partner')]]

于 2012-12-18T02:49:21.823 に答える
2

最初のテーブルセルでは、これは機能しました。
[[((case.excluded == False) or removeParentNode('blockTable')) and '']][[case.name]]
作成されたブロックテーブル全体を破棄するのではなく、より論理的な方法があるかどうかを知りたいのですが、特に、削除するときに空の行を残さない方法を見つけようとしているためです。親ノード'blocktable'。

于 2012-12-16T22:28:09.387 に答える
1

の内容[[...]]は単なるPythonコードであるため、リスト内包表記を使用して、反復の前に物事を除外することができます。したがって、これの代わりに:

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

これを試して:

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

または、組み込みのfilter()を使用できます。

[[repeatIn(filter(lambda c: not c.excluded, cases), 'case'])]]
于 2012-12-30T04:13:02.427 に答える