Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/09/06 14:00

 本連載では帳票作成コンポーネント「ActiveReports for .NET 3.0J」を使って帳票アプリケーションを作成していきます。今回はDBから値を取得・集計して出力する方法と、帳票の改ページ指定方法について解説します。

目次
編集部注

 本稿の内容を増補改訂したアップデート版が提供されています。詳しくは連載の目次「5分でわかるActiveReports帳票」をご参照ください。

はじめに

 ActiveReports for .NET(以下ActiveReports)はVisual Studioと統合された使いやすいレポートデザイナや高機能なレポートビューア、多彩な出力形態をサポートする帳票作成コンポーネントです。前回はActiveReportsの最新版3.0Jを利用した帳票アプリケーション開発の流れを簡単に紹介しましたが、今回はActiveReportsを利用した集計処理機能を中心に紹介していきます。

前回の記事

対象読者

  • Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある方。
  • 帳票作成ツールに興味のある方。

必要な環境

(注:Express EditionではActiveReportsをインストールできません)
  • Visual Studio 2005、Visual Studio .NET 2003でプログラムが作れる環境。

 本記事のサンプルコードは、C# 2.0/Visual Basic 2005で記述しています。

集計を含む帳票の作成

 ActiveReportsが提供する各種の集計機能を利用すると、データソースやSQLの構造を複雑にすることなくデータの総合計やグループごとの小計、ページ数といった集計データを簡単に表示させることができます。

 それでは、帳票側でデータを加工して表示する帳票を作成していきましょう。

最終的な完成イメージ

 今回作成する帳票は、お店の注文伝票を月ごとに集計した「注文集計表」です。

「注文集計表」帳票(1)
「注文集計表」帳票(1)
「注文集計表」帳票(2)
「注文集計表」帳票(2)

 各月の受注額を注文単位の小計、日単位の小計、月単位の合計3つで集計して表示します。また、月単位に宅配料金、値引料金の合計も表示します。

データの説明

 今回使用するデータは、注文が入ると商品を複数まとめて宅配便で送るお店の受注データです。データベースは前回と同じく、ActiveReports 3.0J付属のNwind.mdbを使用し、注文伝票(Orders)、注文伝票明細(Order Details)、商品(Products)の3テーブルにアクセスします。

  1. 注文伝票テーブル(注文日、注文番号、宅配料金)
  2. 注文伝票詳細テーブル(注文番号、商品番号、単価、個数、割引率)
  3. 商品テーブル(商品番号、商品名)
今回使用する受注データの構造
今回使用する受注データの構造

 次に、レポート出力するデータを取得するためのSQLを記述します。今回は「注文日」「注文番号」「宅配料金」「商品番号」「商品名」「単価」「数量」「割引額」「注文金額」を取得する、次のようなクエリを設定します(便宜のため、小数点以下の値を含む列はRound関数で丸めています)。

 なお、クエリではSUMやCOUNTといった集計関数やGROUP BY句による集計処理は行いません。

帳票に出力する項目を取り出すSQL
SELECT  YEAR(Orders.OrderDate) AS OrderYear,
        MONTH(Orders.OrderDate) AS OrderMonth, 
        Orders.OrderDate,
        Orders.OrderID,
        Round(Orders.Freight, 0) As Freight,
        Products.ProductID,
        Products.ProductName,
        Round([Order Details].UnitPrice, 0) As UnitPrice, 
        [Order Details].Quantity,
        Round(Round([Order Details].UnitPrice,0)
                    * [Quantity] * [Discount], 0) AS DiscountPrice,
        Round(Round([Order Details].UnitPrice,0)
                    * [Quantity] * (1 - [Discount]), 0) AS Price
  FROM  Orders
        INNER JOIN (Products INNER JOIN [Order Details] 
                    ON Products.ProductID = [Order Details].ProductID) 
        ON Orders.OrderID = [Order Details].OrderID
 ORDER BY Orders.OrderDate, Orders.OrderID,Products.ProductID ;
クエリの実行結果
クエリの実行結果
 宅配料金は商品ごとではなく注文ごとに発生するため値が重複して出力されています。重複値を含む列の集計処理についても後ほど説明します。

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

著者プロフィール

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

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

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

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

バックナンバー

連載:5分でわかるActiveReports帳票

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5