- PR -

ActiveReportsで項目ごとの合計を出したい

投稿者投稿内容
ふらわー
常連さん
会議室デビュー日: 2008/01/11
投稿数: 33
投稿日時: 2008-02-14 11:30
いつもお世話になっております。

ActiveReports3.0を使用し、帳票作成に初挑戦しています。
しかし調べても分からないことだらけで、とても苦戦しているのでぜひ力を貸してください。

ちなみに使用しているのはVB.NETとオラクルを使用して、Windowsアプリケーションを作成しております。

アクティブレポートのデザインで以下のようにテキストボックスとラベルを配置しています。項目名に関してはラベル、データを表示するのにはテキストボックスを使用しました。

PageHeader
[タイトル]
[No] [タイプ] [基本料金] [税] [割増] [合計]

Detail
「No」「タイプ」「基本料金」「税」「割増」「合計」

PageFooter
「合計」「タイプ1」「基本料金合計」「税合計」「割増合計」「合計」
    「タイプ2」「基本料金合計」「税合計」「割増合計」「合計」 


例えば以下のようなデータがあったとして

データ例
1.タイプ1,10000,500,100,10500
2.タイプ2,5000,100,100,5000
3.タイプ2,5000,200,200,5500
4.タイプ1,3000,50,100,3000
5.タイプ1,1000,10,10,1000


帳票出力時に以下のように出力させたいのです。


[タイトル]
[No] [タイプ] [基本料金] [税] [割増] [合計]

Detail
1. タイプ1, 10000, 500, 100, 10500
2. タイプ2, 5000, 100, 100, 5000
3. タイプ2, 5000, 200, 200, 5500
4. タイプ1, 3000, 50, 100, 3000
5. タイプ1, 1000, 10, 10, 1000

PageFooter
「合計」「タイプ1」「14000」「560」「210」「14500」←タイプ1ごとのそれぞれの項目合計を表示させる。
    「タイプ2」「10000」「300」「300」「10500」←タイプ2ごとのそれぞれの項目合計を表示させる。


いろいろ調べてみて、PageFooterのタイプ1の基本料金金額合計を表示させるテキストボックスのプロパティに設定をすれば出るのかなと思い、
DataField:[基本料金]
DistinctField:[タイプ]
SummaryFunc:DSum
と設定してみましたが、できませんでした。これではできるわけないとわかっているのですが・・・
グループを設定するのでしょうか??
データのタイプは値を取得してみないとわかりません。
タイプ1とタイプ2のデータは混在しており、順序良く並んでいるわけでもありません。
どのようにすれば、これを実現できるのでしょうか?
教えてください。
よろしくお願いいたします。
馬岱
常連さん
会議室デビュー日: 2007/12/05
投稿数: 21
お住まい・勤務地: 五丈原
投稿日時: 2008-02-14 11:54
こんにちは。
以下のサイトが参考になりませんでしょうか。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1111279356
http://codezine.jp/a/article/aid/1664.aspx?p=2
_________________
ここにいるぞっ!

[ メッセージ編集済み 編集者: 馬岱 編集日時 2008-02-14 12:04 ]
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-02-14 13:14
がんばて、SQL でタイプ別に列を出力するのが楽。

つまり「基本料金」という列をやめて「タイプ1基本料金」「タイプ2基本料金」という 2つ列を作る。タイプ1のときには、タイプ1基本料金に値が設定されて、タイプ2基本料金は null にする。タイプ2のときは、タイプ1基本料金が null、タイプ2基本料金に値を設定する。

で、ディテールセクションでは、タイプ1基本料金とタイプ2基本料金を重ねてしまう。どちらかは null だから、タイプに合わせた基本料金だけが表示されるってわけだ。

フッタでは、普通に合計を取ればいい。直接、この件とは関係ないけど、合計はページフッタではなくレポートフッタにおいたほうがいいよ。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-02-14 18:48
レポートの中でやりたいのであれば、FetchData イベントでタイプごとの集計をするしかないですね。 タイプの ID か名前がキーになっている Generics な List で集計しておいて、改ページの際にページ合計として出力するという形になると思います。

グループごとの集計にした方が一般的には帳票らしいかもしれません。 この場合はレポート側でも対応は簡単で、Summary 機能が使えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ふらわー
常連さん
会議室デビュー日: 2008/01/11
投稿数: 33
投稿日時: 2008-02-15 10:38
馬岱様

