【COBOL学習|実務向け】COBOL帳票出力の現場術:LINE NUMBER IS NEXT PAGEで部門別改ページをスマートに制御する

1. 導入:なぜこの機能が必要なのか

基幹システムのバッチ処理において、帳票作成は避けて通れない業務です。特に「部門ごと、あるいは得意先ごとにページを改めたい」という要件は頻出します。
素朴な実装では、行カウンタを監視し、「IF 行数 > 50 THEN 改ページ」といったロジックを各所に記述しがちですが、これでは修正や保守が大変です。COBOLのREPORT WRITER機能(RPT)を活用し、「LINE NUMBER IS NEXT PAGE」を指定することで、ロジックを分離し、可読性と保守性の高い帳票作成が可能になります。

2. 基礎知識:REPORT WRITERの改ページ制御

REPORT WRITER機能は、手続き部で細かく行制御を書く代わりに、データ部で帳票レイアウトを定義する手法です。
ここで登場する「CONTROL HEADING(CH)」は、集団の切り替わりを検知して出力される見出しです。本来、CHは現在のページにそのまま出力されますが、今回紹介する「LINE NUMBER IS NEXT PAGE」句を付与することで、その集団が始まる直前に強制的に改ページ(SKIP TO TOP OF NEXT PAGE)を行うようになります。

3. 実装と解決策

実装のポイントは、データ部(DATA DIVISION)のレポート記述項で、改ページの起点となるキー(例:部門コード)をCONTROL句に定義し、CH(CONTROL HEADING)に対してLINE NUMBER句を指定することです。これにより、プログラム側で改ページフラグを管理する必要が一切なくなります。

4. サンプルプログラム

以下のコードは、部門コードが切り替わるたびに新しいページから出力を行うための定義例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-REPORT.
ENVIRONMENT DIVISION.
REPORT SECTION.
RD REP-MAIN
CONTROLS ARE DEPT-CODE.

  • 部門コードが切り替わるとCHが発動する

01 TYPE IS CH DEPT-CODE LINE NUMBER IS NEXT PAGE.
05 COLUMN 1 PIC X(04) VALUE ‘部門:’.
05 COLUMN 6 PIC X(05) SOURCE DEPT-CODE.

  • 明細行の定義

01 TYPE IS DETAIL LINE NUMBER + 1.
05 COLUMN 10 PIC X(20) SOURCE ITEM-NAME.

PROCEDURE DIVISION.

  • 呼び出し側では、DEPT-CODEを更新してGENERATEするだけで、
  • 自動的に改ページと見出し出力が行われます。

5. 応用・注意点

現場でこの機能を扱う際の注意点は「不要な改ページ」です。
注意点1:データのソート順序が必須です。この機能は「DEPT-CODEが変わった瞬間」に反応するため、入力データがソートされていないと、ページが不必要に頻発します。必ず事前にSORT処理を挟んでください。
注意点2:レポートの初期化。初回実行時も「前ページ」から切り替わったと見なされ、強制的に改ページされることがあります。帳票の先頭ページを空にしたくない場合は、制御変数の初期値に注意が必要です。

この機能を使いこなせば、帳票のレイアウト変更依頼があっても、手続き部を触ることなくデータ部の定義修正だけで完結できるようになります。ぜひ現場の帳票プログラムで活用してください。

コメント

タイトルとURLをコピーしました