【COBOL学習|初心者向け】帳票を見やすく整理!GROUP INDICATE句で「重複」をスッキリ解消しよう

導入: なぜGROUP INDICATEが必要なのか

COBOLで帳票(レポート)を出力する際、同じ項目が縦にずらりと並んでいて見づらいと感じたことはありませんか?例えば、部門ごとに集計された売上リストで、すべての明細行に「営業部」と表示されていると、どこで部門が変わったのか視覚的に判別しにくくなります。

この課題を解決するのがGROUP INDICATE句です。これを使うと、制御項目(部門コードや日付など)の値が切り替わった時だけ値を出力し、それ以外の重複する行では値を「空白」にしてくれます。これにより、帳票の可読性が劇的に向上します。

基礎知識: 報告書作成機能の仕組み

COBOLには、複雑な帳票作成を自動化する「REPORT SECTION」という強力な機能があります。
GROUP INDICATEは、このREPORT SECTION内で使用する句です。

仕組みとしては、COBOLのランタイムが自動的に「前行の値」を記憶しています。出力処理の際、現在処理している値と前行の値を比較し、「値が同じなら空白にする」「値が変わったら印字する」という制御を自動で行ってくれるのです。これにより、プログラマがわざわざ「前回値保存用」の変数を用意して、IF文で比較し……といった面倒なコーディングをする必要がなくなります。

実装/解決策: 記述のルール

GROUP INDICATE句は、REPORT SECTIONの明細行(DETAIL)定義の中で記述します。対象となる項目(SOURCE)の直後に記述するだけで機能します。

サンプルプログラム

以下は、部門名が切り替わるタイミングでだけ値を表示するレポート定義の例です。

REPORT SECTION.
RD SALES-REPORT.
01 TYPE DETAIL.
05 COLUMN 1 PIC X(10) SOURCE DEPT-NAME GROUP INDICATE.

  • 部門名が前の行と同じなら空白、変われば表示されます

05 COLUMN 15 PIC ZZZ,ZZ9 SOURCE SALES-AMOUNT.

  • 売上金額は毎回表示します

※この記述により、出力結果は以下のようになります。
営業部 100,000
150,000
200,000
人事部 80,000
90,000

応用・注意点: 現場で役立つアドバイス

1. ソートの重要性: GROUP INDICATEを正しく動作させるには、入力データがその項目で「ソート(並び替え)」されていることが大前提です。データがバラバラだと、意図せず何度も値が表示されてしまいます。
2. 改ページとの併用: ページが切り替わった直後の行でも、この句は有効です。ページをまたいでも「項目が同じなら表示しない」というルールが適用されるため、非常に洗練されたレイアウトが実現できます。
3. デバッグのコツ: 万が一、意図通りに表示されない場合は、入力ファイルが本当にそのキーで整列されているか、ファイル読み込み時の制御用変数が正しく更新されているかを確認してください。

ベテランの現場では、帳票の美しさは「読みやすさ」に直結します。ぜひこの機能を活用して、誰が見ても分かりやすい帳票を作成してくださいね。

コメント

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