フォーラム: JasperReports & iReport (スレッド #27907)

明細リストの行数を固定値にしたいですが (2010-11-16 20:30 by rowoon520 #54217)

お世話になります。 カンです。

Jasperレポートを作成する際、明細リストの行数を固定値にしたいですが、どうすれば良いでしょうか。

私が知ってる限り、現在Jasperレポートだと、データが存在する分だけリストに表示させていますが、リストの行数を固定にして、
データがない行は空白に表示させたいですが、iReport上の設定で出来るのでしょうか。
http://lh4.ggpht.com/_m7aCHQk3KN4/TOJoXlEbYNI/AAAAAAAAACc/ukmu8EctJ54/01_%E8%A1%A8%E3%81%AE%E8%A1%8C%E6%95%B0%E3%82%92%E5%9B%BA%E5%AE%9A%E5%80%A4%E3%81%AB%E3%81%99%E3%82%8B.png

私が調べた結果、「org.compiere.report.ReportStarter 」のようなクラスを作成し、そこで空白行のデータを入れ込んで、Jasperレポート側に渡せば出来るようですが、このやり方だと明細毎(恐らくJasperレポートのファイルの数分)にクラスを作成する必要がありますので、効率が悪いと思います。

iReport上で出来る方法をご存じの方がいらっしゃったらご指導お願いします。

メッセージ #54217 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: 明細リストの行数を固定値にしたいですが (2010-11-17 02:10 by kubotti #54223)

この↓ページの132、135の書き込みが同じ内容だと思います。
http://omatomesamurai.web.fc2.com/program/tech/thread_1271611148343.html

データ自体に空データを含めるには、
SQLのUNION句を使えば出来そうな気がするのですが、
PostgreSQLでダミーのレコードを必要な数だけ出す方法が分かりません。

Background Bandに固定で枠を書くのは出来そうですね。
Backgroundの高さを増やして、Rectangleで枠を作れば
枠の行数が固定になります。

iReportが1.2.0の頃の書き込みのようなので
もしかしたら、他の方法も出てきているかもしれません。
#54217 への返信

メッセージ #54223 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: 明細リストの行数を固定値にしたいですが (2010-11-18 15:27 by rowoon520 #54255)

久保田さん

ご回答ありがとうございます。
教えて頂いた方法で解決できました。ありがとうございます。

最初は、backgroundの高さが0に設定されていて、デフォルトだと画面上にはbackgroundが表示されないため、気付くにちょっと迷いました。

それから、私の場合はRectangleよりFrameの方が枠線をカスタマイズし易かったので、Frameで罫線を書きました。

#54217 への返信

メッセージ #54255 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: 明細リストの行数を固定値にしたいですが (2014-04-22 22:24 by 通りすがりのおっちゃん #72756)

もう見られている方もいないかもと思いつつ。。。(^^;
こちらの質問を拝見し、なるほど、と思いダミー行作成SQL(postgresql)を作ってみました。
もっと綺麗な書き方もあるかもですが、とりあえずこんな感じで作ってみたところ、
iReportで空白行を作成する事ができました。

WITH select_rownum AS
(SELECT MAX(a.Row_Number) AS max_rownum
FROM (SELECT Row_Number() over()
FROM hoge_table
WHERE hoge_table.hoge_id=$P{hoge}) a
)
SELECT
main.Line,
main.Name,
FROM (SELECT generate_series(1,case when mod(select_rownum.max_rownum,12) > 0 then ((select_rownum.max_rownum) / 12 + 1) * 12
else select_rownum.max_rownum
END) AS CNT from select_rownum) GENE
LEFT OUTER JOIN
(SELECT
row_number() over(),
hoge_table.Line,
mhoge.Name
FROM hoge_table
LEFT OUTER JOIN M_hoge mhoge ON(hoge_table.M_hoge_ID=mhoge.M_hoge_ID)
WHERE hoge_table.hoge_ID=$P{hoge}) main
ON GENE.CNT = main.row_number
ORDER BY Line


「select_rownum」で「main(実際に出力したいデータ)」の最大行数を取得し、
「GENE」でその最大行数を元に、指定行数の倍数となるレコードを作っています。
上記SQLの場合、作成されるレコード数は必ず12の倍数になります。
「main」の検索結果が
10行の時は12レコード(内2レコードが空白行)、
20行の時は24レコード(内4レコードが空白行)、
といった感じです。

かなり過去のスレですし、
iReport側でもっとスマートな解決策ができていれば無駄になるかもですが、
ご参考まで。
#54217 への返信

メッセージ #72756 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: 明細リストの行数を固定値にしたいですが (2014-12-10 15:21 by arachan #75010)

[メッセージ #54217 への返信]
> お世話になります。 カンです。
>
> Jasperレポートを作成する際、明細リストの行数を固定値にしたいですが、どうすれば良いでしょうか。
>
> 私が知ってる限り、現在Jasperレポートだと、データが存在する分だけリストに表示させていますが、リストの行数を固定にして、
> データがない行は空白に表示させたいですが、iReport上の設定で出来るのでしょうか。
> http://lh4.ggpht.com/_m7aCHQk3KN4/TOJoXlEbYNI/AAAAAAAAACc/ukmu8EctJ54/01_%E8%A1%A8%E3%81%AE%E8%A1%8C%E6%95%B0%E3%82%92%E5%9B%BA%E5%AE%9A%E5%80%A4%E3%81%AB%E3%81%99%E3%82%8B.png
>
> 私が調べた結果、「org.compiere.report.ReportStarter 」のようなクラスを作成し、そこで空白行のデータを入れ込んで、Jasperレポート側に渡せば出来るようですが、このやり方だと明細毎(恐らくJasperレポートのファイルの数分)にクラスを作成する必要がありますので、効率が悪いと思います。
>
> iReport上で出来る方法をご存じの方がいらっしゃったらご指導お願いします。

Background Bandを使って、
表を作って合わせるというのはどうでしょうか?
空行を生成する必要もなく便利だと思います。

詳細は私が作ったサイトにて

https://sites.google.com/site/japanjasperserverusergroup/documents/create_report_by_ireport/backgroundband/introduction
#54217 への返信

メッセージ #75010 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする