キーがブレイクするまで、データを印刷しながら、ブレイクしたらグループ計を印刷して改頁します。なお、1頁の印刷行数が指定されている場合を想定しております。これもよく見かけるパターンのサンプルですので参考にして下さい。
***** [ コントロールブレイク主体の印刷制御 ] ***** (10 F9) *(1頁5件の明細を表示しながら キーが変わったら計を表示して改頁・見出し) identification division. program-id. brk910. environment division. input-output section. file-control. select f1 assign "c:\dat\mas91.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(07) value 0. 01 行数 pic 9(02) value 0. 01 改頁 pic x(71) value all "-". 01 見出. 03 pic x(20) value space. 03 pic x(28) value "********** 見出し **********". 01 空白 pic x(56) value space. procedure division. ********** [ main-proc-driver ] ********** open input f1 display "!!! brk910-started !!!" * ***** 最初の1件の read ***** perform 読込処理 * ***** ファイル 終了までの繰返し ***** perform until f1-cd = high-value * ***** キーの保存と領域のクリア ***** move f1-cd to h1-cd initialize 累計 * ***** キーが変わるまでの繰り返し ***** perform until f1-cd not = h1-cd * ***** 印刷の制御 ***** add 1 to 行数 evaluate 行数 * ***** 最初の1件とキーが変わった後 ***** when 1 perform 改頁処理 perform 見出処理 * ***** 次頁の明細データがある時の改頁 ***** when 6 perform 改頁処理 perform 見出処理 move 1 to 行数 * ***** 上記以外の時 ***** when other continue end-evaluate * ***** 累計計算と明細の表示 (same-key) ***** perform 明細処理 * ***** 次のデータの read ***** perform 読込処理 end-perform * ***** キーが変わった時の処理 (累計印刷) ***** perform 累計処理 end-perform perform 改頁処理 display "!!! brk910 - ended !!!" close f1 stop run. ********** [ process-module ] ********** 改頁処理. display 改頁. 改頁出口. exit. 見出処理. display 見出. 見出出口. exit. 明細処理. add f1-kin to 累計 display f1r. 明細出口. exit. 累計処理. display 空白 "(" h1-cd ") = " 累計 move 0 to 行数. 累計出口. exit. ********** [ read-module ] ********** 読込処理. read f1 end move high-value to f1-cd not end continue end-read. 読込出口. exit.