レポート作成をマスターしよう!

ネスティッドレポート

こんにちは、サポート部の Yama-chan です。いつもブログを読んでいただき、ありがとうございます。今回のブログでは少し実用に近い機能をご紹介します。


はじめに

近ごろテレビを見ていると、納品書や請求書を発行してくれるクラウドサービスの CM が流れていました。しかも発送までやってくれるとか、なかなか便利ですね。それでふと思ったんですが、PowerBuilder を使えば、納品書のように納品先と納品情報一覧を出力する複雑なレポートでもサクっと作れますね。ということで、今回はそのような機能を作成できるネスティッドレポートの実装方法をご紹介します。

ネスティッドレポート?

いきなり、分からない用語が出てきました。ネスティッドレポートは、データウィンドウの中に別のデータウィンドウを表示するイメージです。ベースとなるデータウィンドウ (ベースレポート) のデータに紐づく別のデータウィンドウ (ネスティッドレポート) を配置することで、複雑なレポートも出力できます。


それでは、はじめましょう

作成するレポートは以下の 2 つのテーブルを使用します。なお、説明の都合上テーブル情報はシンプルなものになっています。

テーブル

ベースレポートとして顧客情報の customer テーブルを使用してフリーフォームのデータウィンドウを作成し、その上にネスティッドレポートとして注文情報の order_detail テーブルを使用してグリッドデータウィンドウを作成します。

完成イメージは以下となります。

完成イメージ

白地の部分がベースレポートで、青色の部分はネスティッドレポートとなります。


ネスティッドレポートの作成

まず、ネスティッドレポートとなるデータウィンドウを作成しましょう。

[新規作成] メニューを選択して [データウィンドウ] タブ内の [グリッド] を選択してから、データソースの選択画面で [SQL Select] を選択し [次へ] ボタンを押下します。

テーブルの選択

[複数テーブルの選択] 画面で order_detail テーブルを選択して、[開く] ボタンを押下します。

カラムの選択

必要なカラムを選択してから、顧客 customer テーブルの id を検索条件として指定できるよう、検索引数 customerid を定義します。のちほどベースレポートで指定することで、該当する顧客の注文情報を表示するようになります。[デザイン] | [データソース] メニューからクエリ画面を開き、次に [デザイン] | [検索引数] メニューから検索引数の指定画面を開き、下記のように入力します。

検索引数

次に、Where タブで order_detail テーブルの cust_id に等しい条件で、先ほど定義した検索引数を指定して、以下のように設定します。

検索引数の設定

あとは、ウィザードに従い、[次へ] → [完了] と進み、次はレイアウトの作成です。

注文詳細

次に、金額と金額の合計を求める計算フィールドを追加します。

[挿入] | [コントロール] | [計算フィールド] メニューを選択し、詳細エリア内の単価の後ろをクリックして計算フィールドを追加します。これを金額表示用 (kingaku) として以下の計算式を設定します。

金額の計算フィールド (kingaku) : suryou * tanka

[挿入] | [コントロール] | [計算フィールド] メニューを選択し、グループトレーラエリア内で金額の下をクリックして計算フィールドを追加します。こちらは金額合計用 (goukei) とし、以下の計算式を設定します。

金額合計の計算フィールド (goukei) : sum(kingaku for all)

顧客ごとに改ページしてページ番号を振り直すために、cust_id をキーとしてグループを定義します。グループを作成したら、グループのプロパティ「グループごとにページ番号をリセット」、「グループごとに改ページ」を有効に設定します。

グループ
改ページ設定

最後にデータウィンドウペインタでヘッダーがカラム名のままでは格好悪いので変更し、位置など調整したものが以下となります。

注文詳細の完成イメージ

以上で、ネスティッドレポートの作成が完了です。


ベースレポートの作成

続きましてベースレポートを作成していきましょう。

ベースレポートはシンプルに顧客情報を表示するもので、フリーフォームデータウィンドウを利用して作成します。

[新規作成] メニューを選択して [データウィンドウ] タブ内の [フリーフォーム] を選択してから、データソースの選択画面で [Quick Select] を選択し [次へ] ボタンを押下します。

[Quick Select] 画面で customer テーブルを選択し、すべてのカラムを選択してから [OK] ボタンを押下します。

あとはウィザードに従い、[次へ] → [完了] へと進み、フリーフォームデータウィンドウの作成が完了です。

ベースレポート

続いて、ネスティッドレポートをベースレポートの上に配置します。[挿入] | [コントロール] | [レポート] メニューを選択し、ベースレポートの上をクリックすると、配置するレポート選択画面が表示されます。先ほど作成したネスティッドレポート d_order_details を選択すると、下記の ① のように配置されます。あとは下に表示されているプレビューを確認しながら、幅を調整していきます。なお、ネスティッドレポートの高さに関しては自動的に調整されます。

ネスティッドレポート

② では顧客の ID を検索引数の customerid に設定しています。

ここには、配置したレポートに定義されている検索引数が表示されます。ここでそれぞれの検索引数にどのような値を渡すかを設定することができ、ベースレポートのカラムを設定すればベースレポートとネスティッドレポートを紐づけることができます。今回はベースレポートの顧客 ID に紐づく注文データを表示したいので、ネスティッドレポートで顧客 ID (cust_id) を絞り込むために定義した検索引数 (customerid) としてベースレポートの顧客 ID (id) を渡すように設定します。これによりベースレポートの顧客情報の注文情報の詳細がネスティッドレポートに表示されます。

以上で、ベースレポートの作成が完了しました。出力する内容を調整して、完成イメージは以下となります。なお、今回作成したレポートは必ず注文情報がある前提で作成されているので、もし注文情報がない場合は顧客の情報のみ出力されるのでご承知ください。最後に保存を忘れないように、名前 d_order で作成されたフリーフォームのデータウィンドウを保存します。

完成イメージ

参考までに、以下は印刷ボタンが押下されたときのスクリプトです。この例ではデータストアを使用して、画面にプレビューを表示せずに印刷しています。

DataStore lds_print
 
IF MessageBox("印刷", "顧客ごとの注文情報を印刷しますか?", Question!, YesNo!, 2) = 1 THEN
	lds_print = CREATE DataStore
	lds_print.DataObject = "d_order"
	lds_print.settransobject(sqlca)
	lds_print.retrieve()
	lds_print.Print()
 
	Destroy lds_print
END IF
 

冒頭で紹介したイメージで出力されます。


まとめ

いかがでしたか?

複雑なレポートでも意外と簡単に作れますね。ますます PowerBuilder のパワーを感じられたでしょう。今回の記事では簡単なネスティッドレポートのご紹介でしたが、これを活用し帳票に合わせて、必要な情報を出力することで、納品書や請求書を作成できるようになります。みなさんもぜひチャレンジしてみてください。

以上、Yama-chan でした!

テクニカルブログ 一覧を見る
PowerBuilder マイグレーション
PowerBuilder学習、動画で始めちゃう?