- PR -

CrystalReportsで多重構造化(サブレポート)

投稿者投稿内容
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 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つの帳票を合わせて出力しようとしましたが、総ページ数や、ページが区切られてしまうため、断念致しました。

解決策などありましたら、よろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-07 19:37
引用:

YOSHIさんの書き込み (2007-03-07 18:42) より:

イメージでは以下の通りです。

−−−−−−−
AAAA
 BBBB
 BBBB
AAAA
 BBBB
 BBBB
CCCC
CCCC
−−−−−−−

というのを何度も繰り替えし行いたいです。
「A」と「B」だけを考えれば、サブレポートが一つで済むのですが、その後、「C」を表示したいため、メインレポート上にサブレポート「A」、「C]を作っております。
その「A」の中に「C」を作りたいという事です。
サブレポートにサブレポートを追加できないのが仕様というのであれば、代わりの方法でもよいので、ありませんでしょうか?


これだけの情報ですと、「サブ レポートを使う必要がないのではないでしょうか?」
という回答しかできないわけですが、何をもってサブ レポートが "必要" と感じたのでしょうか?

必要となれば、そのあたりに関連する情報の提示がないと、とりあえず私は回答できないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2007-03-08 11:09
引用:

じゃんぬねっとさんの書き込み (2007-03-07 19:37) より:
これだけの情報ですと、「サブ レポートを使う必要がないのではないでしょうか?」
という回答しかできないわけですが、何をもってサブ レポートが "必要" と感じたのでしょうか?

必要となれば、そのあたりに関連する情報の提示がないと、とりあえず私は回答できないです。




じゃんぬねっとさん回答ありがとうございます。

データの構造なのですが、
「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」も複数行繰り返す必要があります。

この様な場合の対処法などありませんでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-08 12:22
引用:

YOSHIさんの書き込み (2007-03-08 11:09) より:

データの構造なのですが、
「A」の情報はテーブル「A」から複数件持ってくる、
「B」の情報はテーブル「B」から複数件持ってくる、
「C」の情報はテーブル「C」から複数件持ってくる、
「A」のテーブル1件に対して、「B」のテーブルが複数件存在するという状況です。


データ取得元のテーブルが複数だからといって、レポートを複数にする必要は必ずしもないです。
というより、帳票設計上はサブ レポートはなるべく避けるように考えるべきだと思っています。

引用:

「A」〜「C」のデータは何度も繰り返す可能性があるのですが、グループを使いますと、「A」〜「C」のデータが交互に繰り返されてしまいます。「A」〜「B」を繰り返した後、「C」を繰り返す場合は、A-Bをサブレポート化する必要があると思ったため、サブレポートに致しました。


このデータというのは 「行」 にあたりますよね。
これは、同じ 1 つの行を何度も何度も繰り返す必要があると見て良いでしょうか?
それとも、単に複数データがあるという意味でしかないのでしょうか?

引用:

最初のイメージに「D」を追加しました。最初の質問を変更して大変申し訳ありませんが、この場合の対処法で行き詰ってしまいました。「D」も複数行繰り返す必要があります。


これも上記と同様で、複数行繰り返すその行が物理的に 1 つしかないのか、
そもそも複数行あって、その行数分繰り返すという意味なのかで回答が変わります。

複雑なレポートは、ストアドで単一になるように一時テーブルを作るという手もあります。
一度、このあたりも検討してみてください。(現時点では、回答しだいなのですが)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2007-03-09 09:58
回答ありがとうございます。
引用:

じゃんぬねっとさんの書き込み (2007-03-08 12:22) より:

データ取得元のテーブルが複数だからといって、レポートを複数にする必要は必ずしもないです。
というより、帳票設計上はサブ レポートはなるべく避けるように考えるべきだと思っています。


対応策があるようでしたら検討してみます。

引用:

このデータというのは 「行」 にあたりますよね。
これは、同じ 1 つの行を何度も何度も繰り返す必要があると見て良いでしょうか?
それとも、単に複数データがあるという意味でしかないのでしょうか?


