2

我一直在努力尝试在 openerp 中模仿在 Tryton 中找到的关于 Health GNU 模块的报告。在他们的报告文件夹中有一个report.odt文件,与 openerp 中的任何 sxw 报告非常相似,但有一些例外。例如,代替 openERP 的:

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

我们有一个开始和结束标签,用于制作前面的例子:

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

如何在传统的 sxw 报告中模仿以下内容:

<for each="case in test.critearea">
<if test="case.excluded==0"> #this 在表之外
...values in table... #table 从这里开始
</if>
<for>
,匹配时基本上排除一整行。
使用熟悉的语法,例如[[ case.excluded==False ]]没用。

4

4 回答 4

4

tryton 报告系统基于relatorio lib并使用您发现的 odt/ods。如果你想使用类似的东西,你必须使用Aeroo(以前的report_openoffice)。它与 RML 的东西不兼容。

这种方法比 openerp 的内部方法要理智得多,并且会大大提高您的“报告效率”。您也可以考虑使用允许您以 HTML 格式编写报告的report_webkit 。

于 2012-12-17T08:27:26.163 回答
2

在第一个表格单元格中,这有效:
[[((case.excluded == False) or removeParentNode('blockTable')) and '']][[case.name]]
虽然我仍然想知道是否有更合乎逻辑的方式而不是破坏整个创建的块表,特别是因为我将试图弄清楚如何在删除时不留下空行父节点'blocktable'。

于 2012-12-16T22:28:09.387 回答
2

您可以迭代由报告的相关 .py 文件中定义的函数生成的列表。

只需在插件上查找示例,其中有很多,例如:

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

于 2012-12-18T02:49:21.823 回答
1

由于 的内容[[...]]只是 python 代码,您可以在迭代之前使用列表综合来过滤掉内容。所以代替这个:

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

尝试这个:

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

或者你可以使用内置的过滤器():

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