【COBOL学習|実務向け】COBOL帳票出力の要!REPORT HEADING(RH)を正しく使いこなす

導入:なぜREPORT HEADINGが重要なのか

COBOLのREPORT WRITER機能(報告書作成機能)を使用する際、帳票の「顔」となるのがタイトルや表紙です。全ページの中で一度だけ、しかも最初のページにのみ出力したい情報を制御するために不可欠なのが「TYPE IS REPORT HEADING (RH)」です。これを使わずに自分でカウンタやフラグを管理して出力制御を行うと、ロジックが複雑化しバグの温床になりがちです。RHを正しく理解し活用することで、保守性の高い帳票プログラムを実現しましょう。

基礎知識:RHが発火するタイミング

REPORT WRITER機能において、報告書の出力は「INITIATE」で開始され、「GENERATE」でデータレコードを書き出し、「TERMINATE」で終了します。
RHは、INITIATE文が実行された後の「最初のGENERATE文」が呼び出された瞬間に、自動的に出力される集団項目です。この仕組みを理解していれば、プログラム側で「1ページ目かどうか」を判定するフラグを持つ必要はありません。RHはあくまで「報告書全体で一度だけ」出力されるもの、と覚えておいてください。

実装/解決策:定義と出力の仕組み

REPORT SECTION内で記述する際は、01レベルの項目に対して「TYPE IS REPORT HEADING」を指定します。これにより、コンパイラが自動的に出力タイミングを管理してくれます。

サンプルプログラム

以下は、報告書のヘッダーとして表紙タイトルを出力する実用的なコード例です。

REPORT SECTION.
RD MY-REPORT
CONTROLS ARE FINAL.

— 報告書の最初のみ出力されるヘッダー定義
01 TYPE IS REPORT HEADING.
05 COLUMN 1 PIC X(20) VALUE “— 売上報告書 —“.
05 COLUMN 30 PIC X(10) VALUE “作成日:”.
05 REPORT-DATE PIC X(8).

— 通常の明細行
01 TYPE IS DETAIL.
05 ITEM-NAME COLUMN 1 PIC X(10).
05 ITEM-AMT COLUMN 20 PIC ZZZ,ZZZ.

PROCEDURE DIVISION.
OPEN INPUT INPUT-FILE.
OPEN OUTPUT PRINT-FILE.

— 報告書の初期化
INITIATE MY-REPORT.

PERFORM UNTIL END-OF-FILE
READ INPUT-FILE INTO WORK-RECORD
— この最初のGENERATEでRHが自動出力される
GENERATE DETAIL-LINE
END-PERFORM.

TERMINATE MY-REPORT.
CLOSE INPUT-FILE PRINT-FILE.

応用・注意点:現場での運用Tips

実務でRHを使用する際、以下の点に注意してください。

1. 複数行の定義
RHは集団項目として定義できるため、複数の05レベルをぶら下げることで、複数行の表紙タイトルを構成可能です。

2. ページ番号との混同を避ける
「ページごと」に出力したい項目(ページヘッダー)は「TYPE IS PAGE HEADING (PH)」を使います。RHは「レポート全体で一度だけ」です。混同してRHにページ番号などを入れてしまうと、2ページ目以降に表示されず意図しない帳票になるため注意が必要です。

3. プロシージャ内での初期化
RHに使用する変数(日付など)は、必ずINITIATE文を実行する前に値をセットしておく必要があります。INITIATEが実行された時点で、REPORT WRITERは定義された項目を書き出す準備を始めるためです。

この機能を使いこなせば、帳票のレイアウト変更にも強い、堅牢なCOBOLプログラムが書けるようになります。ぜひ次回の開発で活用してみてください。

コメント

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