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