- - PR -
CrystalReportsで多重構造化(サブレポート)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-03-07 18:42
現在、VisualStudio2005にて開発を行っています。
やりたいことが不透明でうまく伝えれるか自信がありませんが、以下の通りです。 メインレポートを作成し、サブレポートを追加します。 そのサブレポートに、またサブレポートを追加したいですが、追加できません。 ちなみに、最終出力はPDF形式です。 イメージでは以下の通りです。 −−−−−−− AAAA BBBB BBBB AAAA BBBB BBBB CCCC CCCC −−−−−−− というのを何度も繰り替えし行いたいです。 「A」と「B」だけを考えれば、サブレポートが一つで済むのですが、その後、「C」を表示したいため、メインレポート上にサブレポート「A」、「C]を作っております。 その「A」の中に「C」を作りたいという事です。 サブレポートにサブレポートを追加できないのが仕様というのであれば、代わりの方法でもよいので、ありませんでしょうか? 私が無い知恵絞って考えた別の方法は、「A」と「C」を別帳票とし作成を行い、2つの帳票を合わせて出力しようとしましたが、総ページ数や、ページが区切られてしまうため、断念致しました。 解決策などありましたら、よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2007-03-07 19:37
これだけの情報ですと、「サブ レポートを使う必要がないのではないでしょうか?」 という回答しかできないわけですが、何をもってサブ レポートが "必要" と感じたのでしょうか? 必要となれば、そのあたりに関連する情報の提示がないと、とりあえず私は回答できないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-03-08 11:09
じゃんぬねっとさん回答ありがとうございます。 データの構造なのですが、 「A」の情報はテーブル「A」から複数件持ってくる、 「B」の情報はテーブル「B」から複数件持ってくる、 「C」の情報はテーブル「C」から複数件持ってくる、 「A」のテーブル1件に対して、「B」のテーブルが複数件存在するという状況です。 「A」〜「C」のデータは何度も繰り返す可能性があるのですが、グループを使いますと、「A」〜「C」のデータが交互に繰り返されてしまいます。「A」〜「B」を繰り返した後、「C」を繰り返す場合は、A-Bをサブレポート化する必要があると思ったため、サブレポートに致しました。 大変申し訳ないのですが、私の書き方に不備がありました、やりたい事を全て書いたつもりなのですが、肝心な部分が抜けてしまっていました、最初に書いたイメージですと、サブレポートのグループを使う事で実現可能のようです。 しかし、私がやりたい事はもうちょっと複雑でした、イメージは以下の通りです。 −−−−−−− AAAA BBBB BBBB DDDD DDDD AAAA BBBB BBBB DDDD DDDD CCCC CCCC −−−−−−− 最初のイメージに「D」を追加しました。最初の質問を変更して大変申し訳ありませんが、この場合の対処法で行き詰ってしまいました。「D」も複数行繰り返す必要があります。 この様な場合の対処法などありませんでしょうか? | ||||||||||||
|
投稿日時: 2007-03-08 12:22
データ取得元のテーブルが複数だからといって、レポートを複数にする必要は必ずしもないです。 というより、帳票設計上はサブ レポートはなるべく避けるように考えるべきだと思っています。
このデータというのは 「行」 にあたりますよね。 これは、同じ 1 つの行を何度も何度も繰り返す必要があると見て良いでしょうか? それとも、単に複数データがあるという意味でしかないのでしょうか?
これも上記と同様で、複数行繰り返すその行が物理的に 1 つしかないのか、 そもそも複数行あって、その行数分繰り返すという意味なのかで回答が変わります。 複雑なレポートは、ストアドで単一になるように一時テーブルを作るという手もあります。 一度、このあたりも検討してみてください。(現時点では、回答しだいなのですが) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-03-09 09:58
回答ありがとうございます。
対応策があるようでしたら検討してみます。
これは、単に複数データがあるという意味です。 その複数データの分だけ、行数を出力すると思って頂いて構いません。
上記の回答とかぶってしまいますが、じゃんぬねっとさんの通り、複数行あって、その行数分繰り返すという意味となります。 現在、じゃんぬねっとさんの意見をふまえて、ストアドで中間テーブルもどきを作成し、いろいろ試しております。 その場合は順番を制御するグループIDなるものを追加し、グループ化を作成するということでよいのでしょうか。 (とはいうものの、そのグループIDの振り方でうまくいっていなかったりします) もしかするとやり方自体に問題があるのかもしれません。 最初に私の情報提示が甘い為すみませんでした。 | ||||||||||||
|
投稿日時: 2007-03-09 15:16
今回、「A」「B」「C」「D」 においてリレーション関係があるなら、 グループ セクションを使って構造化は図れますが、
この 「順序」 はどのテーブルの何をもとに決めるのでしょうか? もし、単純にキーのリレーションがあるのであれば、難易度はグっと下がります。 どうも、C (と D) が曲者のようですが、この順番はどう決められるのでしょうか?
キーは複数存在していても良いです。 上記に書いたとおり、C と D が A と B にどう絡んでいるのか教えて頂けないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-03-09 15:55
回答ありがとうございます。
リレーション関係はあります。
申し訳ありません、私の書き間違いで「D」がおかしくなっていました。 「D」は「B」と同列で、「A」の下にあるものだと思って下さい。
テーブルとしては、親のテーブルに対して「A」と「C」がリレーションしています。 その「A」のテーブルに対して、「B」と「D」がリレーションしている形です。 −−−− 親 ├ A ┬ B │ └ D └ C −−−− | ||||||||||||
|
投稿日時: 2007-03-09 16:33
リレーションがあるならば、そのように DataSource を作成するだけで何とかなりそうですね。 SQL 文で結合してあげれば良いです。 ところで、"親" とはなんですか? 初めて出てきたような... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |