DOBON.NET DOBON.NETプログラミング掲示板過去ログ

アクティブレポートでの表示と非表示

環境/言語:[WinXP,VB。NET2005、SQLServer2005]
分類:[.NET]

お世話になります
環境はWinXP、VB.NET2005、SQLSERVER2005、ActiveReports 2.0J Standard で作成しています
現在売上元帳を作成しています
売上と入金を表示して、それを日付順に出しています。ただし、売上と入金が同じ日付だった場合売上を先に出しています
そして一番最後に残高を下の図の様に足し引きしています

日付       金額  残高
             2,000
2007/05/01 売上 5,000 7,000
2007/05/01 入金 2,900  4,100
2007/05/01 入金 2,000  2,100
2007/05/02 売上 3,000 5,100
2007/05/02 売上 2,000 7,100

現在は全ての残高の足し引きを出していますが

日付       金額  残高
             2,000
2007/05/01 売上 5,000 7,000
2007/05/01 入金 2,900  
2007/05/01 入金 2,000  2,100
2007/05/02 売上 3,000 
2007/05/02 売上 2,000 7,100

上の図の様に、連続する売上や入金の最後の行にだけ、残高の足し引きを表示させたいと思っています。
ストアドプロシージャの方で、Row_Number関数を用いて行番号を取ろうとしたのですが、めちゃくちゃになってしまったのでダメでした
レポート上で売上・入金区分(売上は0、入金は1と言うデータを持っています)でグループ化させて、グループフッターやグループヘッダーのBefore_Printで残高を表示させているテキストボックスのVisibleをTrueにしたりとしていますが、全部が出るか、全部が出ないか、一番初めだけ出て後は出ないと言った感じになってしまいました。

どうかよろしくお願いします
■No20307に返信(まいかさんの記事)
> 上の図の様に、連続する売上や入金の最後の行にだけ、残高の足し引きを表示させたいと思っています。

CrystalReports なら苦戦しそうな領分ですが、ActiveReports ならば DataFetch もしくはセクションの Format イベントで前後の日付を判定すれば制御できます。
じゃんぬねっとさんありがとうございます

DataFetchとの事でしたが、DataFetchは見つからなくてFetchDataと言うのがありますがこれの事でしょうか?

セクションの Format イベントなんですが、これはDetailの事なのでしょうか、それとも、売上・入金区分のグループヘッダーもしくはフッターのFormatなのでしょうか?

こういった事は初めてでやり方がわかりません
前後の日付を判断するやり方を簡単で良いので教えて貰えないでしょうか?
よろしくお願いします
■No20312に返信(まいかさんの記事)
> DataFetchとの事でしたが、DataFetchは見つからなくてFetchDataと言うのがありますがこれの事でしょうか?

すみません。Fetch と Data が前後してしまいましたがそれのことです。

> セクションの Format イベントなんですが、これはDetailの事なのでしょうか、
> それとも、売上・入金区分のグループヘッダーもしくはフッターのFormatなのでしょうか?

セクションとあいまいに書いたのは、他のグループ セクションが間に入っていると事情が変わるからです。

> こういった事は初めてでやり方がわかりません
> 前後の日付を判断するやり方を簡単で良いので教えて貰えないでしょうか?

売上と入金の境目がわかるグループ セクションがあるので、今回の場合は日付を判断する必要はなさそうです。
日付をさらにグルーピングに加えて「残高」はグループ フッタに配置してこのフッタをオーバーレイしてあげてください。
じゃんぬねっとさんありがとうございます
FetchDataはデータをレポートの各テキストボックス等に格納を指示する場所と曖昧にですが分かりました

オーバーレイするとの事ですが、どうすればいいのでしょうか?

