なぜこの制御が重要なのか
COBOLの報告書作成機能(REPORT WRITER)において、改ページ制御は美しく見やすい帳票を作るための基本です。特に「グループが変わるたびに改ページする」という指定は非常に便利ですが、報告書の最後に出力される総合計(FINAL)と組み合わせる際、多くの現場で「最後のページが白紙で出力される」というトラブルが発生します。これはプログラムのバグではなく、制御の仕組みを知ることで簡単に回避できる課題です。
基礎知識:REPORT WRITERの改ページ制御
COBOLのREPORT SECTIONでは、NEXT GROUP IS NEXT PAGEという句を使うことで、特定のグループが切り替わるタイミングで強制的に改ページを行わせることができます。これは「部署ごと」「得意先ごと」に帳票を分けたい場合に重宝します。
ここで注意が必要なのが、REPORT GROUPのタイプにFINALを指定した場合です。FINALは帳票の末尾に出力される総合計を指しますが、ここにNEXT PAGEを指定してしまうと、システムは「総合計を出力した後、次のページへ移動せよ」という命令を忠実に実行してしまい、結果として内容のない空のページが最後に生成されてしまうのです。
実装の考え方
実務における作法としては、FINALグループにはNEXT PAGEを指定しないのが鉄則です。もし総合計をどうしても新しいページに独立させたい場合は、プログラム側で改ページを制御するのではなく、REPORT GROUPの定義順序や、あえてNEXT PAGEを指定せずにFINALを記述する工夫が求められます。
サンプルプログラム
以下に、誤った制御を避けつつ、適切に総合計を出力する定義例を示します。
01 REPORT-GROUP-BODY.
02 TYPE DETAIL.
03 LINE PLUS 1.
05 COLUMN 10 PIC X(20) SOURCE D-NAME.
05 COLUMN 35 PIC ZZZ,ZZ9 SOURCE D-AMOUNT.
01 REPORT-GROUP-FINAL.
02 TYPE FINAL.
03 LINE PLUS 2.
05 COLUMN 10 PIC X(10) VALUE ‘総合計’.
05 COLUMN 35 PIC ZZZ,ZZ9,ZZ9 SOURCE TOTAL-AMOUNT.
- 注意: ここに NEXT GROUP NEXT PAGE を記述してはいけません。
- 記述すると、合計出力後に不要な改ページが走ります。
応用・注意点
現場でよくある失敗として、「合計行をどうしても次ページに追い出したい」という要件を、機械的にNEXT PAGEで実装してしまうケースがあります。もしどうしても総合計を独立したページにしたい場合は、FINALに指定するのではなく、直前のグループの制御で見直すか、あるいはREPORT SECTIONを使用せず、手続き部(PROCEDURE DIVISION)で明示的にWRITE文とAFTER PAGE句を制御する手法へ切り替えるのが安全です。
また、デバッグ時に「出力ファイルが期待より1ページ多い」と感じたら、まずはFINAL句に不要な改ページ指定が入っていないか、真っ先に確認するようにしてください。些細なことですが、大量の帳票を出力するバッチ処理において、この無駄な1ページを削ることは、用紙コストとプリンタの稼働時間を守ることに繋がります。

コメント