SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

5分でわかるActiveReports帳票

5分でわかるActiveReports帳票-集計処理と改ページ(2007年度版)

ActiveReports for .NET 3.0Jで作るサンプル帳票

  • このエントリーをはてなブックマークに追加

帳票レイアウトの作成

1.セクションの設定

 Visual Studioのプロジェクトに「ActiveReports 3.0ファイル」を追加し、レポートデザイナで帳票のレイアウトを作成します。

 前回と同様、detailセクションのアイコンをダブルクリックして、レポートデータソースにクエリを設定します。レポートデータソース設定の詳細については前回の記事を参照ください。

 また、今回は取得したデータをグループ単位で集計・表示するために[グループヘッダ/フッタ]を設定します。右クリックメニューの[挿入]から「グループヘッダ/フッタ」を追加します。

レポートデザイナでグループヘッダ/フッタを追加する
レポートデザイナでグループヘッダ/フッタを追加する

 今回の集計単位は、「注文月」と「注文日」「注文番号」の3つになるので、上位グループ(外側)から順に「注文月(OrderYear, OrderMonth)」「注文日(OrderDate)」「注文番号(OrderID)」単位のグループヘッダ/フッタを設定します。グループヘッダ/フッタを追加したら、それぞれキーになるデータソースの列名を、グループヘッダのDataFieldプロパティに設定します。このうち、注文月だけは「注文年+月」の単位で集計する必要があるため、DataFieldプロパティには計算式の=OrderYear*100 + OrderMonthを入力します。

グループヘッダのDataFieldプロパティに値を設定
グループヘッダのDataFieldプロパティに値を設定

2.コントロールの追加

 次に、ツールボックスからコントロールをドロップして、帳票レイアウトに貼り付けていきます。帳票タイトルなどの固定値表示や集計のないデータ項目表示はLabelコントロールとTextBoxコントロールのどちらを使用しても構いませんが、Labelは集計設定のためのSummaryプロパティを持たないため、集計値の表示欄にはTextBoxを使う必要があります。

今回のコントロール配置。Labelコントロールは緑、TextBoxコントロールは青で色分け
今回のコントロール配置。Labelコントロールは緑、TextBoxコントロールは青で色分け
TextBoxはSummaryプロパティをもつ
TextBoxはSummaryプロパティをもつ
LabelはSummaryプロパティをもたない
LabelはSummaryプロパティをもたない

3.集計項目のプロパティ設定

 集計データを設定するためのSummaryプロパティには、以下の4つがあります(表1)。このうち、SummaryGroupはグループ単位で合計するときのみ使用する項目で、SubTotal/PageCountの場合に作用します。また、SummaryRunningはNoneに設定すると、値の初期化が行われません。

プロパティ名 内容
SummaryFunc 集計関数の種類
SummaryGroup どのグループを対象とするかの設定
SummaryRunning 値の初期化のタイミング。None/Group/Allのいずれかを設定する
SummaryType 合計する単位。None/GrandTotal/PageTotal/SubTotal/PageCountのいずれかを設定する

 例えば、グループ単位で、合計値を表示したい場合は次のように設定します(合計単位とグループを設定してあるので、値の初期化はGROUPに設定する必要はありません)。

プロパティ名 設定値
SummaryFunc Sum(合計関数)
SummaryGroup [集計したいグループ]
SummaryRunning None
SummaryType SubTotal(グループ単位の小計)
DataField [集計したい値]

 Summaryプロパティを使うと、アプリケーション側で集計値を加算していく処理や複雑なSQLの記述が不要になるだけでなく、グループヘッダに明細の合計値欄を配置させることもできます。

今回作成する帳票のコントロール設定

 続いて、具体的に今回作成する帳票の集計値の設定について説明します。

今回の帳票で、集計値を表示する箇所(一部)
今回の帳票で、集計値を表示する箇所(一部)

A.ページ番号を表示する

 帳票にページ番号を表示するには、SummaryTypeプロパティにSummaryType.PageCountを設定します。

ページ プロパティ 設定値
現在ページ SummaryRunning All
SummaryType PageCount
総ページ SummaryRunning None
SummaryType PageCount

 現在ページ番号と総ページ数の切り替えは、SummaryRunningプロパティの設定で行います。SummaryFuncは何を設定しても同じ値が表示されます。なお、グループごとにページ数を設定する場合や、2ページ目からページを数えたいなどの場合については、後ほど説明します。

B.総合計値を表示する

 明細の全データを集計する場合は、SummaryType.GrandTotalを設定します。

C.グループごとの小計値を表示する。

 前項で説明した集計項目のプロパティ設定例と同様に設定します。商品小計項目は次のように設定します。

プロパティ 設定例
SummaryFunc Sum
SummaryGroup [注文番号グループヘッダ]
SummaryRunning None
SummaryType SubTotal(グループ単位の小計)
DataField [Price]

 どのセクションでも小計の取得は可能ですが、位置によってはうまく合計されないこともあります。

 特に、グループヘッダ/フッタを複数もつ帳票の場合、グループの順序に気をつけないと集計の単位が大きく変わってしまい、正しい集計結果を表示させることができません。今回はグループの順序が「注文日→注文番号→商品」の順序で入れ子構造になるようにグループを作成する必要があります。

 グループの順序を確認・変更するには、右クリックメニューの[グループ順]を選択すると表示されるグループ順ダイアログで変更することができます。

グループの順序が正しく設定されている場合
グループの順序が正しく設定されている場合
グループの順序が正しくない場合
グループの順序が正しくない場合

D.重複を排除した小計値を表示する

 宅配料金は注文ごとに発生するデータなので、明細単位ですべて合計するとデータが重複し、正しい値を得られなくなってしまいます。このような場合はSum関数の代わりに、Dsum関数を使用します。Dsum関数は、指定されたキー値をもとに重複を除いた値の合計を計算します。Dsum関数がキーとして使用する値は、DistinctDataFieldプロパティに設定します。

 今回は宅配料金を注文番号(OrderID)ごとに集計したいので、Summaryプロパティを次のように設定します。

プロパティ 設定値
SummaryFunc DSum
SummaryGroup [注文月グループヘッダ]
SummaryRunning None
SummaryType SubTotal(グループ単位の小計)
DistinctDataField OrderID(注文番号)
DataField Freight(宅配料金)

次のページ
ページ数の取得について

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
5分でわかるActiveReports帳票連載記事一覧

もっと読む

この記事の著者

宮本奈紗(ミヤモトナサ)

株式会社システムインテグレータ ERPソリューション部所属。ERPシステムの設計・開発に従事。業務でActiveReportsを使用。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

渡辺俊史(ワタナベトシフミ)

株式会社システムインテグレータ パッケージ開発部所属。ECサイト構築パッケージの設計・開発に従事。VSUG(Visual Studio User Group) データベース・データアクセスフォーラムリーダー。blog...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1664 2014/02/06 11:25

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング