【COBOL学習|豆知識】[ベテランが教える「REPORT SECTION」の落とし穴:終端規則と定石]

導入:なぜREPORT SECTIONの「終わり」が重要なのか

COBOLの報告書作成機能(Report Writer)は、一度使いこなせば極めて強力ですが、その記述の難解さから敬遠されることも多い機能です。特に「REPORT SECTION」は、DATA DIVISIONの末尾に配置されるという特性上、どこまでが報告書定義で、どこからがPROCEDURE DIVISIONなのかをコンパイラに正しく認識させる必要があります。この「終端」を曖昧にすると、コンパイルエラーの温床となり、原因特定に時間を浪費することになります。今回は、この終端規則の基本と、現場で安全に運用するためのTipsを解説します。

基礎知識:REPORT SECTIONの立ち位置

REPORT SECTIONは、DATA DIVISIONにおける「報告書定義」の専用領域です。通常のファイル定義(FILE SECTION)や作業領域(WORKING-STORAGE SECTION)とは異なり、この節は「報告書のレイアウト」を記述する特殊なセクションです。
重要なのは、このセクションがDATA DIVISIONの最後に位置するというルールです。そのため、報告書の記述が終わった直後にPROCEDURE DIVISIONの見出しを置くことで、コンパイラは「ここからが処理の手続きである」と判断します。

実装と解決策:正しい終端の書き方

REPORT SECTIONの最後は、必ずデータ記述項の末尾に「ピリオド(.)」を打ち、その直後にPROCEDURE DIVISIONの見出しを配置します。もしピリオドを忘れると、コンパイラはPROCEDURE DIVISIONの中身までをREPORT SECTIONの一部であると誤認し、不可解なエラーを吐き出します。

サンプルプログラム:安全なREPORT SECTIONの記述例

以下は、報告書の最終行に合計値を出力する際の、正しい記述例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. REP-SAMPLE.
DATA DIVISION.
REPORT SECTION.
RD SAMPLE-REPORT.
01 DETAIL-LINE TYPE IS DETAIL.
10 COL 05 SOURCE WS-NAME.
10 COL 20 SOURCE WS-AMT.
01 FOOTER-LINE TYPE IS PAGE FOOTER.
10 COL 50 SOURCE WS-END. (<- ここでピリオドを打ち、セクションを完結させる)

PROCEDURE DIVISION.
… 処理の開始 …

応用・注意点:現場で陥りやすいバグの回避策

現場でよくある失敗として、COPY句を使ってREPORT SECTIONを外部ファイルから取り込んでいる場合に、取り込み先のファイル末尾にピリオドがないケースです。
COPY句で取り込んだ先でピリオドが省略されていると、その後の記述と結合されてしまい、思わぬ構文エラーを引き起こします。

対策1:COPY句で取り込む定義ファイルの末尾には、必ず明示的にピリオドを記述する癖をつけましょう。
対策2:REPORT SECTIONが終わった直後の行は、必ず「PROCEDURE DIVISION.」と記述することを徹底してください。余計な空行を入れるのは自由ですが、見出しを明確にすることがデバッグの近道です。

ベテランの経験則として言えるのは、Report Writerは「型」を守れば非常に堅牢なコードになります。この終端規則をしっかり押さえて、メンテナンス性の高い帳票プログラムを作成してください。

コメント

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