提示していただいたサイトはすでに確認していたのですが、初心者にはわかりづらかったです。
だいたいサイトの中で言っていることはわかるのですが、実際使おうとするとわかりませんでした。
ありがとうございました。
ふらわー
常連さん
会議室デビュー日: 2008/01/11
投稿数: 33
投稿日時: 2008-02-15 10:40
未記入様

未記入様から教えていただいた方法でしようかと思ったのですが、ちょっと仕様的に無理なところがあり断念しました。

>合計はページフッタではなくレポートフッタにおいたほうがいいよ。

レポートフッタに変えてみました。
これで1レポートにひとつの合計が出るのですね。
参考になりました。ありがとうございます。
ふらわー
常連さん
会議室デビュー日: 2008/01/11
投稿数: 33
投稿日時: 2008-02-15 10:58
じゃんぬねっと様

いつもお世話になっております。
じゃんぬねっと様から教えていただいた通り、FetchData イベントでタイプごとの集計をするという方法をとりました。
それは解決したのですが、さらにやりたいことがありそれをどうしたらいいか迷っているところです。

じゃんぬねっと様のおっしゃっている

>グループごとの集計にした方が一般的には帳票らしいかもしれません。 この場合はレポート側でも対応は簡単で、Summary 機能が使えます。

このグループごとの集計というのをしたいのです。
Detailに全てデータを入れるのではなく、グループヘッダにデータを入れてSummaryしたらいいのだろうなと思うのですがうまくいきません。

例えば最初に提示したデータではなくて、明細NOを列に追加した場合

データ例
[No] [明細No] [タイプ] [基本料金] [税] [割増] [合計]
1,1,タイプ1,10000,500,100,10500
1,2,タイプ2,5000,100,100,5000
2,1,タイプ2,5000,200,200,5500
2,2,タイプ1,3000,50,100,3000
2,3,タイプ1,1000,10,10,1000

このようなデータがあった場合に、NOごとの集計をして表示したいのですがどのようにすればよいのでしょうか?
別の質問になってしまうのかもしれないので、別スレッドを立てた方がよかったのでしょうが…

下記のように表示したいです。

[No] [明細No] [タイプ] [基本料金] [税] [割増] [合計]
1 1 タイプ1 10000 500 100 10500
1 2 タイプ2 5000 100 100 5000
----------------------------------------------------
1の小計 15000 600 200 15500

2 1 タイプ2 5000 200 200 5500
2 2 タイプ1 3000 50 100 3000
2 3 タイプ1 1000 10 10 1000
----------------------------------------------------
2の小計 9000 260 310 9500


グループヘッダにデータを全部入れてみて、グループフッタに計を出すテキストボックスを並べてみましたができませんでした。
そのテキストボックスのプロパティは下記のように設定しました。

SummaryGroup:グループヘッダ
SummaryFunc:Sum
DataField:計を出したい列名
DistinctField:NO

やり方自体間違っているのでしょうか?
全くわからないので教えてください。
よろしくお願いします。



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-02-15 11:15
引用:

ふらわーさんの書き込み (2008-02-15 10:58) より:

このグループごとの集計というのをしたいのです。
Detailに全てデータを入れるのではなく、グループヘッダにデータを入れてSummaryしたらいいのだろうなと思うのですがうまくいきません。


私も今気付いたのですが、この方法はすでにリンクで回答が示されているようです。

引用:

このようなデータがあった場合に、NOごとの集計をして表示したいのですがどのようにすればよいのでしょうか?


ActiveReports はチュートリアルやサンプルが充実しているので困った時は積極的に利用すると良いです。 これらはインストール ディレクトリの中に入っています。

たとえば、ユーザーガイドの 「ページ単位やグループ単位でデータを集計したい」 にて今回の問題を解決する方法が詳しく記載されています。

引用:

そのテキストボックスのプロパティは下記のように設定しました。

SummaryGroup:グループヘッダ
SummaryFunc:Sum
DataField:計を出したい列名
DistinctField:NO


DataField = 集計するフィールド名
SummaryFunc = Sum
SummaryGroup = グループ ヘッダ名
SummaryRunning = Group
SummaryType = SubTotal

で良いです。 このあたりもサンプルには記載されていますよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)