過去の桐井戸端BBS (桐ver.9)
20666 伝票フォームで頁計(1画面分だけのデータの合計)を表示させたい 沼田政治 2003/06/04-10:44
いつもご迷惑をおかけします。

レポートでの頁計のように、伝票フォームで頁計を取ることはできますでしょうか。

伝票形式フォームに表示されている1画面分だけのデータの合計を表示したいと思っています。
データは1画面分だけでなくそれ以上のデータがグループ化されており、
スクロールすると見られる状態ですが、1画面分を1頁とし、以後、2頁、3頁としたいのです。
それぞれの頁毎に合計値を表示させたいのですが、どのようにすればいいのでしょうか。

なお、頁の切り替えは[PageUp][PageDown]キーで行っています。
このキーで切り替えたときに、その画面に表示されているデータだけの合計を取りたいのです。
20676 Re:伝票フォームで頁計が取りたい うにん 2003/06/04-20:38
記事番号20666へのコメント
「画面に表示している分だけの合計」は以下のようにしてできます。

>なお、頁の切り替えは[PageUp][PageDown]キーで行っています。このキーで切り替
>えたときに、その画面に表示されているデータだけの合計を取りたいのです。

スクロール単位を「頁」に限定したいとすると、なにか細工が必要ですね。

あと、レコード移動イベントでだけやっていますが、実際は他にもたくさん
イベントを設定する必要がありますので、中身は一般手続きにして各イベントから呼び出すことになるでしょう。

手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 &明細番号)
変数 長整数{&明細}
メソッド呼び出し @フォーム.描画禁止(1)
ジャンプ 行番号=-(&明細番号-1)
&頁計=0
繰り返し &明細=1,#フォーム属性(4)
  &頁計=&頁計+[合計したい項目]
  ジャンプ 行番号=+1
繰り返し終了
ジャンプ 行番号=&行番号
メソッド呼び出し @フォーム.明細番号設定( &明細番号 )
メソッド呼び出し @フォーム.描画禁止(0)
手続き定義終了

20679 Re:伝票フォームで頁計が取りたい 沼田政治 2003/06/04-23:58
記事番号20676へのコメント
うにんさん、いつも申し訳ありません。

つまり、画面に表示されている各項目値をそれぞれ取得し、集計に使う変数に加えていこうということですね。
これからやってみようと思いますが、コンピュータにさせるとは言え、大変面倒な方法を使わないといけないみたいですね。

このフォームはレポートと同じ体裁にしています。
レポートを印刷する前に、画面上で確認しようとするものです。
レポートでは各ページ毎に集計されて印刷することが出来ますから、その集計値を画面でも確認したかったのです。

例えば、グループ化の工夫で1画面だけを1つのグループとすることはできないでしょうか。
そのためにはキーになる項目が必要でしょう。フォームでは9行のデータを1画面に表示させるように設計していますから、
編集対象表にそれ用の項目を追加し、9行ずつを一括りにして頁に該当する番号を入れておくことにする、などの工夫です。
グループ化後の行数はレポートを印刷することになる時点まで確定しませんし、
並べ替え状態の途中に挿入されるデータもありますから、直前値などの工夫でも無理なような気がします。
印刷直前のデータをグループ化と頁分けに合わせた分け方で絞り込み、頁番号で置換し、それをグループ項目にする、
ということも考えられます。

桐5時代はフォームもレポートも同じFRMファイルでしたから、ヘッダ・フッタ部の集計に頁計が指定できました。
従って、今回のような要求を満たすには都合が良かったのですが、2つに分かれてからは、
このような視点は外されたということでしょうか。何か、他に変わるような機能が用意されていると良いんですが....。

20681 Re:伝票フォームで頁計が取りたい うにん 2003/06/05-00:17
記事番号20679へのコメント
>このフォームはレポートと同じ体裁にしています。レポートを印刷する前に、画面上で確認しようとするもので
>す。レポートでは各ページ毎に集計されて印刷することが出来ますから、その集計値を画面でも確認したかったの
>です。

レポートの出力を確認したいだけなら、プレビューを見るのがベストだと思いますが...

20691 Re:伝票フォームで頁計が取りたい 沼田政治 2003/06/05-15:06
記事番号20681へのコメント
うにんさん、ありがとうございます。

>レポートの出力を確認したいだけなら、プレビューを見るのがベストだと思いますが...

確認だけなら、その通りですね。
今回の課題は、画面で確認しながら、場合によっては訂正することもある、というところにあります。
その訂正の頻度ですが、場合にもよりますが、4回5回と繰り返さなければならないこともあるのです。

