【COBOL学習|初心者向け】報告書作成の要!COBOLの「SUM句」で集計処理を劇的に楽にする方法

導入:なぜSUM句が重要なのか

COBOLで報告書プログラムを作成する際、もっとも頭を悩ませるのが「合計の計算」です。明細行を出力するたびに、変数に値を足し込み、グループが変わるたびに合計を印字し、変数をゼロクリアする……。これらを全て手動で行うとコードが複雑になり、バグの温床になります。
そこで活躍するのがSUM句です。これを使うと、COBOLが自動的に加算・印字・リセットを行ってくれるため、プログラムが驚くほどシンプルになります。

基礎知識:SUM句の仕組み

SUM句は、報告書作成機能(REPORT SECTION)の中でのみ使用できる強力な機能です。
ここで重要なのがCONTROL FOOTING(コントロール・フッティング)という概念です。これは「グループが変わるタイミング(コントロール切れ)」を指定する場所で、SUM句はこの中で定義することで、そのグループの合計値を自動で算出してくれます。

実装:SUM句の賢い使い方

SUM句を使用するには、REPORT SECTION内で以下のように記述します。
1. CONTROL句で「グループ化したい項目」を指定する。
2. CONTROL FOOTING句の中で、合計を出力したい項目に対して「SUM 項目名」と記述する。
これだけで、明細行のデータが読み込まれるたびに、内部的に加算処理が自動実行されます。

サンプルプログラム:売上集計レポート

以下は、部署ごとの売上合計を算出する簡単なコード例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-SUM.
REPORT SECTION.
RD SALES-REPORT
CONTROLS ARE DEPT-ID.
01 TYPE IS CONTROL FOOTING DEPT-ID.
05 COLUMN 10 PIC X(10) VALUE ‘合計:’.

  • SUM句を指定することで、DEPT-IDが変わるタイミングで自動集計される

05 COLUMN 25 PIC ZZZ,ZZ9 SUM WS-SALARY.

PROCEDURE DIVISION.

  • 実際にはここからレポート出力処理を呼び出します

STOP RUN.

応用・注意点:現場で役立つポイント

現場でSUM句を使う際、特に注意すべきは「リセットのタイミング」です。
SUM句は指定したコントロール項目が切り替わった瞬間に、自動的に値を0にリセットします。 もし「合計をリセットしたくない(累計を取り続けたい)」場合は、SUM句ではなくMOVE文と加算処理を手動で行う必要があります。
また、集計対象の項目(WS-SALARYなど)は、必ず数字項目(PIC 9など)で定義してください。英数字混在の項目を指定すると、実行時にエラーや予期せぬ結果を招く可能性があるため、型定義には細心の注意を払いましょう。

まずは小さなレポートから、この自動集計機能を試してみてください。コードの行数が減り、可読性がぐっと向上するはずですよ。

コメント

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