【COBOL学習|初心者向け】COBOL Report Writerの魔法!集計キーの不変性を使いこなそう

導入:なぜ「集計キーの不変性」が重要なのか

COBOLの報告書作成機能(Report Writer)を使っていると、グループの合計を出力するタイミングで「あれ?今、どの部署の合計を出力しているんだっけ?」と混乱することがあります。特に、集計キーの値が切り替わった直後に処理が走るため、誤った情報を印字してしまうリスクがあります。この「集計キーの不変性」という仕組みを理解すれば、そんなトラブルを未然に防ぎ、正確な報告書を簡単に作れるようになります。

基礎知識:Report Writerの仕組み

COBOLのReport Writerには、CONTROL FOOTING(CF)という機能があります。これは、指定したキー(DEPT-CODEなど)の値が変わったときに、自動的に合計行や脚書きを出す仕組みです。
重要なのは、Report Writerが内部で「キーが切り替わる前の値」を保持しているという点です。これにより、改ページや集計のタイミングで、直前まで処理していたグループの名称を正確に参照できるのです。

実装:SOURCE句の賢い使い方

実装は非常にシンプルです。CF句の中で、グループ名などを表示する項目に対してSOURCE句を指定するだけです。特別なフラグ管理や退避領域を用意する必要はありません。Report Writerが自動的に「そのグループのキーに対応する名称」を保持し、印字してくれます。

サンプルプログラム

以下のコードは、部署(DEPT-CODE)ごとに集計を行う際の基本的な実装例です。

01 TYPE CF DEPT-CODE.
05 LINE PLUS 1.

  • ↓ ここでSOURCEを指定すると、Report Writerが旧値を保持しているため
  • 正しい部署名が印字されます。

10 COLUMN 1 PIC X(20) SOURCE DEPT-NAME.
10 COLUMN 25 PIC Z(8)9 SOURCE SUM OF SALES-AMOUNT.

応用・注意点:現場で陥りやすい罠

現場でよくあるミスは、CF句の中で「現在読み込んでいる最新のレコード」の項目を参照してしまうことです。
例えば、MOVE文などで最新のレコード項目を直接指定してしまうと、すでに次の部署のデータに切り替わっているため、誤った部署名が表示されてしまいます。
必ずSOURCE句を利用し、Report Writerの制御下に置くことが、バグを防ぐ鉄則です。また、集計キーの定義順序と、プログラム内でのSORT順序が一致していることを必ず確認してください。ここがズレていると、Report Writerが正しくグループを認識できず、意図しないタイミングで脚書きが出力されてしまいます。

ベテランの知恵として、Report Writerは「宣言的に書く」のがコツです。処理の流れを自分で制御しようとせず、Report Writerの自動制御に任せる勇気を持つことが、保守性の高いコードへの近道ですよ。

コメント

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