そんな関係もありますので、先日投稿したページ分けもグループ化して扱うという方法も使えそうにありません。
フォームで確認した時に行を削除することさえあるからです。
この場合は次の頁から1行分のデータを前の頁に移さなければなりませんから、これは大変です。

頁計を取ることは、
どうも挫折してしまいそうな予感もありますが、もう少しがんばってみようと思います。

20693 Re:伝票フォームで頁計が取りたい うにん 2003/06/05-17:31
記事番号20691へのコメント
>今回の課題は、画面で確認しながら、場合によっては訂正することもある、というところにあります。
>その訂正の頻度ですが、場合にもよりますが、4回5回と繰り返さなければならないこともあるのです。

グループ内の表示行数を常に#明細行数に絞り込んでおくのはどうでしょう?
集計値は普通のグループ集計でよくなります。
行削除終了・行挿入終了・グループ移動・グループ値訂正終了イベントで、絞込みをやり直します。
グループ内での移動(絞り込みやり直し)はキーダウンイベントか、ボタンで。

20702 Re:伝票フォームで頁計が取りたい 沼田政治 2003/06/06-11:32
記事番号20693へのコメント
うにんさん、こんにちは。

うにんさんのアドバイスの通り、
やっぱり何とかして希望の行数だけを絞り込んでグループ集計するのが一番スマートかなという気がします。
そのための方法として#明細行数を使う方法をアドバイスして頂きましたが、
この使い方がもう一つよく分かりません。
一方で、このフォームはレコードを削除するだけでなく年月日のデータを含むレコードを挿入する場合もあります。
当然年月日が前後することがありますので、これを並び替えて修正することを考えています。
このフォームは最初から絞り込んだ状態で編集に入りますから、いわゆる自動整列をさせることができません。
イベントから一般手続を呼んで並び替えをしなければならないのです。どちらにしても一般手続を呼ぶというプロセスが必要ですから、
この続きに工夫をしてみたらどうかと考えました。
次のような命令を追加するということです。
まだ完全には動きませんが、もう少し工夫すれば何とかなりそうが気がしています。

伝票フォームの希望行数を超えるレコードを新たなグループにすることを考えています。そのためのグループ項目を[請求G」とし、
表の項目に追加し、伝票フォームにグループ項目として置きました。
行削除終了・行挿入終了などのイベントから呼ぶことを考えています。必要な変数は宣言済みとして、

手続定義開始 請求グループ作成()
  並べ替え 条件名=請求用
  繰り返し &カウント=1,&項目A最大値
    絞り込み [グループ項目A]=&カウント
    条件 (&選択件数<9) 繰り返し中止
   &STR1="項目B1,項目B2,項目B3,項目B4,項目B5,項目B6,項目B7"
    繰り返し &カウント1=1 , 7
      &比較式=#対応文字列( &STR1 , &カウント1 )
      絞り込み [グループ項目B]_&比較式
      条件 (&選択件数<9) 繰り返し中止
      &STR2="項目C1,項目C2,項目C3"
      繰り返し &カウント2=1 , 3
   &比較式=#対応文字列( &STR2 , &カウント2 )      
   絞り込み [グループ項目C]_&比較式
        条件 (&選択件数<9) 繰り返し中止
          [請求G]=[請求G]+1
         絞り込み解除 1
      繰り返し終了
   絞り込み解除 1
    繰り返し終了
  絞り込み解除 1
  繰り返し終了
  絞り込み解除 1
手続定義終了

というものです。
並び替えをしなければならない場合を行挿入だけと考えていましたが、
行削除やソース値更新のイベントでも呼び出せば使えるのではないかと思っています。
ただ、頻繁に呼び出して、並べ替えから絞り込みなど....、
これから先レコード件数が多くなってくるとどうなのかなという心配はあります。

20703 Re:伝票フォームで頁計が取りたい 沼田政治 2003/06/06-11:48
記事番号20702へのコメント
すいません。kevファイルからのコピーのミスです。

最終段階の命令は、

      繰り返し &カウント2=1 , 3
   &比較式=#対応文字列( &STR2 , &カウント2 )      
   絞り込み [グループ項目C]_&比較式
        条件 (&選択件数<9) 繰り返し中止
ジャンプ 行番号=10
          絞り込み 行数=9
          置換 終了状態=&実行リターン,[請求G]=[請求G]+1
         絞り込み解除 1
      繰り返し終了
   絞り込み解除 1

となります。

戻る