よろしくお願いします
> オーバーレイするとの事ですが、どうすればいいのでしょうか?
グループフッタのプロパティに、オーバーレイというものがあると思います。
これは何に使うかというと、Detail等、通常グループフッタよりも上に来るものと
グループフッタを重ねて(同じ高さに)表示する、というものです。
つまり、日付と金額部分をDetailに、残高をグループフッタにして、
オーバーレイすればうまくいきますよ、ということです。
ただ、グループフッタのオーバーレイは、ActiveReportsのバージョンによっては
未実装なので、その場合はDataSetの作り方を工夫してなんとかするしかないですね〜。
takumixさん、ありがとうございます
ActiveReports 2.0J Standardで作成しています。
グループフッターには(Name),BackColor,CanShrink,ColumnLayout,Height,KeepTogether,
Modifiers,NewColumn,NewPage,PrintAtBottom,Visible
があります。
これのいづれかなのでしょうか?
色々設定を弄って、試しています
> グループフッターには(Name),BackColor,CanShrink,ColumnLayout,Height,KeepTogether,
> Modifiers,NewColumn,NewPage,PrintAtBottom,Visible
> があります。
この中にはないですね。

代替案としては、このままの方針でいくならば、
グループフッターではなくグループヘッダに残高を表示させるTextBoxを配置し、
UnderlayNextプロパティをTrueにしてみてください。
蛇足ですがこのグループヘッダとDetailのHeightを一緒にすれば、
行がずれることなく表示できると思います。
■No20319に返信(takumixさんの記事)
> グループフッタのプロパティに、オーバーレイというものがあると思います。
> これは何に使うかというと、Detail等、通常グループフッタよりも上に来るものと
> グループフッタを重ねて(同じ高さに)表示する、というものです。
> つまり、日付と金額部分をDetailに、残高をグループフッタにして、
> オーバーレイすればうまくいきますよ、ということです。

すみません。フォローありがとうございます。
仰るとおりで "同じ高さ" というか同じ Top 値にすれば良いというものですね。

> ただ、グループフッタのオーバーレイは、ActiveReportsのバージョンによっては
> 未実装なので、その場合はDataSetの作り方を工夫してなんとかするしかないですね〜。

もしかして、ActiveReports for .NET 2.0 Standard だと実装されていなかったですか?
Professional と Standard の違いには記載されていなかったのでこれで OK だと思っておりました。
じゃんぬねっとさん返信ありがとうございます。

■No20322に返信(じゃんぬねっとさんの記事)
> もしかして、ActiveReports for .NET 2.0 Standard だと実装されていなかったですか?
> Professional と Standard の違いには記載されていなかったのでこれで OK だと思っておりました。

私が以前開発で使っていたActiveReportsのバージョンは、Standard 1.0J SP4 でして、
こちらにはグループフッタのオーバーレイはありませんでした。
またActiveReports 2.0J Standardは使ったことがなく、
グループフッターのオーバーレイがあるかどうかわからなかったので、
>> ただ、グループフッタのオーバーレイは、ActiveReportsのバージョンによっては
>> 未実装なので、その場合はDataSetの作り方を工夫してなんとかするしかないですね〜。
上記のような書き込みになりました。
ただ、まいかさんからのグループフッタプロパティ情報によると、どうやら無いようですね。

横槍失礼しました。
じゃんぬねっとさん、takumixさんありがとうございました

一応最初にActiveReports 2.0J Standard と記述しておきましたが分かり辛かったみたいで、すみませんでした
UnderlayNextはあって、やってみた所アンダーイレ(?)で上書きはされたのですが、
最初の行に出てしまうので、教えて頂いたのですがこの方法はもし最初に出すとなった時に使わせて貰います

一応出来ました。
やり方としては、区分毎に1,2,3行…と数えていって、区分が変わり1行目の時に前の行を表示するといった方法です
テーブルにBoolean形式のフィールドを追加
Boolean形式のフィールドには常にFalseを入れる
データを一時テーブルに入れる際に、行を数える(売上・入金区分毎に)
売上・入金区分が変わったら、前の行のBoolean形式のフェールドをTrueに書き換える
注意点は、一番最初はどちらが出ても1行目なので、それは更新しない様にする事
それと、最後はどちらが出ても必ず更新する事
此処までは、フォームで一時テーブルに入れる時に変数等を用いてやりました

レポートでは残高が出るテキストボックスのVisibleをDetailのFormatで
残高のTextBox.Visible = CBool(Boolean形式のデータを格納したTextBox.Value)
としてやりました
結果、売上・入金区分の連続した最後の行のみ表示し、後は非表示と出来ました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板