これは、単に複数データがあるという意味です。
その複数データの分だけ、行数を出力すると思って頂いて構いません。

引用:

これも上記と同様で、複数行繰り返すその行が物理的に 1 つしかないのか、
そもそも複数行あって、その行数分繰り返すという意味なのかで回答が変わります。

複雑なレポートは、ストアドで単一になるように一時テーブルを作るという手もあります。
一度、このあたりも検討してみてください。(現時点では、回答しだいなのですが)


上記の回答とかぶってしまいますが、じゃんぬねっとさんの通り、複数行あって、その行数分繰り返すという意味となります。

現在、じゃんぬねっとさんの意見をふまえて、ストアドで中間テーブルもどきを作成し、いろいろ試しております。
その場合は順番を制御するグループIDなるものを追加し、グループ化を作成するということでよいのでしょうか。
(とはいうものの、そのグループIDの振り方でうまくいっていなかったりします)

もしかするとやり方自体に問題があるのかもしれません。
最初に私の情報提示が甘い為すみませんでした。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-09 15:16
引用:

YOSHIさんの書き込み (2007-03-09 09:58) より:

これは、単に複数データがあるという意味です。
その複数データの分だけ、行数を出力すると思って頂いて構いません。


今回、「A」「B」「C」「D」 においてリレーション関係があるなら、
グループ セクションを使って構造化は図れますが、

引用:

AAAA
 BBBB
 BBBB
DDDD
DDDD
AAAA
 BBBB
 BBBB
DDDD
DDDD
CCCC
CCCC


この 「順序」 はどのテーブルの何をもとに決めるのでしょうか?
もし、単純にキーのリレーションがあるのであれば、難易度はグっと下がります。
どうも、C (と D) が曲者のようですが、この順番はどう決められるのでしょうか?

引用:

現在、じゃんぬねっとさんの意見をふまえて、ストアドで中間テーブルもどきを作成し、いろいろ試しております。
その場合は順番を制御するグループIDなるものを追加し、グループ化を作成するということでよいのでしょうか。
(とはいうものの、そのグループIDの振り方でうまくいっていなかったりします)


キーは複数存在していても良いです。
上記に書いたとおり、C と D が A と B にどう絡んでいるのか教えて頂けないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2007-03-09 15:55
回答ありがとうございます。
引用:

じゃんぬねっとさんの書き込み (2007-03-09 15:16) より:
今回、「A」「B」「C」「D」 においてリレーション関係があるなら、
グループ セクションを使って構造化は図れますが、


リレーション関係はあります。

引用:

この 「順序」 はどのテーブルの何をもとに決めるのでしょうか?
もし、単純にキーのリレーションがあるのであれば、難易度はグっと下がります。
どうも、C (と D) が曲者のようですが、この順番はどう決められるのでしょうか?


申し訳ありません、私の書き間違いで「D」がおかしくなっていました。
「D」は「B」と同列で、「A」の下にあるものだと思って下さい。

引用:

キーは複数存在していても良いです。
上記に書いたとおり、C と D が A と B にどう絡んでいるのか教えて頂けないでしょうか?


テーブルとしては、親のテーブルに対して「A」と「C」がリレーションしています。
その「A」のテーブルに対して、「B」と「D」がリレーションしている形です。
−−−−

├ A ┬ B
│ └ D
└ C
−−−−
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-09 16:33
引用:

YOSHIさんの書き込み (2007-03-09 15:55) より:

テーブルとしては、親のテーブルに対して「A」と「C」がリレーションしています。
その「A」のテーブルに対して、「B」と「D」がリレーションしている形です。
−−−−

├ A ┬ B
│ └ D
└ C
−−−−


リレーションがあるならば、そのように DataSource を作成するだけで何とかなりそうですね。
SQL 文で結合してあげれば良いです。

ところで、"親" とはなんですか? 初めて出てきたような...

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

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