過去の桐井戸端BBS (桐ver.8)
3030 #頁番号の最終値(レポートの総ページ数)を取り出すには? Kaz 1999/10/27-23:42
一括処理にて

レポート上で 頁番号/最終頁番号 を表示させたいのですが・・・
#頁番号は取り出せるのですが
最終(最後)の頁番号を取り出すには
どう計算式を書けばいいのでしょうか?

3033 Re: ぷぷり 1999/10/27-23:56
記事番号3030へのコメント
>レポート上で 頁番号/最終頁番号 を表示させたいのですが・・・
>#頁番号は取り出せるのですが
>最終(最後)の頁番号を取り出すには
>どう計算式を書けばいいのでしょうか?

最終ページ番号は普通では取り出せないので、レポート一頁に
どれだけのデータが印刷できるかがわかれば、

一頁のデータ行/総データ行

で余りが0だったらその値で余りが有れば+1頁でいいんじゃ
ないでしょうか?
過去にもこんな記事が有ったような・・・・

3037 Re: Kaz 1999/10/28-00:23
記事番号3033へのコメント
ぷぷりさん こn**は

先の質問にもお答えいただき感謝申し上げます。
そのres(No.3034)でも述べましたが
用品名が重複している場合
1頁にすべて入ってしまいますので,データ行の数は
グループによって異なります。よって

>最終ページ番号は普通では取り出せないので、レポート一頁に
>どれだけのデータが印刷できるかがわかれば、・・・・・

これが不可能ということなのでしょうか?

重複している用品名の数とそのグループの件数を1件として取り出せれば
総データ行から引くと総頁数がでてくるのですが。

>過去にもこんな記事が有ったような・・・・

一応,検索してみたのですが見あたりませんでした。
もしおわかりなら,お教え下さい。

3038 Re: ぷぷり 1999/10/28-02:43
記事番号3037へのコメント
レポートの一頁の最大印刷件数を仮に30件とすると、
グループの総件数は、グループを設定した後で「#総件数」で
出せると思うので、この値がもし123件だったら
123件/30件=4・・・3件
となるので、指定グループの総頁としては、5頁ですよね。
もしかしたら、とんちんかんなことを答えているのか・・・

それとも、グループ1個が1頁としたら、グループの数が
総頁となるわけですから、グループの件数を調べないとい
けないですねー
もしそうだとしたら、結合表で用品がある表を使ってグループ化
をして、その件数を調べればグループの件数が解りますよね?

これでいいのかな?

3042 Re: 幅田 1999/10/28-11:08
記事番号3037へのコメント
>>過去にもこんな記事が有ったような・・・・
>一応,検索してみたのですが見あたりませんでした。
>もしおわかりなら,お教え下さい。

過去の桐井戸端BBS ver.7or7.1の下記のURLです。
http://www.fuku3.com/~habata/kbbs/kakov7/02439.htm

そちらの例では#総件数を使って、頁総数を計算していますが、
改頁グループの設定をしてある場合は、正しく計算されませんね。

そこでこんな案を考えてみました。
印刷する表の中であらかじめ総頁数を計算しておきます。
その計算用の項目(データ型数値)を作っておいて、その項目計算式に
下記の式を設定します。


#条件選択(#行番号=1,#計算(#代入(&有効件数,1),#代入(&件数
,1)),#直前値([グループ],””)<>[グループ] .OR &有効件数=4,
#計算(#代入(&有効件数,1),#代入(&件数,&件数+1)),1,
#計算(#代入(&有効件数,&有効件数+1),&件数))


改頁グループ項目は[グループ]です。
明細行は4行とした場合です。
&有効件数は#明細連番の代わりです。(#明細連番は表の中では使えないため)
[グループ]が変わったり、&有効件数が4以上になって、改頁するごとに
&件数に1を加算していき、最終的な&件数が総頁数です。

印刷する順番で並べ替えをした後、置換で再計算をしてから印刷します。
レポートの総頁数は&件数に代入されますので、レポートの方で
&件数を印刷すればOKです。

3048 Re: Kaz 1999/10/28-22:26
記事番号3042へのコメント
幅田さん  こん**は

ありがとうございました。

