サブレポートの適正な挿入位置は?
ASURADA - 2007/04/19(Thu) 12:02 No.3008
はじめまして。宜しくお願い致します。
環境:CR8.5+VB6sp5+Oracle9i
現在帳票の作成を行っておりますが、
サブレポートの表示がうまくいかず困っております。
まず、やりたいことを記します。
@請求書等の1枚の上下で同じ内容を印字
Aある項目(複数項目)のデータが変わったら改ページ
B固定で6行の印字(空白行含む)+改ページ
C合計欄はAの条件で最終レコードの時だけ印字
です。
※1明細行 = Oracleの1レコードになります。
イメージを以下に記します。
1頁 2頁 3頁(2頁の続き)
PageHeader PageHeader PageHeader
コードA:aaaa コードB:bbbb コードA:aaaa コードB:bbbb コードA:aaaa コードB:bbbb
コードC:cccc コードD:dddd コードC:cccc コードD:ddde コードC:cccc コードD:ddde
―――――――――――――― ―――――――――――――― ――――――――――――――
|No |コードZ |数量 | 合計 | |No |コードB |数量 | 合計 | |No |コードB |数量 | 合計 |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|01 |AAAA | 5 | | |07 |AAAA | 10 | | |51 |GGGG | 3 | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|05 |BBBB | 11 | | |16 |BBBB | 3 | | |56 |HHHH | 6 | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|12 |CCCC | 1 | | |23 |CCCC | 5 | | |61 |IIII | 10 | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|35 |DDDD | 3 | 20 | |28 |DDDD | 7 | | |65 |JJJJ | 7 | 55 |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
| | | | | |35 |EEEE | 1 | | | | | | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
| | | | | |46 |FFFF | 3 | | | | | | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
------------------------------ ---------------------------- ----------------------------
PageHeader PageHeader PageHeader
コードA:aaaa コードB:bbbb コードA:aaaa コードB:bbbb コードA:aaaa コードB:bbbb
コードC:cccc コードD:dddd コードC:cccc コードD:ddde コードC:cccc コードD:ddde
―――――――――――――― ―――――――――――――― ――――――――――――――
|No |コードZ |数量 | 合計 | |No |コードB |数量 | 合計 | |No |コードB |数量 | 合計 |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|01 |AAAA | 5 | | |07 |AAAA | 10 | | |51 |GGGG | 3 | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|05 |BBBB | 11 | | |16 |BBBB | 3 | | |56 |HHHH | 6 | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|12 |CCCC | 1 | | |23 |CCCC | 5 | | |61 |IIII | 10 | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
|35 |DDDD | 3 | 20 | |28 |DDDD | 7 | | |65 |JJJJ | 7 | 55 |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
| | | | | |35 |EEEE | 1 | | | | | | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
| | | | | |46 |FFFF | 3 | | | | | | |
|―――――――――――――| |―――――――――――――| |―――――――――――――|
こちらのページで
・固定行の表示はアンダーレイ
・上下同一内容印字はサブレポート
ということは理解しているつもりです。
そこでまず、固定6行の印字を実現しようとしました。
手順は
1.ページヘッダーに[コードA][コードB][コードC][コードD]を作成
2.グループヘッダー1[コードA](非表示)
3.グループヘッダー2[コードB](非表示)
4.グループヘッダー3[コードC](非表示)
5.グループヘッダー4[コードD](表示)(続くセクションをアンダーレイ)
6.グループヘッダー4に罫線で6行分のスペースを確保
7.詳細に[コードZ][数量][合計(積算合計フィールド)]
8.グループフッター4(非表示)(出力後に改ページ)
9.グループフッター3(非表示)(出力後に改ページ)
10.グループフッター2(非表示)(出力後に改ページ)
11.グループフッター1(非表示)(出力後に改ページ)
と行い、機能A、B、Cは実現することができました。
残る機能@ですが、
サブレポートをどこに入れても
うまくイメージのような表示になりませんでした。
この場合、サブレポートをどのように挿入したら
よいでしょうか?
どなたかご存知の方がいらっしゃいましたら、
ご教示お願い致します。
- Re: サブレポートの適正な...
24x7 - 2007/04/20(Fri) 22:43 No.3011
これは、難しいですね。
サブレポートを利用するとリンクや選択条件の結果、すべてのデータを表示するので都合のよく改ページはできません。
- Re: サブレポートの適正な...
ASURADA - 2007/04/23(Mon) 09:29 No.3014
- 24x7さんお返事ありがとうございます。
やはり、難しいですか。
上下の伝票(上下同一内容)の帳票は
ここの掲示板にも書かれていましたが、
あれは、単一レコードのことだったんでしょうか。
クリスタルレポートでは不可能でも、
他の帳票ツールでは実現可能なのでしょうか?
クリスタルレポートの掲示板で他のツールの話は良くないのかもしれませんが、
もしご存知であれば実現可能な帳票ツールを教えていただけませんか?
宜しくお願い致します。
- Re: サブレポートの適正な...
24x7 - 2007/04/23(Mon) 22:50 No.3018
- 単一レコードなら可能でしょう。何が一番難しいかといえば、サブレポートで改ページが発生しないようにすることです。
単純に考えるとメインもサブレポートも同じデザインするわけなので、改ページの発生も同一条件になります。そのため、サブレポートの挿入場所で変化しますが、グループフッターに挿入すると、メイン1ページ目(6レコード)を表示後、サブレポートでは、その同一グループのすべてのデータを表示するようなります。
サブレポートの内容は、必ず6件または、それ以下の抽出条件を設定することができれば、可能かと思います。
例えば、サブレポート用に6件分のレコードのテーブルを作成します。(既存テーブルでも必ず6件分しか抽出しない条件を設定することができれば、OK)
詳細で配列変数を利用して1ページ分のデータを保存します。項目が少なければ、1つの式フィールドで、多ければ、それぞれ項目別に式フィールドを作成します。
サブレポートには、この配列変数の内容を表示する仕組みにします。配列変数のインデックス値として、1ページ分(6レコード)が必要になります。サブレポートで利用するテーブルはあくまでもダミーです。必要なデータは、配列変数に保存されたデータです。
- Re: サブレポートの適正な...
24x7 - 2007/04/23(Mon) 23:15 No.3019
サブレポートの挿入場所は、詳細に挿入します。詳細セクションを2つに分割して、下部にサブレポートを挿入します。詳細aは、上記レポートそのままで、詳細bにサブレポートです。但し、詳細bは、詳細aの6件出力後と同一グループ内の最終ページに表示するように非表示の条件式を設定します。サブレポートをページフッターに入れても評価順が違うので駄目でした。グループフッターでは、同一グループ内の最終ページのみ表示されるので駄目ですね。
あと、6件以下のページでは、データが無いところには配列変数の初期値が表示されるので型変換(数値(0)から文字列(""))するか、非表示の条件を設定することで回避できます。
- Re: サブレポートの適正な...
24x7 - 2007/04/23(Mon) 23:35 No.3020
Crystal Reports 8.5ではないですが、XIで以下のような式で配列変数を利用しました。
//記述例
evaluateafter({@カウンタアップの式フィールド});
shared numbervar array 配列の変数名;
numbervar linecount;
numbervar idx := Remainder(linecount,6);
if idx=0 then
配列の変数名[6]:={項目フィールド}
else
配列の変数名[idx]:={項目フィールド};
サブレポートでは、上記の配列変数を利用した式フィールドを詳細に挿入します。
//記述例
shared numbervar array 変数名;
numbervar linecount;
配列の変数名[{RecordNumber}]
サブレポートが実行されるときは必ず6件分の処理しかしないようにすることです。
RecordNumberでなくても、ダミーテーブルの値(1から6)を利用してもOKです。
既存テーブルの場合、サブレポートのレコード選択式には、以下のような式を使うこともできます。
{項目フィールド} in [ "データa", "データb", "データc", "データd","データe","データf"]
メインとサブレポートのリンクは不要です。
あと、細かいことは表示結果をみてから調整してみてください。
- Re: サブレポートの適正な...
ASURADA - 2007/04/24(Tue) 13:22 No.3022
- 24x7さんお返事ありがとうございます。
細かく説明していただきありがとうございます。
ただ、僕の理解力が乏しいため、
最初のテーブル絡みのあたりでつまづいていますので、
質問させてください。
>例えば、サブレポート用に6件分のレコードのテーブルを作成します。
6件分のレコードのテーブルとはDBのテーブルのことですよね?
そうであれば、DBの変更ができないため無理なんです。
>既存テーブルでも必ず6件分しか抽出しない条件を設定することができれば、OK
これはどのようなことでしょうか?
サブレポートにSQLを渡してやるということですか?
回答の程、よろしくお願いします。
- Re: サブレポートの適正な...
24x7 - 2007/04/24(Tue) 13:39 No.3023
ちょっと難しいかもしれませんが、上記で説明したように必ず1ページ毎に表示させるサブレポートは、データ件数を6件固定にします。その固定する方法として、ダミーのテーブルを作る、既存テーブルから6件分を抽出します。
>例えば、サブレポート用に6件分のレコードのテーブルを作成します。
6件分のレコードのテーブルとはDBのテーブルのことですよね?
そうであれば、DBの変更ができないため無理なんです。
DBを変更する必要ありません。
サブレポートのレコード選択式に以下のような式で6件分のデータを取得します。
既存テーブルから6件のデータが取得できれば、いいのです。
例えば、
{コードB} in ["AAAA',"BBBB',"CCCC","DDDD',"EEEE","FFFF"]
という感じです。
なんでもいいので6件分のレコードを取得します。
>既存テーブルでも必ず6件分しか抽出しない条件を設定することができれば、OK
これはどのようなことでしょうか?
サブレポートにSQLを渡してやるということですか?
違います。そんなに難しく考えないでください。
既存テーブルで6件分取得可能なものを選びます。これは、レポートの表示で利用するのではなく、配列関数のインデックス値として利用するだけのものです。
なんでも構わないのです。
- Re: サブレポートの適正な...
ASURADA - 2007/04/24(Tue) 16:17 No.3025
- 24x7さん回答ありがとうございます。
さらに質問なんですが、
>//記述例
>evaluateafter({@カウンタアップの式フィールド});
>shared numbervar array 配列の変数名;
>numbervar linecount;
>numbervar idx := Remainder(linecount,6);
>if idx=0 then
>配列の変数名[6]:={項目フィールド}
>else
>配列の変数名[idx]:={項目フィールド};
↑これはどこに作成するものですか?
サブレポートの式フィールドですか?
>//記述例
>shared numbervar array 変数名;
>numbervar linecount;
>配列の変数名[{RecordNumber}]
↑これはサブレポートの式フィールドでよいですか?
お手数をおかけしますが、お願い致します。
- Re: サブレポートの適正な...
24x7 - 2007/04/24(Tue) 21:42 No.3026
- 説明が不足して申し訳ございません。
>//記述例
>evaluateafter({@カウンタアップの式フィールド});
>shared numbervar array 配列の変数名;
>numbervar linecount;
>numbervar idx := Remainder(linecount,6);
>if idx=0 then
>配列の変数名[6]:={項目フィールド}
>else
>配列の変数名[idx]:={項目フィールド};
これは、メインレポートです。メインレポートの1ページ目のデータを配列変数に保存する式フィールドになります。この式フィールドは、詳細セクションに挿入します。
メインレポートの1ページ目の最大6件分は、この配列変数に保存することになります。
>//記述例
>shared numbervar array 変数名;
>numbervar linecount;
>配列の変数名[{RecordNumber}]
これは、サブレポートの詳細に挿入します。
サブレポートは、6件分のデータしか存在しないので、そのレコード番号をインデックスとして配列関数に保存されたデータを取得します。
- Re: サブレポートの適正な...
24x7 - 2007/04/24(Tue) 22:01 No.3028
- 追記
>//記述例
>evaluateafter({@カウンタアップの式フィールド});
上記の式は、カウンタがゼロだと正しく配列関数をインデックスできないのでカウンタアップの式フィールドを先に評価してからこの式を評価させるためのおまじないです。
カウンタアップの式フィールドの内容は、こんな感じです。
WhilePrintingRecords;
NumberVar linecount;
linecout:=linecount + 1;
- Re: サブレポートの適正な...
ASURADA - 2007/04/25(Wed) 14:32 No.3037
- 24x7さん回答ありがとうございます。
ようやく形になってきたのですが、
まだうまくいかない箇所があるので再度質問させてください。
>{コードB} in ["AAAA',"BBBB',"CCCC","DDDD',"EEEE","FFFF"]
↑のところは実在するデータでないと6件固定はできないのでしょうか?
実在しないデータで試したところ1件しかサブレポートには表示できませんでした。
データが可変なもので設定しているため、
実在しないデータの場合、表示できなくなってしまいます。
お手数をおかけしますが、よろしくお願い致します。
- Re: サブレポートの適正な...
24x7 - 2007/04/25(Wed) 15:07 No.3038
何度も言いますが、配列変数のインデックス値として、レコード番号または、1〜6の数字が利用できれば、テーブルは何でも構いません。
でも、実際に存在しないと駄目です。詳細セクションを最大6回評価させるためには最低でも6レコードが存在しないと駄目です。
上記のテーブルを見る限り、6件以上のレコードが存在するテーブルがあるように思えますが。。まだ、何か勘違いしていませんか。
- Re: サブレポートの適正な...
ASURADA - 2007/04/25(Wed) 17:36 No.3039
- 24x7さんお返事ありがとうございます。
理解が悪くて申し訳ありません。
>上記のテーブルを見る限り、
>6件以上のレコードが存在するテーブルがあるように思えますが。。
確かに6件以上のレコードは存在します。
ですが、クリスタルレポート上に
{コードB} in ["AAAA',"BBBB',"CCCC","DDDD',"EEEE","FFFF"]
のような定義をするということは
DB(テーブル)内の固定値(いついかなるときにも変化しない値)を
設定してやる必要があるのではないでしょうか?
この考え方が間違っていますか?
ご指摘お願い致します。
- Re: サブレポートの適正な...
24x7 - 2007/04/25(Wed) 21:55 No.3040
- レポートを表示する前にデータベースの内容が絶えず可変で固定値を指定することできないということですね。それなら上記の理解であっています。
配列変数のインデックス値で利用するレコード6件分が取得できれば、何でもいいんですけど。上記のレコード選択式は6件分を取得するための簡単な例を提示しただけなんです。 どのようなテーブル内容だかわからないけど、レコードに通し番号があれば、{No.} < 7 でもいいのですが・・
何もなければ、ダミーテーブルを追加する以外ないのでは。。
- Re: サブレポートの適正な...
ASURADA - 2007/04/27(Fri) 09:19 No.3045
- 24x7さん回答ありがとうございます。
返事が遅れてしまいすみません。
やはり、可変データでは不可能なんですね。
ダミーテーブルですか。。。
設計者と相談してみます。
理解が悪く何度も質問してしまったのに
その度に答えていただきとても感謝しております。
本当にありがとうございました。
- Re: サブレポートの適正な...
24x7 - 2007/04/27(Fri) 14:43 No.3047
- 可変データでも通し番号とかつけてないのでしょうか。上記レポートのNoの値は、シーケンシャルな番号ではないのですか。レポート選択式に、SELECT TOP 6 のような記述ができればいいのですが・・
- Re: サブレポートの適正な...
ASURADA - 2007/04/27(Fri) 17:50 No.3049
24x7様 お返事ありがとうございます。
残念ならが、通し番号のようなものは持っていませんし、
構造上付加することもできないのです。
ふと、思ったのですが、
参照できるのはDBだけではないですよね。
確か、テキストファイルからもレコード取得ができたと思うのですが、
可能でしょうか?
もし、仮にテキストでデータが取得できるのであれば、
テキストファイルに固定値6件のデータをセットし、
サブレポート側でそのテキストファイルのレコードを取得して
6行の表示をするということができるのではないかと思うのですが。
こんなことは可能でしょうか?
ご指摘お願い致します。
- Re: サブレポートの適正な...
24x7 - 2007/04/27(Fri) 22:50 No.3050
- CR8.5では、テキスト、CSVファイルは、ODBC経由だけだったと思います。
XIなら、テキスト、CSV、XLSファイルを直接利用することが可能です。
あと、CR8.5では、データベースエキスパートで「コマンドの追加」を利用できますか?利用可能であれば、サブレポートは、以下のようなSQLコマンドを利用します。
SELECT * FROM テーブル名 WHERE ROWNUM < 7
もちろん、テーブルには、6件以上のデータが存在している必要があります。これなら、特定の項目を利用しなくても必要なレコード件数分を取得することができます。
ただ、「コマンドの追加」の機能がなければ駄目です。
サブレポートに利用するデータソースは、何でも構いませんが、配布することも考慮するとテキストファイルに直接アクセスすることが楽だけど。
- Re: サブレポートの適正な...
ASURADA - 2007/05/01(Tue) 09:48 No.3057
- 24x7様 お返事ありがとうございます。
連休を挟んでしまったため、返事が遅くなり申し訳ありません。
「コマンドの追加」を探してみましたが、
その機能はCR8.5にはなさそうです。
(ヘルプファイルが参照できないため、確実ではありません)
テキストの方向で考えてみたいと思います。
長々とお付き合い頂きありがとうございました。
ページヘッダとページフッタの間の隙間をなくしたい
reiko - 2007/04/26(Thu) 10:31 No.3041
いつもお世話になります。
昨日質問した、「行数固定の帳票」(No.3031)の帳票について、新たな質問なのですが、
ページヘッダと、ページフッタの間に隙間が出来るのをなくす方法はありますか?
罫線のデザインについてでですが、
帳票ヘッダ部分〜明細行最下部までをページヘッダに配置し、
小計、合計部分をページフッタに配置しました。
最初は「続くセクションをアンダーレイ」するので、
合計行部分まで全ての罫線をページヘッダに配置していたのですが、
ページフッタに合計値のテキストフィールドを配置する為にページフッタの高さを広げると、
「ページヘッダとページフッタの合計値がページより大きいです」の旨の
エラーになるので、このような対処をしました。
でも、そうすると、縦の罫線に隙間が出来てしまうのです。
明細行から合計行まで続く罫線に関しては、フッタの罫線をセクションを越えて上にまで配置することでヘッダの罫線とフッタの罫線が重なるイメージで、見た目隙間をなくす事が出来ましたが、
合計行にだけ配置したい縦罫線があるので、困ってしまいました。
ページヘッダとページフッタの間の隙間をゼロにする事は可能でしょうか?
よろしくご教授お願い致します。
- Re: ページヘッダとページ...
NZ-000 - 2007/04/26(Thu) 13:44 No.3042
- こんにちは。
>ページヘッダと、ページフッタの間に隙間が出来るのをなくす方法はありますか?
できません。
なので例えば次のようにします。
1.詳細を二つ(aとb)に分割する。
2.aを通常の詳細としてデザインする。
3.bをページフッターとしてデザインする(ページフッターの代わりにする)。
4.投稿No.3034にある改ページ条件をbの設定に記述する。
5.bの非表示設定で改ページする直前のみ表示するようにする。
// 非表示条件式
WhilePrintingRecords;
numberVar line;
line <> X // Xは表示したい行数
6.bをアンダーレイする(aの設定で"続くセクションをアンダーレイ"をチェック)。
7.ページフッターを非表示にする。
帳票イメージがわからないのでここから先はなんとも言えませんが、これで隙間に当たるものはなくなります。
- Re: ページヘッダとページ...
NZ-000 - 2007/04/26(Thu) 13:52 No.3043
- あぁ、
これだと表示したい行数に満たない場合にbが表示されないのでOnLastRecordと論理積とるようにした方がいいかな。
line <> X or OnLastRecord
(グループ使ってるなら、"グループの最終レコードである"ことと論理積)
- Re: ページヘッダとページ...
reiko - 2007/04/27(Fri) 08:59 No.3044
NZ-000さん、今回も親切なご回答ありがとうございました。
アドバイスを参考に、全ての罫線のデザインをページヘッダに配置し、
集計部分を詳細bに配置する事で、希望する帳票を作成する事が出来ました。
ほんと、色々な機能があるんですね。。。
こうやってやってみると、かなり複雑で(私にとってはですが;)、
クリスタルレポートも楽しいですね♪
とても助かりました。本当に有難うございました。
無題
クリスタルレポート・行数固定の帳票 - 2007/04/25(Wed) 10:44 No.3031
この度はお世話になります。
クリスタルレポートで、行数が固定の帳票を作りたいです。
明細行が1ページ分の行数に満たない場合も、空白行を表示させるイメージです。
フッタ部分には、小計、合計欄があり、小計は各ページごとの小計、
合計は最終ページにだけ総合計の数値を表示させます。
(最終ページでなくても、合計欄はつけておきます。数字表示欄だけ空白にします)
ある会員の履歴情報を表示させる帳票で、会員IDが変わるごとに改ページ、
改ページする直前に合計を表示させます。
合計の値は、最終ページにのみ表示させたいです。
「どうやって作ろうか」・・・と悩んでおります(泣)
データ数で行が可変であれば、詳細セクションに行をデザインすればよいのですが、
行数が固定なので、ページヘッダあたりに帳票1枚分のデザインをしようかな、と、
考えているのですが、その場合のデータの渡し方ってどうすれば良いのかな・・・と。
最初に同じ帳票を行数可変で作りかけていたのですが、その時は
データは検索結果をDataSetに格納して、DataSetの内容を表示するようにしていました。
行数固定という事で、行数分の項目用の列をDataSetに追加して1ページ分のデータが
1レコードというイメージで作る方法を思いつきましたが、
その場合の小計、合計の表示方法は小計合計の列もDataSetに追加して、
プログラム内で「最終ページだったら合計に値を格納」という事になるのかな・・・と。
自分ではそういう方法しか思いつかなかったのですが、
他に良い方法があれば、その方法で作成したいな、と思い、投稿させていただきました。
皆様アドバイスをお願い致します。
- クリスタルレポート・行数固定の帳票
reiko - 2007/04/25(Wed) 10:49 No.3032
すみません、名前のところにタイトルを書いてしまいました。
reikoと申します。
暗証キーも入力しないまま投稿してしまい、編集削除ができないので、
このまま投稿させてください。大変失礼しました。
- Re: 無題
NZ-000 - 2007/04/25(Wed) 13:54 No.3033
- こんにちは。
CrystalReportsは空白行を表示できないので、
reikoさんの想像通りページヘッダーでデザインすることになると思います。
例えば次のようにします。
1.ページヘッダーで表示したい行数分の枠をデザインしておきます。
2.ページヘッダーの設定で「続くセクションをアンダーレイ」を有効にしておきます。
これで次のセクション(詳細)がマージされますので背景として使うことができます。
3.詳細でデータ1行分のデザインを行います。
4.データがうまく枠に収まるように詳細の幅を調整します。
5.指定行(レコード)数に達したら改ページするように改ページ条件を記述します。
- Re: 無題
NZ-000 - 2007/04/25(Wed) 14:09 No.3034
- 指定行(レコード)で改ページするやり方
次の二つの式フィールドを作成し、@行数の初期化をページヘッダーに、
@行数のカウントを詳細に挿入します。
フィールドのプロパティで非表示にしておきます。
// @行数の初期化
WhilePrintingRecords;
numberVar line := 0;
// @行数のカウント
WhilePrintingRecords;
numberVar line;
line := line + 1;
詳細の設定で出力後に改ページの条件式に以下の式を挿入します。
WhilePrintingRecords;
numberVar line;
line = X // Xは表示したい行数
- Re: 無題
reiko - 2007/04/25(Wed) 14:10 No.3035
- NZ-000さん、早速のご回答ありがとうございます。
おお!なるほど!「続くセクションをアンダーレイ」とはそういう意味だったのですか! r(^^;)
ということは、DataSetは1ページ分を1レコードにしなくても、
明細行1行分を1レコードに出来るのですね!!
すごく嬉しいです。回答を待ってて良かったです。
1ページ分1レコードのDataSetを作り直していたら大変な事でした。
本当にありがとうございました。早速やってみます。
- Re: 無題
reiko - 2007/04/25(Wed) 14:12 No.3036
- 入れ違いで投稿してしまいました。
改ページの方法もありがとうございます。
とても親切に教えてくださって、本当に助かりました。
有難うございました。
ページ指定で印刷
カゼ - 2007/04/25(Wed) 00:22 No.3029
- はじめまして。カゼと申します。
プレビューから印刷する時、印刷したいページを指定することが出来ますが、
直接印刷する場合には全ページが印刷されます。
顧客から、他の帳票(クリスタルレポート以外で作られた帳票)と同じように、
「プレビューしない場合も印刷ページが指定できるようにしてください」と言わ
れています。
そのようなことは出来るのでしょうか?
開発アプりはVB6です。
- Re: ページ指定で印刷
24x7 - 2007/04/25(Wed) 07:11 No.3030
バージョンと開発手法が書いてないので・・?
ページ指定は可能だと思いますよ。
マージン
超初心者 - 2007/04/24(Tue) 16:03 No.3024
はじめまして、超初心者です。
VB6 CR8を使っているのですが、VBのPGから余白設定をすることが出来るのでしょうか?
教えてください。宜しくお願いします
- Re: マージン
24x7 - 2007/04/24(Tue) 21:43 No.3027
- できなかったと思います。
リンクエキスパートでリンクしたテーブルの情報がでない
唯香 - 2007/04/11(Wed) 17:09 No.2994
はじめまして唯香と申します。
クリスタルレポートで問題が発生し原因が分からず大変困っております。
何か些細なことでも解決のヒントをご存知の方はご教授よろしくお願いします。
売上を集計するクエリを作成し得意先毎に表示する帳票を作成しました。
集計するクエリには得意先コードと売上金額フィールドがあります。
帳票では得意先コード/得意先名/売上金額を表示させています。
得意先名はリンクエキスパートにてクエリと得意先マスタを
PrimaryKey(得意先コード)を使用しリンクさせ表示するようにしています。
開発環境では問題なく表示されておりすが
お客様の環境で何台かのパソコンでは得意先名がでないようです。
(他の帳票も同じような現象がでています)
OSは開発ではXPを使用していますが
お客様の環境では2000だったりHomeEditionだったりと様々です。
お客様の環境でインストールしたOCXとDLLは以下の通りです。
・crpe32_res_jp.dll(8.0.0.371)
・crpe32.dll(8.0.0.371)
・crystl32.ocx(8.0.0.4)
VB6
Access2000
クリスタルレポート8.0
- Re: リンクエキスパートで...
唯香 - 2007/04/24(Tue) 12:09 No.3021
- 自己レスです。
動的なクエリを参照していたために
ある項目の型が出力できる場合と出来ない場合で違っていたようです。
ご迷惑おかけしました。
VB6+Crystalreport4.7 の配布について
カール - 2007/04/11(Wed) 19:16 No.2996
VB6とVB6付属のクリスタルレポート4.7を利用したプログラムを作成していますが、
今回、USBメモリーキーから起動するタイプで開発しています。
USBメモリーからEXEファイルを起動して画面表示してやるところまで(Accessへのデータ受渡はOK)は出来ていますが、
レポート出力になるとエラーが発生してしまいます。
dllと関連するものがないというエラーですが、
どうすれば解決できるんでしょうか?ご教授をお願いします。
※DBは、Accessです。もちろん、USBメモリーの中に入れてリンクさせた状態になっています。
ちなみに、開発マシン上から実行すると正常に印刷はできています。
USBメモリーからどうすれば印刷できるのか ということです。
必要なDLLと実行するに当たって必要なことは何か、教えてください<m(__)m>
- Re: VB6+Crystalrepor...
24x7 - 2007/04/20(Fri) 22:39 No.3010
開発環境以外で利用する場合、ランタイムファイルを配布しないと使えません。USBメモリーだけ、実行ファイルを入れても使えませんよ。
- Re: VB6+Crystalrepor...
カール - 2007/04/21(Sat) 22:05 No.3012
- 24x7さん、返事ありがとうございます。
ランタイム配布というのは、開発環境以外でも、そのPCには必ず入れないといけないという前提ですね。
実は、PCにひとつでも入れないという条件なんです。
※客先の要望で、セキュリティー上でPCには何も入れないということです。
すべては、USBメモリーに入れてそこからEXE起動して画面表示し、印刷ボタンクリックでクリスタルレポートのプレビュー表示という形です。
開発環境以外で、画面表示まではOKですが、印刷ボタンクリックすると何も表示されない状態になってしまいます。
ちなみに開発マシンでUSBメモリーから起動すると問題なく表示されています。
やはりSystemフォルダ内にランタイム等を格納させないとできないのですかねぇ?
3日間、調査したけど、一つもヒントになるようなものが見つかりません。
もうVB6+クリスタルレポート4.6は時代遅れなんですかねぇ。。。
- Re: VB6+Crystalrepor...
NZ-000 - 2007/04/23(Mon) 10:09 No.3015
- >やはりSystemフォルダ内にランタイム等を格納させないとできないのですかねぇ?
私もできないと思いますよ。
exeが実行できるのも印刷ができるのも、
Windowsが参照できる所に指定の形式でランタイムやドライバがインストールされているからでしょう。
そう考えるとこれはよくてあれはだめだという基準(セキュリティ)が何なのか曖昧に思えます。
- Re: VB6+Crystalrepor...
カール - 2007/04/23(Mon) 18:11 No.3016
- NZ-000 様 返事ありがとうごxざいます。
開発環境以外のPCに
ランタイムをインストールしてみたところ、クリスタルレポートのプレビューが表示できませんでした。
うーん、微妙ですわ。
開発PCがOKで、開発環境以外だと、表示できないんですねぇ。
- Re: VB6+Crystalrepor...
24x7 - 2007/04/23(Mon) 22:02 No.3017
- VB6でも、Accessでも、配布環境(ランタイム)には、配布に必要なランタイムファイルは存在すると思います。Crystal Reports だけの話ではないと思います。
アンバウンドレポートの作り方
こころ - 2007/04/18(Wed) 19:55 No.3005
- はじめまして、よろしくお願いします。
開発環境は、VB2005+Access クリレポはバンドル版を使用しています。
当方、初心者のためおかしな点がありましたらご指摘ください。
プログラムでDataSet およびDataTableを生成しているのですが、
これを、クリレポで印刷したいと思っております。
色々と調べたところ、「アンバウンドレポート」で作れば良いことまでは
わかったのですが、どのように作るのか、何をすればよいのかわからず
投稿させていただきました。
DataTableは毎回、行数も列数も可変です。
イメージは下記のような感じです。数字「01」〜は日付で、選択した範囲のみ(最大31日)表示させています。また、項目1〜は項目10まで増減します。
1日から4日を選択したとき・・・
名前 |
項目1 |
項目2 |
項目3 |
01 |
02 |
03 |
04 |
こころ |
1 |
2 |
1 |
◎ |
○ |
△ |
○ |
みみこ |
1 |
2 |
1 |
○ |
◎ |
○ |
△ |
5日から8日を選択したとき・・・
名前 |
項目1 |
項目2 |
項目3 |
項目4 |
05 |
06 |
07 |
08 |
こころ |
1 |
1 |
1 |
1 |
◎ |
○ |
△ |
□ |
みみこ |
1 |
1 |
1 |
1 |
○ |
◎ |
□ |
△ |
何からすればよいのか手順を教えていただけますか?
また、デザインなんですが、クリレポは空のレポートをVb2005のプロジェクトに追加して、列の最大(41行)分、線を引いて表を作っておいたら良いのでしょうか?
ご指導よろしくお願いします。
- Re: アンバウンドレポート...
NZ-000 - 2007/04/18(Wed) 20:54 No.3006
- CrystalReportsはDataBase(DB)のスキーマを元にデザインします。
データソースはDBであろうとDataSetであろうとかまわないのですが、
列が動的に変化することはナンセンスです。というか対応できません。
データベースのスキーマ(列数や列の型)は設計時に決めるものですから。
なのでこのような場合、変化しないような設計にするか、変化しないDataTableを用意する必要があります。
例えば、現在の列要素を全部行要素に換えるというのも一つの手でしょう。
名前 列1 列2
----------------
こころ 項目1 1
こころ 項目2 2
こころ 項目3 1
こころ 01 ◎
こころ 02 ○
こころ 03 △
こころ 04 ○
みみこ 項目1 1
みみこ 項目2 2
・
・
そして、名前でグループ化。
さらにレコードを横に並べることで表をデザインする。
(参考:http://www2.hirano.cc/crystalreports/report_yoko.html)
などが考えられます。
ここのHPにCrystalReportsの利用方法が載っているのでまずそれらを一読することをお勧めします。
- Re: アンバウンドレポート...
こころ - 2007/04/19(Thu) 19:45 No.3009
- NZ-000さま、返信ありがとうございました。
DataTable自体が縦横可変の場合は対応できないんですね・・・。
列を行の要素に変えて、横表示の方法に挑戦して思い通りにならなければ、
DataTableの設計をもう一度考え直します。
参考ページも教えてくださってありがとうございました。
もう一度、こちらのHPのクリレポの利用法を勉強しなおしてみます。
ありがとうございました。
WordWrap
ひろ - 2007/04/18(Wed) 13:26 No.3003
- 使用環境:CR7+VB5+Oracle8.0.5
式フィールド(複数行に出力の設定済み)で全角・半角混じりの文字列を表示する際、半角文字列を1かたまりにしてWordWrapがかかります。
例えば3行×5文字/1行のフィールドにab×35000mmを表示すると
1行目にab×、2行目に35000mmとなります。
WordWrapを解除する方法はないでしょうか?
どうぞご教授下さい。
- Re: WordWrap
24x7 - 2007/04/18(Wed) 22:52 No.3007
- ワードラップを解除する方法はありません。
文字サイズについて
みさと - 2007/04/16(Mon) 17:40 No.2999
- はじめまして
VB.NETでクリスタルレポートを使って開発しております。
お客様の要求されている帳票がA4サイズなのですが、
表示する項目がかなり多く、8Pの文字ではA4サイズで作ることが出来ません。
文字サイズをもっと小さくすることは出来ないのでしょうか?
また、出来ないとしたら、他に代替の案などないでしょうか?
ご存知の方いらっしゃいましたら教えてください。
よろしくお願いします。
- Re: 文字サイズについて
NZ-000 - 2007/04/17(Tue) 11:44 No.3000
- こんにちは。
選択項目にはないですが、直接入力で設定できます。
日付フィールドをグループに割り当てる
ゆみ - 2007/04/11(Wed) 08:36 No.2991
- はじめまして
WinXP Pro + Vs2006 + CR11 の環境でC#を使ってます
クリスタルレポートのレポートデザイナで、日付フィールドをグループに指定しました。
日付されたグループを実行時に文字フィールドに変更した後、日付フィールドを指定すると「追加情報:日付、時刻、または日時条件フィールドのグループオプションは、日付グループオプションのオブジェクトである必要があります」が表示されて困っています。
どなたか対処法をご存知の方はいらっしゃいませんでしょうか?
申し訳ありません
宜しくお願いします。
- Re: 日付フィールドをグル...
NZ-000 - 2007/04/11(Wed) 13:00 No.2992
- こんにちは。
2006ってまだないと思うのですが2005の間違い?
あと読解力がないため、次の一文の意味がよくわかりません。
>日付されたグループを実行時に文字フィールドに変更した後、日付フィールドを指定すると
"日付されたグループ"とは、日付型のフィールドでグループ化したグループのことですよね。
"実行時に文字フィールドに変更した"とは、
コード上からグループ条件を先の日付型のフィールドから文字列型のフィールドに変更したということでしょうか。
ちなみにどのようにして行ったのでしょうか。
"後、日付フィールドを指定する"とは、
コード上から何らかのイベントで再度日付型のフィールドによるグループに設定しなおしたということでしょうか。
- Re: 日付フィールドをグル...
ゆみ - 2007/04/11(Wed) 14:45 No.2993
- お世話になります
ごめんなさいVS2005でした
ちょ〜パニクッています
データは簡単に次のようなものです
フィールド名 データ型
ID オートナンバー
日付 日付時刻
名称 テキスト
氏名 テキスト
レポートデザイナーで[日付]をグループにしました
フォームにはレポートビューアとコマンドボタンを作成してあります
このコマンドボタンのクリックで、グループを[名称]に変更します
これはうまく実行できて、レポートのグループは[日付]から[設備名称]に変更されて表示します。
再度のマウスクリックでグループに[日付]フィールドを指定すると、先ほどのエラーが出ちゃってしまいます。
リファレンスだとDateTimeGroupOptionとかでてきてますけど、GroupOptionは参照専用なので目的のグループ(日付とか名称を設定しているグループ)を触る方法が分かりません
もう何とかして〜って感じです
お手数をおかけしてすいません
ご指導をお願いします
- Re: 日付フィールドをグル...
NZ-000 - 2007/04/11(Wed) 17:39 No.2995
- >このコマンドボタンのクリック
日付によるグループから名称によるグループに、
具体的にどのように切り替えていらっしゃるのですか?
動的にグループを変更する手段として式フィールドを利用する方法があります。
ただし、式フィールドは二つの型を混在できませんので、日付によるグループと名称によるグループを別々に定義しておく必要があると思います。
具体的には次のように、まず日付によってグループ化するかどうかを示すフラグを用意しておきます。
そしてこのフラグをプログラム側で制御することで、@とAのグループのOn/Offを制御します。
//@フラグ
1
//@日付によるグループ ---@
WhileReadingRecords;
if {@フラグ} = 1 then
{日付}
//@名称によるグループ ---A
WhileReadingRecords;
if {@フラグ} = 0 then
{名称}
これでできないでしょうかねぇ。
- Re: 日付フィールドをグル...
ゆみ - 2007/04/12(Thu) 04:03 No.2998
- おはようございます(まだ、こんばんわ?)
有難うございました。いちおう「一件落着”みたいな感じ!」って状態になりました。
年月をグループ化したかったので、教えて頂いたように、式(myGroup)を作成しました
式エディタで(myGroup)に、[名称]を設定しました
コマンドボタンのクリックで、"CStr (Year ({日付})) + "年" + CStr (Month (日付}))"を、式フィールドに書いてあげたら・・やったぁ!大成功!
もう何日も苦しんでいたので、「やっとでたぁ〜!」
「NZ-000」さん!ほんとうに、とっても有難うございました。
またこまったら、助けてください!
本当に有難うございました。
レコード出力時にPCフリーズ
mori - 2007/04/11(Wed) 19:50 No.2997
- はじめまして。けんと申します。
現在クリスタルレポートで作成した帳票を印刷する際、
レコード出力画面が表示されたままPCがフリーズしてしまう現象が発生し
大変困っております。
帳票印刷処理はローカルにMDBファイルを作成し、作成したMDBファイルより
レコードを抽出して行っています。
発生環境は、
VB6.0
クリスタルレポート8.0
OS:windows 2000
対策などご存知の方いらっしゃいましたらご教授お願いします。
無題
sora - 2007/04/05(Thu) 16:45 No.2987
帳票作成初心者ですが、下記帳票作成で悩んでおります。
勤怠管理なのですが、
テーブルA
日付 曜日 出社時刻 退社時刻
1 | 月 | 9:00 | 18:00
2 | 火 | 9:00 | 18:00
3 | 水 | 9:00 | 18:00
4 | 木 | 9:00 | 18:00
5 | 金 | 9:00 | 18:00
8 | 月 | 9:00 | 18:00
9 | 火 | 9:00 | 18:00
10 | 水 | 9:00 | 18:00
・
・
31 | 木| 9:00 | 18:00
このテーブルAから下記の帳票Aを作りたいのです。
帳票A
日付 曜日 出社時刻 退社時刻
1 | 月 | 9:00 | 18:00
2 | 火 | 9:00 | 18:00
3 | 水 | 9:00 | 18:00
4 | 木 | 9:00 | 18:00
5 | 金 | 9:00 | 18:00
6 | 土 | | →日付と曜日を挿入。
7 | 日 | | → 〃
8 | 月 | 9:00 | 18:00
9 | 火 | 9:00 | 18:00
10 | 水 | 9:00 | 18:00
・
・
31 | 木| 9:00 | 18:00
というふうに、テーブルAには無かった土・日のデータ(時刻データの無いもの)を、
帳票Aには表示させるように、行の挿入(この場合、日付と曜日のみ)を行いたい
のです。
セクションエキスパートなどを使って対処は出来ないものでしょうか?
簡単な説明でご理解いただけるか分かりませんが、お分かりになる方がいらっしゃいましたらご教授頂けたらと思います。
ちなみに環境は、XP、VisualStudio2005とその中のcrystalreportです。
- Re: 無題
NZ-000 - 2007/04/05(Thu) 19:09 No.2988
- こんにちは。
ふーむ。もし、クリレポだけでやるとしたら、詳細を三つに分けて
一つ目を平日(詳細1)
二つ目を土曜(詳細2)
三つ目を日曜(詳細3)
というように割り当てます。
そんでもって次のレコードの日付が連番でないなら詳細2や詳細3を表示するというのはいかがでしょう。
一番簡単な方法は、例えば日付フィールドを持つテーブルBを作っておき日付を埋めておきます。
(SQL内でテーブルつくっちゃうというのもありかな)
テーブルB
日付
1
2
3
・
・
・
31
そんでもってテーブルAをSelectする際、テーブルBと日付をキーにして外部結合させてやれば、
土日をレコードとして持てるので余計なことは考えなくてすむと思います。
土、日の表示も前のか後ろのレコードの曜日フィールドが空かどうかで判断できますし。
書かれていませんが、
有給や、祭日、その他もろもろの休日や月を考慮するとなると話は別です。
- Re: 無題
24x7 - 2007/04/09(Mon) 22:20 No.2989
NZ-000さんの回答をヒントに応用編です。
テーブルAに日付型で存在する場合、以下のような式を利用することで可能です。
もちろん、同一日のデータや土日のデータが含まれていないことが前提ですが・・
詳細a (月〜金曜日) には、以下の内容の式フィールドを挿入します。
WhilePrintingRecords;
select DayOfWeek ({日付フィールド})
case 1: "日"
case 2: "月"
case 3: "火"
case 4: "水"
case 5: "木"
case 6: "金"
case 7: "土"
default: " "
セクションエキスパートから詳細b (土曜日の行) の非表示の条件式に以下の式を挿入します。
//金曜日以外は、非表示
WhilePrintingRecords;
Dayofweek({日付フィールド})<>6
セクションエキスパートから詳細c (日曜日の行) の非表示の条件式に以下の式を挿入します。
//金曜日以外は、非表示
WhilePrintingRecords;
Dayofweek({日付フィールド})<>6
- Re: 無題
24x7 - 2007/04/09(Mon) 23:15 No.2990
忘れていますが、曜日は、テキストオブジェクトに「土」と「日」を入力して、それぞれのセクションに挿入します。
あと、日付は、以下の式フィールドを詳細a に挿入します。
whilePrintingRecords;
day({日付フィールド})
詳細b には、以下の式フィールド
WhilePrintingRecords;
NumberVar sat:=0;
sat:={@上記の式フィールド名} +1;
詳細c には、以下の式フィールド
WhilePrintingRecords;
NumberVar sat;
NumberVar sun:=0;
sun:=sat +1;
年、月は、Year と Monthの関数を利用し、グループ化することで
日付フィールドから今回のようなレポートを作成することが可能になります。
サブレポートを使わずに作成できますか?
dempa - 2007/04/03(Tue) 16:34 No.2984
見出し
キー項目1:XXXX キー項目2:YYYY キー項目3:ZZZZ
=============================================================
ヘッダ情報
ヘッダ情報の明細
ヘッダ情報の明細
…
============================================================
明細情報のヘッダ
明細情報の明細
明細情報の明細
…
============================================================
条件情報のヘッダ
条件情報の明細
条件情報の明細
…
============================================================
といったイメージのものを
サブレポートを使わず、クリスタルレポートで作成できるものなのでしょうか?
端的に言えば
キー項目1:XXXX キー項目2:YYYY キー項目3:ZZZZ
AAAAAA
BBBBBBB
BBBBBBB
…
といったキーが同一の関連性のないレポートを3つを1レポートで出力するイメージです。
一応、ヴァージョンはXIです。
- Re: サブレポートを使わず...
NZ-000 - 2007/04/04(Wed) 16:10 No.2986
- 三つのレポート(テーブル)をレポートごとにまとめて表示したいという考え方は、
基本的にサブレポート使わないと無理です。
しかし、全てのレポートを結合して一つにすれば可能性は見えてきます。
(一つのselect文で全てのデータを取得してくださいという意味です)
チャートに表示するデータの選択
TT - 2007/03/29(Thu) 19:00 No.2978
- はじめまして、クリスタルレポートの掲示板を探してやってきました、相談させてください。
棒グラフのチャートですが、グループ値が特定の値のときはチャートに出さないということがしたいのです。
| ||
| || ||
| || ||
−−−−−−−−−−−−−−−−−−
A B C
こんなグラフのCを出したくないのです。
どうして出したくない値をデータにいれているのかというと、実は同じレポート中に別のチャートがあって、そちらでは使用するデータなのです。
条件は、
Cの値は式によって必ずゼロに変換しているが、AやBがゼロのこともある。
Cはソート順によって必ず最後に現れるが、横軸の数は変動する。
Cを特定するのに名前が”C”かどうかで判断しています。
以上、よろしくお願いします。
- Re: チャートに表示するデ...
NZ-000 - 2007/03/30(Fri) 09:59 No.2979
- こんにちは。
そうですねぇ、Cを含まないレコードをselectしたサブレポートを挿入しちゃうってのはどうでしょうか。
- Re: チャートに表示するデ...
初心者です - 2007/03/31(Sat) 23:39 No.2983
- 返信ありがとうございます。
その後いろいろ(本当にいろいろ...)試行錯誤した結果、
元データに色んなデータを追加して、チャートで式を駆使して
なんとかなりました。ご提案ありがとうございました。
チャートのPDF出力
初心者です - 2007/03/31(Sat) 23:35 No.2982
- はじめまして。
早速質問させて頂きます。
ASP.NETでチャートを使って棒グラフや円グラフを出しているのですが、
見栄えの面で困っています。
1.棒グラフや円グラフの中や上に表示される値のフォントを大きくできないで
しょうか?表示される数字のフォントが小さすぎてつらいです。
各タイトルや各軸のフォントの設定は見つけたのですが...
2.印刷時の画質をレジストリで設定する方法を知ったので、PDF出力時の画質
に閉口していた私は画質を上げました、すると画面表示の際に棒グラフのバ
ックに表示されるグリッドラインが出たり出なかったりと情けないことになって
しまいました。画質を上げても画面で横線が消えない方法はないでしょうか?
3.ここでチャートをなるべく大きくする手順があることを知りいろいろ試したので
すが、棒グラフの下のグループ名が最初斜めだったものが、横に変わってし
まいます、チャートを大きくした後でグループ名を斜めにする方法はありませ
んか?
4.円グラフに2種類しかない値の比率を出しているのですが、それぞれの色を
指定することはできませんか?赤と青で出るのですが強調したいほうを赤に
したいし、印刷すると両方黒くなってしまいます。
一度にたくさん申し訳ありません、それぞれ分けて投稿すべきか迷いましたが
一つにさせていただきました。
よろしくお願いいたします。
無題
TANUKICHI - 2007/03/30(Fri) 19:00 No.2981
はじめまして。
VB.NETでクリスタルレポートを使用し帳票を作成しております。
帳票に表示する項目が多く、また、クリスタルレポートでは
文字サイズが8までしか出来ないため、
A3サイズで作成しております。
そこで質問なのですが、
A3サイズで作成しているレポートを
印刷する際にはデフォルトでA4サイズに縮小するということは
出来ないでしょうか?
印刷時にA4に自動的になるのであれば、
プレビュー表示もデフォルトA4に縮小となる方法でも構いません。
対応方法等もしありましたらご教授ください。