1

我正在处理JR报告并使用iReport生成它们。

我正在为这项任务寻找解决方案:详细信息带必须有六条记录。例如,查询从数据库中获取 3 条记录,然后详细信息带将有 3 行,但我想将剩余的 3 行打印为空白行。

我怎样才能用iReport做到这一点?

4

3 回答 3

2

我能想到的最好方法是让您的查询返回 6 行(或您设置的行数),那么 jasper 就不需要做任何不寻常的事情了。

这是一个示例,说明您如何使用 oracle 10 或更高版本执行此操作——我相信有更好的方法来执行此操作。

with gen_6
-- creates a table of 6 rows (generate series)
as (SELECT LEVEL as row_num
FROM dual
CONNECT BY LEVEL <= 6),

Your_Query as

 -- your query here <BR>
    (select SYSDATE, ROWNUM as row_num from dual where rownum <=6)<BR>

select *
from gen_6 left join your_query using (row_num)
order by row_num

供参考

您甚至不需要将“字段”row_num 添加到您的报告中即可。

于 2012-12-26T22:11:21.837 回答
0

将查询结果限制为 6,然后像往常一样,将字段放在详细信息带中

然后,在摘要中,创建三行字段。

   1 |    ||    ||    ||    |
   2 |    ||    ||    ||    |
   3 |    ||    ||    ||    |

Print When Expression第一行的所有字段中

new Boolean($V{REPORT_COUNT}.intValue() == 3 || $V{REPORT_COUNT}.intValue() == 4 || $V{REPORT_COUNT}.intValue() == 5)

Print When Expression第二行的所有字段中

new Boolean($V{REPORT_COUNT}.intValue() == 3 || $V{REPORT_COUNT}.intValue() == 4)

Print When Expression第三行的所有字段中

new Boolean($V{REPORT_COUNT}.intValue() == 3)

第一行字段的位置应位于摘要带的最顶部,以便字段看起来好像它们是详细信息部分的一部分。

于 2013-02-08T07:34:18.017 回答
0

最简单的方法:您只需要在详细信息带上包含 N 个文本字段即可复制数据源中的记录数或硬编码所需的数字。

例子:

Detail Band
----------------
| FIELD_X
| FIELD_X
----------------

在这种情况下,您将从 DB 收到 3 条记录并打印 6 个值。

另一种选择:使用您需要的规则创建两个子报表,并将其包含在详细信息页面中,一个然后另一个在另一行中。

例子:

Detail Band
----------------
| SUBREPORT_1
| SUBREPORT_2
----------------

在这种情况下,您将从 DB 收到 3 条记录,并将在每个子报表中打印 3 个值,因此在第二个子报表中,您可以将行保留为空白或任何其他规则。

业务示例: 此方法可用于需要为特定贷方或借方分配不同帐户的财务接口。

于 2012-12-18T19:38:16.297 回答