>#条件選択(#行番号=1,#計算(#代入(&有効件数,1),#代入(&件数
>,1)),#直前値([グループ],””)<>[グループ] .OR &有効件数=4,
>#計算(#代入(&有効件数,1),#代入(&件数,&件数+1)),1,#計
>算(#代入(&有効件数,&有効件数+1),&件数))

さっそく,やってみましたが,あれれ不思議! いや,感動!
初心者の私にとっては,まるで魔法にかかったような気分です。

&件数や&有効件数の意味がよくわからないのでしょうか
計算式の意味が今ひとつ理解できない私ですが
新たな課題が,また奮い立たせてくれます。

>過去の桐井戸端BBS ver.7or7.1の下記のURLです。
>http://www.fuku3.com/~habata/kbbs/kakov7/02439.htm

参考になりました。私の質問と全く同じものがあったんですね。
同じことを考えている方がいらっしゃったとは
ちょっとうれしいような気分です。

初めて本格的挑戦の一括処理
さらに改良が続きます。

これからもよろしくお願いいたします。<to all!

3049 Re:変数について 幅田 1999/10/28-22:55
記事番号3048へのコメント
>&件数や&有効件数の意味がよくわからないのでしょうか
>計算式の意味が今ひとつ理解できない私ですが
>新たな課題が,また奮い立たせてくれます。

すみません、&件数や&有効件数を使った意味はあまりありません。

&件数や&有効件数は項目集計を実行したとき集計結果が代入される「組み込み変数」で
&件数には、集計した項目値の件数、&有効件数には集計した項目値のうち、未定義
でない項目値の件数が代入されます。

今回のご質問の場合、一括処理を使用しないと思って、変数宣言の必要のない、上記
の変数を使用しましたが、本来の使い方ではありません。

一括処理の場合は
&件数ではなくて、&頁総数
&有効件数ではなくて、&明細件数
などとしたほうがいいと思います。

その場合、あらかじめ下記のコマンドを実行しておいてください。
変数宣言 数値{&頁総数、&明細件数}


>初めて本格的挑戦の一括処理
>さらに改良が続きます。
>
>これからもよろしくお願いいたします。<to all!
>
こちらこそよろしくお願いいたします。がんばってください。

3051 レポートの総ページ数についての一般論 佐田 守弘 1999/10/29-00:32
記事番号3030へのコメント
レポートの総ページ数(最終ページ番号)についての議論がされておりますが、少し補足しておきます。
●総ページ数を求める関数はありません
MS-Wordには総ページ数を計算する関数があり、これを使うと総ページ数が分かり、「1ページ/全3ページ」の様な印
刷をする場合があります。しかしながら、桐にはこの様な関数がありません。
その理由ですが、一般論としてレポートは印刷してみないとページ数が分からないためです。MS-Wordなどは、始め
からページレイアウトがしてあるので、ページ数が分かるわけです。
特に、表オブジェクト(表形式のレポート)では、項目値の文字列の長さによって、印刷する行数が変わって来ます。こ
れが一般論としてページ数が先に計算できない理由です。

●総ページ数を計算しておく
ぷぷりさん、幅田さんがコメントされている方法で、総ページ数が計算できるのは、レポートが伝票オブジェクト(伝票
形式)ないしタイルオブジェクト(タックシール)だけの場合に限られます。これらのオブジェクトは、1レコードあたりの
印刷行数が固定されているためです。
と言いましても、勘定系の出力は、この形式がほとんどですから、大部分はページ数の計算ができると考えて良いで
しょう。

グループ化しない場合には、ぷぷりさんがかかれている様に、印刷レコード数を1ページあたりに印刷できるレコード
数で割れば、総ページ数が求められます。
また、グループ化している場合であっても、幅田さんが書かれている様に、1ページあたりの印刷行数と、改ページ項
目による途中改ページを考慮して、それぞれのレコードに、「このレコードは何ページ目に印刷されるか」といった値を
計算して持たせます。

●表形式のレポートで総ページ数を求められるか
かなり複雑になりますが、不可能ではないでしょう。実際に試してはいないので、アイデアだけを述べます。
なお、この計算が可能になる条件としては、固定ピッチフォントで印刷する場合で、強制改行を行っていない場合に限
られます。
考え方は幅田さんが書かれた方法を拡張したものですが、[印刷行数][残行数][ページ番号]の項目を持っておきます。
文字列が長くてテキストオブジェクト内で改行印刷する可能性のある項目について、文字列の長さをオブジェクトの
カラム数で割って、何行で印刷されるかを求めます。
複数の項目をチェックするのであれば、#大関数を使って、それらの最大値を求めます。
直前行の残り行数とページ番号、およびその行の印刷行数から、その行が直前行と同じページに印刷できるか、次
のページに印刷されるかを判断して、その行のページ番号と残り行数を求めます。この際に、レコード追い出しをする
か、しないかで計算の仕方が変わります。
これらの3つの項目値を持っておけば、最終行のページ番号の値が、総ページ数になります。
プロポーショナルフォントを使ったり、強制改行文字、あふれ改行文字を使っている場合には、総ページ数の計算は
ちょっと難しいでしょう。

佐田守弘(KS-00119)

戻る