先日より相談させていただいていた、見積書レポートを作成しはじめて、なかなか苦戦しております。
①枠線がきれいにいかない
⇒通常の線を透明に設定し、「枠線」で対応していたら、線の太さにばらつきがあったり、いまいちきれいにしあがらないため、「直線」で対応したところ、行が2行になった時自動で対応してくれません…何か良い方法はありませんでしょうか。
(17:34追記)横は直線、縦は枠線で対応しました。枠線がイマイチきれいにいったりいかなかったり…私だけでしょうか。
②グループが2重にあり、小計を出しています。(Aレベルグループ、Bレベルグループとする)
Aレベルのグループの中にBレベルが複数ある場合は両方の小計を出したいですが、Aレベルの中にBレベルが1個しかないときは小計が同じになってしまうので、Aレベルだけの小計で良いと思っています。Bレベルの小計の表示の場合分けは可能でしょうか…。
Bレベルグループの数を事前に数えておいてAレベルグループのヘッダーで表示の切り替えをすればよさげ
枠線に関しては、私は使ってないので分かりません。
枠線が実装される前から、直線コントロールかLineメソッドで罫線は引いていたので、ずっとその方法を使ってます。
境界線で罫線を引くと横罫線の太さが違ったりしたことがあったので上記の方法をとってます。
私もhirotonさんの回答の方法にすると思いますが、Bレベルグループの数を事前に数えておくというのがちょっと難しいですね。
Aグループ、Bグループでグループ化した集計クエリ、あるいは固有の値をはいにしたクエリを作成。
そのクエリからさらにAグループでグループ化、Bグループをカウントする集計クエリを作成。
このクエリをレポートのレコードソースのクエリに追加して、Aグループのキーフィールドで結合することになりますね。
グループのカウントはそんな感じですね。SQLの知識的なのは人に寄りけりってことでとりあえず回答に含めない感じでした
別案としては[page]使って事前にformat走らせて自前でカウントするなんてのも考えたんですが、レポートの印刷の都合考える必要ないんでクエリで事前に計算させとくのが楽だろうなとも
簡単に実現できる方法を思いつきました。
各グループの小計はグループフッターセクションで表示しているとします。
それぞれのグループの小計を表示しているテキストボックス名を、
A小計、B小計 とします。
Bグループのフッターセクションのフォーマット時に下記のように記述します。
要は、Aグループ内のBグループ数が1件ならA小計とB小計は同じになります。同じものを表示するのは無駄だということですよね。
同じなら、Cancel を True にしてそのセクションの出力をキャンセルしてます。
グループ内で集計テキストボックスを参照するとそのグループ内での集計値が取得できますので上記のコードでうまくいきます。
もし、マイナスの集計があり、たまたまA小計とB小計が同じになる可能性かあるなら、=Count(*) で件数を表示させるテキストボックスを配置しておいてそれを比較するようにすればいいでしょう。
これすごいですねぇ。試してみたら確かにBグループのフッターのformatイベントでAグループのフッターの小計が取れました。Aグループのフッターのformatイベント入る前なのでどうかと思ってたんですが計算自体は終わってる上にちゃんと自分のグループの数値が取れるんですね
テストデータ
レポートのグループ化の設定
グループ化:A、フッターにテキストボックス[A小計](=Sum([n]))
└グループ化:B、フッターにテキストボックス[B小計](=Sum([n]))
テストコード
出力結果
※未出力のフッターの集計がきちんととれてる(Me!A小計)
※レコードの参照はグループの最後のレコードっぽい(並び順指定してなかったらIDはなぜか降順に・・・)
グループヘッダーに集計用テキストボックス
=Sum()
、=Count()
を置いた場合でもちゃんとグループ内の集計が取得できますので、formatイベントに関係なくグループ全体の集計をしているみたいですね。ちなみに詳細セクションに集計関数を置くと全体の修正をするようです。一番目のレコードでも全体集計になります。
こちらの方法で1回うまくいったと思っていたのですが、「nullの値が不正です」との警告が出て、固まるようになりました。なにか間違っているのでしょうか…
ケアレスミスしてました…うまくいきました。
おっしゃるとおり、「Bレベルグループの数を事前に数えておく」ところでひっかかってしまい、後回しにしていました。
いずれも教えていただき助かりました。
hiroton様、hatena様、ありがとうございました!