【COBOL学習|初心者向け】COBOLの報告書作成機能でページ末尾をスマートに制御する:TYPE IS PAGE FOOTINGの活用術

導入:なぜPAGE FOOTINGが重要なのか

COBOLで帳票プログラムを作成する際、もっとも頭を悩ませるのが「ページ制御」です。例えば、請求書や一覧表を作成する際、各ページの最後に「小計」や「ページ番号」、あるいは「次ページに続く」といった定型メッセージを自動的に出力したい場面は非常に多いはずです。これを手動で制御しようとすると、行数をカウントして条件分岐を繰り返す必要があり、コードが複雑化してバグの温床になります。そこで役立つのが、COBOLの報告書作成機能(Report Writer)におけるTYPE IS PAGE FOOTINGです。これを使うことで、ページ単位の制御を言語側に任せ、ロジックを劇的にシンプルにできます。

基礎知識:Report Writerの仕組み

COBOLには、帳票出力を効率化するための「Report Writer」という機能があります。通常、MOVE文で出力行を編集してWRITE文で出力しますが、Report Writerを使うと、データ定義(RD句)に基づいてシステムが自動的に改ページやヘッダー・フッターの制御を行います。
PAGE FOOTING (PF)は、定義されたページ長に達した際、あるいは報告書の終了時に自動的に発動する記述です。これにより、プログラマが明示的に「今は何行目か?」を意識せずとも、決まった位置にフッターを出力できるようになります。

実装:PAGE FOOTINGの考え方

PAGE FOOTINGを実装するには、データ部のREPORT SECTIONで定義を行います。
1. RD(Report Description)句でレポート名を定義する。
2. その下に 01 レベルで TYPE IS PAGE FOOTING を指定する。
3. この配下に、出力したい項目(ページ合計やメッセージ)を記述する。
システムは、REPORT SECTION内の記述を監視し、ページ終了時に自動的にこのグループを書き出します。

サンプルプログラム

以下のコードは、ページフッターに定型メッセージとページ番号を表示する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. PF-SAMPLE.
REPORT SECTION.
RD REP-NAME
CONTROLS ARE FINAL
PAGE LIMIT IS 60 LINES.

  • ページフッターの定義

01 TYPE IS PAGE FOOTING.
05 COLUMN 20 PIC X(20) VALUE ‘— 次ページへ続く —‘.
05 COLUMN 70 PIC X(05) VALUE ‘PAGE:’.
05 COLUMN 76 PIC Z9 SOURCE PAGE-COUNTER.

PROCEDURE DIVISION.

  • 実際にはここでINITIATE, GENERATE, TERMINATEを使用します。
  • PAGE-COUNTERはシステム変数で、自動的にページ番号が加算されます。

応用・注意点:現場のベテランからのアドバイス

現場でこの機能を使う際に、初心者が陥りやすい注意点が2つあります。

一つ目は「ページ長の定義」です。RD句の「PAGE LIMIT」で指定した行数と、実際のプリンタの物理的な行数・改行設定が合っていないと、印字がズレて非常に見栄えの悪い帳票になります。必ずシステム仕様書の行数設定を確認してください。

二つ目は「変数のリセット」です。PAGE FOOTING内で「ページごとの小計」を出力する場合、新しいページに移るタイミングでその変数を0クリアする必要があります。これには「RESET ON PAGE」句などを適切に組み合わせる必要があります。

最初はReport Writerの独特な記述に戸惑うかもしれませんが、一度マスターすれば、帳票プログラムの保守性は格段に向上します。ぜひ、複雑な改ページ制御が必要なプログラムで試してみてください。

コメント

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