2008.04.24

CrystalReportで空行を表示する2

前回の続きで、別のパターンで空行のある帳票を作成してみました。

今回作成した帳票は、明細の行数が20件あり、
データが15件のときは残りの5明細は空行を出力するというもの。

今回は下記のパターンで作成してみました。

・CrystalReportのページヘッダーで必要行数分の罫線を作成して、
 セクションエキスパートの「続くセクションをアンダーレイ」にチェックを入れる。
 詳細は1行分のみ入れて、あとは微調整する。


まず、レイアウトを作成し表示してみたところ、明細が20行以上表示されてしまう。
これを制御しなくてはならないので、まず試したのが、余白の設定などを行い、明細を20件以上表示できなくするという方法。
かなり強引だがこれでうまく表示されるようになります。

一応出来るのですが、余白の設定よりも改頁条件を設定するほうが確実なので、
明細が20件に達したら改頁を行う制御を明細のセクションエキスパートの改頁の条件に追加しました。

WhilePrintingRecords;
//表示する件数
numberVar rowCount := 20;
//余りが0の場合は改頁
Remainder(レコードの件数,rowCount) = 0
//グループ化した項目の件数が表示件数(20件)と同じでない場合
and レコードの件数 <> count(カウントする項目, グループ化する項目);

2つ目の条件がないとデータが20件の時に無駄に改頁してしまいます。

今回は総合計を最後のページを改頁して最終行に表示する必要がありました。

最後の行に出力したいので、
レポートフッターを用意して、非表示の条件に下記を追加。

WhilePrintingRecords;
//次がNULLではないとき非表示
NextIsNull (項目) = false;

項目は何でもいいのですが、必ず値があるものを選択します。

さらに、改行してから総合計を表示する必要があるので、
出力前に改ページの条件に下記を追加。

WhilePrintingRecords;
//次がNULLのときは改ページ
NextIsNull (項目) = true;

これで問題なく出来ます。

ただ、レポートフッターに表示をしようとしているので、
デザインの調整は必要になります。

2パターン試して見ましたが、
やはり明細数が多い場合はこちらの方が圧倒的にやりすい。
明細数が少ない場合は前回の方法のほうがやりやすいと思います。

※ちなみに、レコードの件数は自前で式フィールドを使ってカウントしています。
ページヘッダーでクリアして、明細でカウントするようにしています。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
jnakamura