COBOLのREPORT SECTION完全ガイド!帳票設計の基本と使い方
生徒
「COBOLで綺麗な報告書を作りたいのですが、一行ずつプログラムを書くのは大変そうです……もっと簡単な方法はありませんか?」
先生
「それなら『REPORT SECTION(報告書節)』を使うのが一番ですよ。あらかじめ報告書のレイアウトを定義しておけば、COBOLが自動的にページめくりや合計計算をしてくれるんです。」
生徒
「自動でページをめくってくれるんですか!それは便利ですね。初心者でも設計できますか?」
先生
「大丈夫です!設計図を描くような感覚で進められます。さっそく、REPORT SECTIONの魔法を見ていきましょう!」
1. REPORT SECTIONとは?
COBOL(コボル)というプログラミング言語は、企業の売上データや給与明細といった帳票(ちょうひょう)、つまり紙に印刷するための報告書を作成するのが非常に得意です。その中でも、最も高度で便利な機能がREPORT SECTION(報告書節)です。
通常、報告書を作るには「何行書いたら次のページへ行くか」「合計金額はどう計算するか」といった細かい手順をすべて自分でプログラミングしなければなりません。しかし、REPORT SECTIONを使えば、「この位置にタイトル」「この位置に合計」といった設計図を定義するだけで、残りの面倒な処理はコンピュータが勝手にやってくれます。プログラミング未経験の方にとって、最も強力な味方になる機能の一つです。
2. 帳票の「骨組み」を決めるRD句
帳票設計の第一歩は、報告書の全体的なルールを決めることです。これをRD句(Report Description:報告書記述項)と呼びます。ここでは、1ページの行数や、見出しを何行目に書くかといった「外枠」を設定します。
パソコンのWordやExcelで「余白の設定」や「行の高さ」を決める作業をイメージしてください。COBOLではこれをコードで指定します。例えば、PAGE LIMIT 60と書けば、「1ページは60行までですよ」という命令になります。これによって、データがたくさんあっても、60行に達した時点で自動的に次のページへ移ってくれるようになります。これを改ページ処理と呼び、手動でプログラミングすると非常に複雑な部分を自動化できるのです。
3. 報告書のパーツ「報告集団」を理解しよう
REPORT SECTIONでは、報告書をいくつかの「パーツ」に分けて考えます。これを報告集団(ほうこくしゅうだん)と呼びます。主なパーツは以下の通りです。
- REPORT HEADING (RH):報告書の最初の一回だけ出る表紙のような部分です。
- PAGE HEADING (PH):各ページの最初に出る「見出し」です。日付やページ番号を書きます。
- DETAIL (DE):商品の名前や金額など、メインとなる明細データです。
- CONTROL FOOTING (CF):データの区切り(例えば支店ごと)に出る「小計」です。
- PAGE FOOTING (PF):各ページの一番下に出る部分です。
これらのパーツを組み合わせて一枚の報告書が構成されます。パズルのピースを組み合わせて、理想の書類を作る感覚で設計していきます。
4. 明細行(DETAIL)の設計方法
最も重要なパーツが、実際のデータが表示されるDETAIL(明細行)です。ここでは、どのデータをどの位置(何文字目)に表示するかを細かく指定します。COBOLではCOLUMN NUMBERという言葉を使って、「左から20番目に商品名を書く」といった指示を出します。
ここで便利なのが、前回の学習で登場した「編集記述子」をそのまま使えることです。例えば、金額を表示する位置にPIC Z,ZZZ,ZZ9と書いておけば、自動的にコンマが入った見やすい数字で印刷されます。設計図の中に「ここはこの形式で表示してね」と書き込むだけで、データの加工まで終わってしまうのがREPORT SECTIONの凄いところです。
REPORT SECTION.
RD SALES-REPORT
PAGE LIMIT 60.
01 DETAIL-LINE TYPE IS DETAIL.
05 LINE NUMBER IS PLUS 1.
05 COLUMN NUMBER 10 PIC X(20) SOURCE IS ITEM-NAME.
05 COLUMN NUMBER 40 PIC ZZZ,ZZ9 SOURCE IS ITEM-PRICE.
5. 自動計算の魔法!小計と合計の出し方
報告書に欠かせないのが「合計」です。普通なら、データを読み込むたびに数字を足していくプログラムを書きますが、REPORT SECTIONならSUM句(合計句)を使うだけで自動計算が可能です。
例えば、支店コードが切り替わったタイミングで自動的にその支店の売上を合計して表示する、といった指示ができます。これを制御切れ(せいぎょぎれ)と呼びます。コンピュータが「あ、支店コードが変わったな」と判断した瞬間に、計算していた合計値を印刷し、また次の支店のために合計をリセットしてくれます。プログラムが自分で判断してくれるので、計算ミスが起こる心配もありません。
6. 報告書を出力する手順:INITIATE, GENERATE, TERMINATE
設計図ができたら、次はプログラムの実行部分(PROCEDURE DIVISION)で実際に報告書を作ります。ここで使う命令はたったの3種類です。
- INITIATE(イニシエイト):報告書作成の開始を宣言します。合計を0にリセットするなどの準備をします。
- GENERATE(ジェネレート):データを一行分作成します。この命令を出すたびに、必要に応じてページ見出しが出たり、明細が書かれたりします。
- TERMINATE(ターミネート):報告書作成を終了します。最後に全体の合計を印刷して締めくくります。
この3つの命令を呼ぶだけで、複雑な設計図が現実の報告書ファイルとして書き出されます。まるで見えない印刷屋さんに指示を出しているかのような感覚で操作できます。
PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE.
INITIATE SALES-REPORT.
* データの数だけ繰り返すイメージ
GENERATE DETAIL-LINE.
TERMINATE SALES-REPORT.
CLOSE PRINT-FILE.
STOP RUN.
7. 初心者がハマるポイント:行指定のコツ
帳票設計で初心者が一番悩むのが、行の間隔指定です。COBOLではLINE NUMBER IS PLUS 1(今の行から1行下へ)や、LINE NUMBER 10(上から数えて10行目へ)といった書き方をします。
特におすすめなのが「PLUS(相対指定)」です。これを使えば、「前の行から2行あける」といった指定ができるため、全体の行数が変わってもレイアウトが崩れにくくなります。一方、絶対にこの位置にタイトルを書きたい!という時は、具体的な数字で指定します。この「固定」と「相対」を使い分けることが、パソコン初心者でも綺麗な帳票を作るプロのコツです。
8. 報告書作成の全体像を確認しよう
最後に、ここまでの流れを整理しましょう。REPORT SECTIONを使った開発は、まさに「家を建てる」プロセスに似ています。まずRD句で土地(ページ)のサイズを決め、報告集団で部屋(見出しや明細)のレイアウトを描き、最後にGENERATEで実際に建築(出力)していきます。
プログラムのコード自体は少し長く見えるかもしれませんが、一つ一つの部品の意味はとてもシンプルです。一度この型を覚えてしまえば、どんなに複雑なビジネス文書も自由自在に作れるようになります。事務処理の王道であるCOBOLの真髄を、ぜひこのREPORT SECTIONで体感してください!
* 実行結果のイメージ(印刷される内容)
PAGE: 01 DATE: 2026/01/12
----------------------------
商品名 価格
----------------------------
ノートパソコン 150,000
マウス 3,500
キーボード 8,000
----------------------------
ページ合計 161,500