COBOLサンプルソース集)ドライバの組合せ例

【BRK900】印刷制御主体のコントロールブレイク

印刷制御のドライバとコントロールブレイクのドライバを組合せた場合のサンプルです。基本的に実務ではどちらか片方というプログラムは少なく、色々なドライバを組み合わせたものを一本のプログラムで表現することが非常に多いです。また、グループの計を求めながら、頁計・総計を印刷する場合を想定し、サンプルを作成しています。

      *****  [ 印刷制御主体のコントロールブレイク ]  *****    (08 F8)
      *(キーが変わったら1頁5行の計を表示しながら 改頁・見出し・頁計・総計を印字)

       identification   division.
       program-id.      brk900.
       environment      division.
       input-output     section.
       file-control.
           select f1 assign "c:\dat\mas30.dat" status fst
                            organization line sequential.
       data             division.
       file             section.
       fd  f1.
       01  f1r.
           03           pic x(05).
           03  f1-cd    pic x(03).
           03           pic x(56).
           03  f1-kin   pic 9(07).

       working-storage  section.
       01  fst          pic x(02).
       01  h1-cd        pic x(03).
       01  行数         pic 9(02) value 0.
       01  改頁         pic x(30) value all "-".
       01  見出         pic x(18) value "***** 見出し *****".
       01  行送         pic x(71) value space.
       01  累計.
           03           pic x(01) value "(".
           03  rk-cd    pic x(03).
           03           pic x(04) value ") = ".
           03  rkei     pic 9(08) value 0.
       01  頁計.
           03           pic x(08) value " 頁計 = ".
           03  pkei     pic 9(08) value 0.
       01  総計.
           03           pic x(08) value " 総計 = ".
           03  skei     pic 9(08) value 0.

       procedure        division.
      ********** [ main-proc-driver ] **********
           open input f1
           display "!!! brk900-started !!!"
      *    ***** 最初の1件の read *****
           perform 読込処理
      *    ***** ファイル 終了までの繰返し *****
           perform until f1-cd = high-value
      *        ***** キーの保存と必要な領域のクリア *****
               move f1-cd to h1-cd   initialize rkei
      *        ***** キーが変わるまでの繰返し *****
               perform until f1-cd not = h1-cd
      *            **** キーが同じ時の処理 *****
                   add f1-kin to rkei
      *            ***** 次のデータの read *****
                   perform 読込処理
               end-perform
      *        ***** 明細1行の編集印刷 *****
               add 1 to 行数
               evaluate 行数
      *            ***** 最初の1回 *****
                   when  1    perform 改頁処理   perform 見出処理
      *            ***** 次頁のデータがある時の改ページ *****
                   when  6    perform 頁計処理   initialize pkei
                              perform 行送処理   perform 改頁処理
                              perform 見出処理   move 1 to 行数
      *            ***** 上記以外の時 *****
                   when other continue
               end-evaluate
               perform 明細処理
           end-perform
      *    ***** データが終わった時の処理 *****
           perform 行送処理 until 行数 = 5
      *    ***** 頁計印刷 *****
           perform 頁計処理
      *    ***** 総計印刷 *****
           perform 総計処理
           perform 改頁処理
           display "!!! brk900 - ended !!!"
           close f1  stop run.
      ********** [ process-module ] **********
       改頁処理. display 改頁.
       改頁出口. exit.
       見出処理. display 見出.
       見出出口. exit.
       明細処理. move h1-cd to rk-cd display 累計 add rkei to pkei skei.
       明細出口. exit.
       頁計処理. display 頁計.
       頁計出口. exit.
       総計処理. display 総計.
       総計出口. exit.
       行送処理. display 行送  add 1 to 行数.
       行送出口. exit.
      ********** [ read-module ] **********
       読込処理. read f1 end move high-value to f1-cd
                     not end continue
                 end-read.
       読込出口. exit.

<< Back   Index   Next >>    < Top >