過去の桐井戸端BBS (桐ver.8)
15325 レポートで複数のページが印刷されてしまう macoto 2002/03/04-21:31
No.15165「Re:血液センターの結果表のようなレポート」でnatsuさんに教えていただきましたが、
再度教えていただけますでしょうか。

教えていただいたように以下の一括処理にある変数をテキストオブジェクトとしてレポートを作成してみたのですが、
各IDに対して1枚のレポートが印刷されるべきところが、
各IDに対して存在するレコードの本数分のページが印刷されてきます。
「レポート印刷」のところで開始ページと終了ページをそれぞれ1とすれば解決するのですが、
複数ページ印刷されることが分かりません。
レポート自体に問題があるのでしょうか。教えていただけますでしょうか。


*********************************************************

>変数宣言 固有,文字列{&項目1[2],&項目2[2],&項目3[2],&項目4[2],&項目5[2]}
>変数宣言 固有,文字列{&氏名,&検査無="***"}
>変数宣言 固有,日時{&date,&date1,&date2}
>変数宣言 固有,整数{&カウンタ}
>変数宣言 固有,長整数{&ID}
>
>表 "test"
>
>並べ替え {[ID]昇順,[date]降順}
>&カウンタ=1
>繰り返し
>代入 &ID=[ID],&date=[date],&氏名=[氏名]
>ケース開始
> ケース (&カウンタ=1)    /*項目値を代入 今回分*/
>    代入 &項目1[1]=[項目1],&項目2[1]=[項目2],&項目3[1]=[項目3],&項目4[1]=[項目4],&項目5[1]=[項目5]
>    &date1=&date
> ケース (&カウンタ=2)    /*項目値を代入 前回分 さらにレポートを印刷*/
>    代入 &項目1[2]=[項目1],&項目2[2]=[項目2],&項目3[2]=[項目3],&項目4[2]=[項目4],&項目5[2]=[項目5]
>    &date2=&date
>    レポート印刷 "test",プレビュー=する
> ケース (&カウンタ>2)    /*2回以前の分は何もしない*/
>ケース終了
>ジャンプ 行番号=次行
>ケース開始
> ケース (#EOF=1)       /*繰り返し中止*/
>    繰り返し中止
> ケース (&ID=[ID])      /*&カウンタを1増やす*/
>    &カウンタ=&カウンタ+1
> ケース (&ID≠[ID] .and &カウンタ=1)     /*&カウンタを1とする*/
>    代入 &項目1[2]=&検査無,&項目2[2]=&検査無,&項目3[2]=&検査無,&項目4[2]=&検査無,&項目5[2]=&検査無
>    &date2=#U
>    &カウンタ=1
>    レポート印刷 "test",プレビュー=する
> ケース (&ID≠[ID] .and &カウンタ≠1)     /*&カウンタを1とする*/
>    &カウンタ=1
>ケース終了
>
>繰り返し終了
>

15326 Re:複数のページが印刷されるレポートの制御は 佐田 守弘 2002/03/04-22:08
記事番号15325へのコメント
macotoさん
この主の現象の原因として、複合レポートのレポートの対象表と、レポートの中に設定されている
一覧表などのオブジェクトの対象表との間のリンク関係が設定されていない事がもっとも考えられる原因です。

詳しい中身は理解しておりませんが、多分使用しているレポートは、複合レポートで、
一覧表ないし伝票オブジェクトが設けてあるだろうと思います。
これらの一覧表ないし伝票オブジェクトの属性ダイアログを開き、リンク関係を確認して下さい。
詳しい事は過去ログで、複合レポートないし、「複数ページ」などの語句で検索してみて下さい。
類似のコメントが見つかるはずです。

〔解説〕
複合レポートでは、レポート本体に対象表を設定する他、レポート中の一覧表、伝票、タイルなどの
オブジェクトにも対象表を設定します。
ここで、レポート中のテキストオブジェクト(いわば単票に相当する部分)は、
レポートに設定した対象表のデータが印刷されます。
一方、一覧表などは、それぞれのオブジェクトが対象表を持ち、その対象表が印刷対象データになります。

ここで、双方の対象表が別の場合(同じ表の場合も同じです)、レポートの対象表の全データに対して、
一覧表などのオブジェクトの対象表の全データとの組み合わせが印刷データの母集団になります。
そして、リンク関係を設定してないと、この2つを掛け合わせた全データが印刷されます。
リンク関係は、レポートの対象表野中から、現在印刷対象になっている値と同じ値を持つデータを、
一覧表などのオブジェクトの対象表から選び出し、そのデータだけを印刷対象とする設定です。
これは丁度、結合表で結合条件を設定しないと、総当たりの組み合わせが作られるけど、
結合関係などを設定する事によって、その中から目的のデータを取り出しているのと同じ関係になります。

佐田守弘(KS-00119)
15328 Re:複合レポートで何度も同じ印刷物 Ogo 2002/03/04-23:07
記事番号15326へのコメント

>詳しい中身は理解しておりませんが、多分使用しているレポートは、複合レポートで、
>一覧表ないし伝票オブジェクトが設けてあるだろうと思います。

>詳しい事は過去ログで、複合レポートないし、「複数ページ」などの語句で検索して
>みて下さい。類似のコメントが見つかるはずです。

複合レポートでの話なら

http://www.fuku3.com/~habata/kbbs/kakov8/14123.htm で

Re:複合レポートで何度も同じ印刷物

以下ですね。


15331 Re:複数のページが印刷されるレポートの制御は macoto 2002/03/05-11:12
記事番号15326へのコメント
佐田守弘さん、こんにちは。いつも明確なご説明を有難うございます。

>詳しい中身は理解しておりませんが、多分使用しているレポートは、複合レポートで、
>一覧表ないし伝票オブジェクトが設けてあるだろうと思います。

レポートの作成につきましては前回投稿でも記載しておりましたように、一括処理の
なかで表の項目(項目1、項目2・・・など)から変数(&項目1[1]、&項目2[1]・・・など)へ
代入するような形をとっておりますので、レポートは単票でそこへ項目1、項目2・・・
などのテキストオブジェクトを配置してあるだけです。テキストオブジェクトのソースは
&項目1[1]、&項目2[1]・・・などの変数を指定しています。
また、ファイル属性の対象表は指定していません。

ご説明で複合レポートの構造などが良く理解できたのですが、単票でしかも変数ソースの
テキストオブジェクトのみですので、「う〜ん」と頭をかしげています。
一括処理プログラムの問題かも知れませんので、もう一度じっくり眺めてみますが、
また何か考えられる事項がございましたら、ご教示いただければと存じます。
15332 Re:複数のページが印刷されるレポートの制御は natsu 2002/03/05-11:49
記事番号15331へのコメント
macotoさん
>各IDに対して1枚のレポートが印>刷されるべきところが、
>各IDに対して存在するレコードの本数分のページが印刷されてきます

確かに複数のレポートが印刷されてしまします
お騒がせしました

こちらでもtest.rptというファイルは、複合レポートではなく単票で、
対象表を設定せず、オブジェクトのソースは変数のみとしておりました。

桐のヘルプによれば
■説明
レポートを使用して、表のデータを印刷します。

だとすれば、桐はレポートファイルに対象表が設定されていなくても、
一括処理中で編集対象表を探し出して、"test.tbl"を
使用して1行ずつ印刷を実行しただけだと思います
(ここのところはK3でないので断定はできませんが)

この場合の解決方法ですが、
>「レポート印刷」のところで開始ページと終了ページをそれぞれ1

が、一番簡単でよいと思います
また、
レポート印刷のコマンド直前に 
行番号 &昭和年
絞り込み 行数=1
レポート印刷のコマンド直後に 
絞り込み解除 1
ジャンプ 行番号=&昭和年
を加えてみればいかがでしょうか

15333 Re:複数のページが印刷されるレポートの制御は 悲しげ 2002/03/05-12:08
記事番号15332へのコメント
>一括処理中で編集対象表を探し出して、"test.tbl"を
>使用して1行ずつ印刷を実行しただけだと思います
>(ここのところはK3でないので断定はできませんが)

ここは(想像ですが)、「編集対象表を探し出して」と云うことではないと思います。
MS社と違って(^^;)、桐はあまりそうゆうことはしないような気がします。
そうではなくて、「一括処理中で」と云うところがキーになるような気がします。
おそらくは、一括処理中で、当該のtblを編集対象表として印刷用の変数データを生成していると思います。
だから、レポート印刷の際の編集対象表は、当該のtblになっているのではないでしょうか。
私がたまたま#15317でwroteしたように>rptの元来の対象表がb.tblであったとしても、a.tblから当該rpt印刷

>を指定したら(臨時的に)a.tblについて印刷させることもできるから
>ですね。
と云うことで、一括処理中では臨時的に当該のtblを編集対象表にして

いるのだと思います。
対策は、何でもいいからともかく1行に絞り込みさせておくこともあるでしょうけど、
一番のオススメは、「レポート印刷」コマンドの引き数として「編集表=しない」を
明記することではないかと思います。
外しているかもしれませんが、一寸試してみて下さい。
15335 Re:複数のページが印刷されるレポートの制御は macoto 2002/03/05-12:36
記事番号15332へのコメント
natsuさん、こんにちは。
先日は貴重な一括処理プログラムとアプローチの仕方を教えていただきまして、
有難うございました。お教えいただいたプログラムをもとに少しずつシステムを作っています。

>確かに複数のレポートが印刷されてしまします
>お騒がせしました

やはりそうでしたか。
1週間ちかく考えて、一括処理プログラムもいろいろといじってみたのですが、
駄目でしたので、またお聞きした次第です。

>>「レポート印刷」のところで開始ページと終了ページをそれぞれ1
>が、一番簡単でよいと思います
>また、
>レポート印刷のコマンド直前に 
>行番号 &昭和年
>絞り込み 行数=1
>レポート印刷のコマンド直後に 
>絞り込み解除 1
>ジャンプ 行番号=&昭和年
>を加えてみればいかがでしょうか

そうですね。上記のいずれかの方法を取り入れて、前へ進んでいきたいと思います。
有難うございました。

15336 Re:複数のページが印刷されるレポートの制御は macoto 2002/03/05-12:44
記事番号15333へのコメント
悲しげさん、こんにちは。いつもいつも参考にさせていただいておりました。
今回の件でも、ご説明を有難うございます。

>対策は、何でもいいからともかく1行に絞り込みさせておくこともある
>でしょうけど、一番のオススメは、「レポート印刷」コマンドの引き数
>として「編集表=しない」を明記することではないかと思います。外し
>ているかもしれませんが、一寸試してみて下さい。

ご説明いただいた内容が私にはちょっと難しかったのですが、
それでも桐の構造の一部が理解できたような気がしています。
さて、さっそくお教えいただいた、「レポート印刷」コマンドの引き数として
「編集表=しない」を記載してみましたが、残念ながら解決できませんでした。
私にはあまり詳しく分かりませんが、何か別の問題のようです。
また、何かヒントがありましたらお教えください。有難うございました。

15339 Re:複数のページが印刷されるレポートの制御は 悲しげ 2002/03/05-14:04
記事番号15336へのコメント
どもっ、macotoさん

>さて、さっそくお教えいただいた、「レポート印刷」コマンドの引き数として
>「編集表=しない」を記載してみましたが、残念ながら解決できませんでした。

たはは、駄目でしたか、すいません。(^^;)
では、ことのついでに、もう1点実験していただけますか?
(お忙しくなければ、で結構ですが)
それは、レポート印刷の直前に、「表」コマンドで全ての表を閉じてみる。
このようにしてレポート印刷にかけるとどうなるか、について。

(その後に必要ならば再度その表を開くとします)

15340 Re:複数のページが印刷されるレポートの制御は macoto 2002/03/05-14:27
記事番号15339へのコメント
悲しげさん、ご面倒をおかけします。^^;

>たはは、駄目でしたか、すいません。(^^;)
>では、ことのついでに、もう1点実験していただけますか?
>(お忙しくなければ、で結構ですが)
>それは、レポート印刷の直前に、「表」コマンドで全ての表を閉じてみる。
>このようにしてレポート印刷にかけるとどうなるか、について。
>(その後に必要ならば再度その表を開くとします)

さっそくやってみました。
この一括プログラムでは最初に表を開いておいて、一行ずつ行を送りつつ項目の
データを変数に代入し、そのつどレポート印刷するという構造になっていますので、
レポート印刷の前で表を閉じて、その後に表を再び開けるというのは
実用的ではないのですが、悲しげさんのご希望ですのでトライしてみました。(^^)
結果は残念ながら芳しいものではありませんでした。
いろいろと有難うございます。ご面倒をおかけして恐縮しています。
15342 印刷対象表が設定されていないレポート natsu 2002/03/05-15:13
記事番号15339へのコメント
macotoさんが疑問と思われているのは
「レポートのファイル属性で対象表が『設定されていない時』に
なぜ、その時たまたま編集対象表のレコード数と同じだけレポートが
出力されてしまうのか?」
ということだと思います(これは、私も同じです)

さて、悲しげさんのアドバイスのように一度表を閉じてみました

行番号 &昭和年

    レポート印刷 "test",プレビュー=する
表 "test"
ジャンプ 行番号=&昭和年

こうしたところ、レポート印刷のコマンド行のところで
KU0767 レポートに印刷対象表が設定されていません
処理を継続しますか?
のアラートが出てきました
当然、出力は1枚のみです

これは、編集対象表をそのままにしていたときには出てきませんから
恐らく、桐の中では『印刷対象表が設定されていない時』は
現在の編集対象表を使用しているということでしょうか
15345 Re:印刷対象表が設定されていないレポート 悲しげ 2002/03/05-15:46
記事番号15342へのコメント
どもっ、natsu さん、
実験結果から、どうも対象表を設定しないrptは好ましくないようですね。
rptはともかく何らかの表を対象表にした方が無難なようです。

丁度、macotoさんも曰く
>この一括プログラムでは最初に表を開いておいて、一行ずつ行を送りつつ項

>のデータを変数に代入し、そのつどレポート印刷するという構造になってい

のような処理の流れ上にあると云うことから、いっそのことrptに対象表を
設定してしまうことも有りかもしれません
(ヘッダ部等のテキストソースは変数のままでもいいけれども、
どうせ対象表があるなら項目値をソースに使うことも可能)。
そして、例えば

&行=1
ジャンプ 行番号=&行
繰り返し(.not #EOF)
 絞り込み 行数=1
 手続き実行 変数データ生成及び印刷()
 絞り込み解除 1
 &行=&行+1
 ジャンプ 行番号=&行
繰り返し終了

のような流れにしてしまえば、1行絞り込みも兼ねるので一石二鳥のような気がしてきました。


ps.
>恐らく、桐の中では『印刷対象表が設定されていない時』は
>現在の編集対象表を使用しているということでしょうか
rptに対象表が設定されていても、一括処理からレポート印刷させる時は
現在の編集表が使用されることも有るようですよ。cf.#15317を含むツリー

戻る