【COBOL学習|豆知識】【COBOL豆知識】REPORT WRITERの切り札!FINALキーワードで総合計をスマートに出力する方法

導入:なぜFINALキーワードが重要なのか

COBOLのREPORT WRITER機能を使っていて、「明細ごとの小計は出せるけれど、最後に全データの総合計を出すのが面倒だ」と感じたことはありませんか?通常、制御切れ(コントロールブレイク)を利用して集計を行いますが、最上位の階層を自分で管理するのは手間がかかります。そこで登場するのがFINALキーワードです。これを使うことで、報告書の最後(または最初)に一度だけ発生する制御を自動化でき、スマートに総合計を算出できるようになります。

基礎知識:FINALキーワードとは

REPORT WRITERにおけるCONTROLS句は、報告書出力のタイミングを制御する重要な機能です。通常は「部門コード」や「日付」といった項目を指定しますが、FINALは、それらとは別格の「報告書全体」を管理する特別なキーワードです。
具体的には、報告書が開始された直後、および全ての明細処理が終わった直後のタイミングで制御をトリガーします。これにより、プログラム側でわざわざフラグを管理しなくても、自動的に総合計を算出するロジックを組むことが可能になります。

実装・解決策

実装は非常にシンプルです。REPORT SECTIONのCONTROLS句に「FINAL」を追加するだけです。
1. REPORT SECTION内のCONTROLS句に「FINAL」を記述する。
2. 総合計を出力するためのCONTROL FOOTING FINAL(またはHEADING)セクションを定義する。
3. 項目にはSUM句を使用し、FINALのタイミングで自動的に集計されるように設定する。

サンプルプログラム

以下のコードは、売上明細の小計と、最後に総合計を出力するレポートの定義例です。

REPORT SECTION.
RD SAMPLE-REPORT
CONTROLS ARE FINAL, DEPT-CODE. > FINALを最上位に指定

01 TYPE CONTROL FOOTING DEPT-CODE.
05 LINE + 1.
10 COLUMN 10 PIC X(10) VALUE “小計:”.
10 COLUMN 25 PIC ZZZ,ZZ9 SOURCE WS-SALES SUM WS-SALES.

01 TYPE CONTROL FOOTING FINAL. > 報告書の最後に一度だけ出力
05 LINE + 2.
10 COLUMN 10 PIC X(15) VALUE “★総合計:”.
10 COLUMN 25 PIC ZZZ,ZZ9 SOURCE WS-SALES SUM WS-SALES.

応用・注意点

現場で活用する際の注意点は、「FINALの順序」です。CONTROLS句のリストで左側に記述するほど上位の階層として扱われます。必ず「FINAL」を一番左に記述してください。
また、陥りやすいバグとして「SUM句の集計範囲」があります。FINALで集計されるのは、指定した項目が属するREPORT内のデータです。複数のREPORTを扱う場合は、どのレポートのFINALなのかを混同しないよう注意しましょう。
昔ながらのロジックで総合計フラグを立てていた方は、ぜひこの宣言的な記述に切り替えて、コードの可読性を高めてみてください。

コメント

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