目標の帳票
出力する帳票イメージ
発注書
発注日:20XX年YY月ZZ日
発注先:ほげほげ商店
No | 商品名 | 単価 | 発注数 | 合計 |
---|---|---|---|---|
1 | うまし棒 | 10 | 100 | 1000 |
2 | ぐりぐり君 | 100 | 50 | 5000 |
3 | やっちゃんイカ | 9,999 | 10 | 99,990 |
合計 | 105,990 |
<<現ページ数>> / <<総ページ数>>
JavaBean とテスト用クラス作る
- learning.bean パッケージ以下にそれぞれJavaBeanを作成
- 1行毎のレコードBean
public class Record { /** 行番号 */ private int rowNo; /** 商品名 */ private String name; /** 単価 */ private BigDecimal price; /** 発注数 */ private BigDecimal quantity; // getter/setter 省略 /** * 合計金額を取得する * @return * 単価 * 発注数 */ public BigDecimal getAmount() { return this.price.multiply(this.quantity); } }
-
- 帳票全体のBean
public class SampleReportBean { /** 発注日 */ private Timestamp orderDate; /** 発注先 */ private String ordered; /** レコード */ private List<Record> records = new ArrayList<Record>(); /** 合計額 */ private BigDecimal totalAmount = new BigDecimal(0); // getter/setter 省略 /** * 行レコードを追加する<br> * 追加時に合計額も加算する */ public void addRecord(Record record) { records.add(record); BigDecimal amount = record.getAmount(); this.totalAmount = this.totalAmount.add(amount); } /** * サブレポート用のListを JRDataSource に変換して取得する * * @return * サブレポートのListをJasperReportsで使用するDataSourceにキャスト */ public JRDataSource getRecordsAsDataSource() { return new JRBeanCollectionDataSource(this.records); } }
- learning パッケージに帳票出力のテストクラスを作成
public class SampleReportFactory { /** * サブレポート(行単位でレコードを出力する)用のテストメソッド */ public static List<Record> createRecords() { List<Record> records = new ArrayList<Record>(); for (int i = 0; i < 10; i++) { Record r = new Record(); int rowNo = i + 1; r.setRowNo(rowNo); r.setName("商品名" + rowNo); r.setPrice(new BigDecimal(rowNo * 10)); r.setQuantity(new BigDecimal(rowNo)); records.add(r); } return records; } /** * 帳票全体のテストメソッド */ public static List<SampleReportBean> createSampleReport01_01() { SampleReportBean bean = new SampleReportBean(); bean.setOrderDate(new Timestamp(System.currentTimeMillis())); bean.setOrdered("ほげほげ商店"); { Record r = new Record(); r.setRowNo(1); r.setName("うまし棒"); r.setPrice(new BigDecimal(10)); r.setQuantity(new BigDecimal(100)); bean.addRecord(r); } { Record r = new Record(); r.setRowNo(2); r.setName("ぐりぐり君"); r.setPrice(new BigDecimal(100)); r.setQuantity(new BigDecimal(50)); bean.addRecord(r); } { Record r = new Record(); r.setRowNo(3); r.setName("やっちゃんイカ"); r.setPrice(new BigDecimal(9999)); r.setQuantity(new BigDecimal(10)); bean.addRecord(r); } return Arrays.asList(bean); }
iReport でテンプレート作成
全体のテンプレートを作成
- とりあえずPDF出してみる - メモで備忘録なアレのときの様に新規に帳票テンプレートを作成
- Report name
- SampleReport01 (とした)
- Report name
サブレポートを作成
- 一旦全体のテンプレートの作成は放置してサブレポートを作る
- 「サブレポート」についてはggてくだしあ
- 「Subreport」をドラッグ&ドロップで「Detail1」へ
- 「Create a new report」をチェックし「次へ」
- 「Blank A4」を選択して「次へ」
- 「Connections / Data Source」をとりあえず「Empty datasource」を選択して「次へ」
- 失敗した本当は先にDataSourceを先に用意しとけばよかったかも...
- 初期状態で「次へ」
- 初期状態で「次へ」
- サブレポートの名前を適当に入力し、「Store the directory name in a parameter」を選択した状態で「次へ」
- Report Name
- Record (とした)
- Report Name
- 「Use the same connection used to fill the master report」を選択して「完了」
- Let's try 帳票 - メモで備忘録なアレ で使用した「Report query」を使って「learning.bean.Record」クラスをfieldとして読み込む
- こんな感じでサブレポートを作成
- 「Detail1」に出力する項目を順番に並べる
- 左から「$F{rowNo}」「$F{name}」「$F{price}」「$F{quantity}」「$F{amount}」
- 「$F{price}」「$F{quantity}」「$F{amount}」はドラッグ&ドロップでテンプレートに置いたら、プロパティ>「Pattern」で「#,###,###,##0」とかやっとくと帳票出力時に3桁区切りでカンマ入れてくれる
- 左から「$F{rowNo}」「$F{name}」「$F{price}」「$F{quantity}」「$F{amount}」
- 「Details1」以外のBandは右クリック>「Delete Band」で削除しとく
- Let's try 帳票 〜続き〜 - メモで備忘録なアレ でもやったようにデータベースにコンセントささってるようなアイコンを押下
- 帳票出力用のメソッド「learning.SampleReportFactory#createRecords」を指定
- 「Preview」ボタン押下
全体のテンプレートを作成に戻る...
- Let's try 帳票 - メモで備忘録なアレ で使用した「Report query」を使って「learning.bean.SampleReportBean」クラスをfieldとして読み込む
- こんな感じで全体のテンプレートを作成
- ページ番号については iReport 側で定数っぽく宣言できるのでそれを使用する
- ただし注意が必要!
- $V{PAGE_NUMBER}の「Evaluation Time」によって出力される値が異なる
- Now:現在ページ数
- Report:総ページ数
- このへんの事は全然理解出来てません ^q^
- サブレポートへ値を渡す設定する
- サブレポートを選択してプロパティの中から以下の様に設定
- Connection type
- Use a datasource expression
- Data Source Expression
- $F{recordsAsDataSource}
- Connection type
- Let's try 帳票 〜続き〜 - メモで備忘録なアレ でもやったようにデータベースにコンセントささってるようなアイコンを押下
- サブレポートでもやってるよね!
- 帳票出力用のメソッド「learning.SampleReportFactory#createSampleReport01_01()」を指定
- 「Preview」ボタン押下
帳票イメージに近いよね!でけた!