COBOLの帳票出力プログラム例!初心者向け総合サンプル解説
生徒
「先生、今まで習ったCOBOLの知識を使って、実際の仕事で使うような『売上の一覧表』みたいな帳票を作ってみたいです!」
先生
「素晴らしい意欲ですね。帳票出力は、データの読み込み、計算、編集、そして改ページといった、COBOLの重要技術が全て詰まっています。」
生徒
「難しそうですが、一つひとつの部品を組み合わせればできるでしょうか?」
先生
「その通りです。今回は、これまでの学習の集大成として、実務に近い総合的なサンプルプログラムを紹介しますね。」
1. 帳票プログラムの全体像をつかもう
COBOLで帳票(レポート)を作るプログラムは、大きく分けて三つの仕事を担当します。 まず、元となるデータ(ファイル)を一行ずつ読み込むこと。 次に、そのデータを計算したり、見やすいようにカンマを入れたりして整えること。 最後に、紙の端まで来たら新しいページに切り替えて、見出しを印刷することです。
プログラミング未経験の方は、「大きな機械の中に、データという材料を入れて、きれいに印刷された紙が出てくる工場」をイメージしてください。 今回は、以下の機能を盛り込んだプログラムを作ります。
- 見出し(ヘッダー): 各ページの最初にタイトルとページ数を出す。
- 明細(ボディ): 売り上げた商品の名前や金額を並べる。
- 編集: 金額に「¥」や「,(カンマ)」を付けて見やすくする。
- 改ページ制御: 5行ごとに自動で新しい紙へ移る。
- 合計(フッター): 最後に全体の合計金額を表示する。
2. サンプルプログラムの設計図
プログラムを書く前に、どんなデータを使うか決めましょう。 今回は、「商品名」と「単価」という二つの情報が入ったデータを使って、消費税を計算しながら一覧表を作ります。
パソコンを触ったことがない方でも、スーパーのレシートを思い出せば大丈夫です。 レシートには、商品名が並び、最後に合計が出ますよね。それをA4用紙にきれいに並べるのが今回のプログラムの目標です。
3. 帳票出力の総合サンプルプログラム
では、実際のCOBOLコードを見てみましょう。 少し長いですが、一つひとつの命令には意味があります。
IDENTIFICATION DIVISION.
PROGRAM-ID. SALES-REPORT.
DATA DIVISION.
WORKING-STORAGE SECTION.
* --- カウンタ(数えるための箱) ---
01 LINE-CNT PIC 9(02) VALUE 0.
01 PAGE-CNT PIC 9(03) VALUE 0.
01 TOTAL-KINGAKU PIC 9(10) VALUE 0.
* --- テスト用のデータ(本来はファイルから読み込みます) ---
01 TEST-DATA.
05 FILLER PIC X(20) VALUE "リンゴ 00150".
05 FILLER PIC X(20) VALUE "ミカン 00080".
05 FILLER PIC X(20) VALUE "バナナ 00120".
05 FILLER PIC X(20) VALUE "メロン 01500".
05 FILLER PIC X(20) VALUE "スイカ 00800".
05 FILLER PIC X(20) VALUE "イチゴ 00450".
01 TEST-TABLE REDEFINES TEST-DATA.
05 ITEM-LIST OCCURS 6 TIMES.
10 ITEM-NAME PIC X(20).
10 ITEM-PRICE PIC 9(05).
* --- 印刷用の形(お化粧するための箱) ---
01 PRINT-LINE.
05 P-NAME PIC X(20).
05 FILLER PIC X(05) VALUE SPACE.
05 P-PRICE PIC \ZZZ,ZZ9.
01 HEADER-LINE.
05 FILLER PIC X(10) VALUE "売上明細表".
05 FILLER PIC X(15) VALUE SPACE.
05 FILLER PIC X(05) VALUE "PAGE:".
05 P-PAGE PIC ZZ9.
01 FOOTER-LINE.
05 FILLER PIC X(10) VALUE "総合計金額".
05 FILLER PIC X(15) VALUE SPACE.
05 P-TOTAL PIC \$,$$$,$$$,$$9.
01 I PIC 9(02).
PROCEDURE DIVISION.
MAIN-PROCESS.
* 最初のページ準備
PERFORM NEW-PAGE-RTN
* 6つのデータを順番に処理する
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 6
* 5行書いたら改ページ
IF LINE-CNT >= 5 THEN
PERFORM NEW-PAGE-RTN
END-IF
* データの編集
MOVE ITEM-NAME(I) TO P-NAME
MOVE ITEM-PRICE(I) TO P-PRICE
DISPLAY PRINT-LINE
* 合計の計算
ADD ITEM-PRICE(I) TO TOTAL-KINGAKU
ADD 1 TO LINE-CNT
END-PERFORM.
* 最後に合計を表示
MOVE TOTAL-KINGAKU TO P-TOTAL
DISPLAY "-----------------------------------"
DISPLAY FOOTER-LINE.
STOP RUN.
* --- 改ページ処理の部品 ---
NEW-PAGE-RTN.
ADD 1 TO PAGE-CNT
MOVE PAGE-CNT TO P-PAGE
DISPLAY "==================================="
DISPLAY HEADER-LINE
DISPLAY "-----------------------------------"
MOVE 0 TO LINE-CNT.
4. 実行結果の解説
このプログラムを実行すると、パソコンの画面(またはプリンタ)に以下のような結果が出力されます。
===================================
売上明細表 PAGE: 1
-----------------------------------
リンゴ \ 150
ミカン \ 80
バナナ \ 120
メロン \ 1,500
スイカ \ 800
===================================
売上明細表 PAGE: 2
-----------------------------------
イチゴ \ 450
-----------------------------------
総合計金額 $ 3,100
注目してほしいのは、5行目の「スイカ」が終わった後に、もう一度「売上明細表(PAGE: 2)」という見出しが出ている点です。 これが、プログラムで制御した改ページの効果です。 また、数字に「¥」や「,」が付いて、右側にきれいに揃っているのも、COBOLの得意技である編集(へんしゅう)のおかげです。
5. 各パーツの役割を詳しく知ろう
初心者の方がつまずきやすいポイントを整理しました。
PIC ZZZ,ZZ9(ゼロ抑制)
「000150」という数字をそのまま出すと格好悪いですよね。
Zという記号を使うと、頭に付いている不要な「0」を空白にして消してくれます。
これをゼロ抑制(ぜろよくせい)と呼びます。
PERFORM(繰り返し)
同じ作業を何度もやるのはコンピュータの得意分野です。
「見出しを書く」という作業をNEW-PAGE-RTNという名前の部品にしておき、必要なときにPERFORMで呼び出しています。
6. 応用:消費税率や日付を入れるには?
実務では、ここにお知らせや消費税の計算が加わります。
例えば、消費税10%を計算するには、COMPUTEという計算命令を使い、その結果をさらに編集用項目へ代入します。
また、帳票の上部に「2026年1月13日」のような現在の日付を出したい場合は、FUNCTION CURRENT-DATEという機能を使ってコンピュータの時計から情報を取ってきます。
こうした機能を一つずつ足していくことで、本格的な業務システムが出来上がっていきます。
7. 帳票プログラム作成のコツ
最後に、きれいな帳票を作るためのアドバイスです。
- 最初にレイアウトを紙に書く: いきなりコードを書かず、どこに何を出すか方眼紙のようなイメージで設計しましょう。
- 合計金額の桁数に注意: 数千件、数万件のデータを足すと大きな数字になります。合計を貯める箱は大きめに作っておきましょう。
- 改ページは余裕を持って: ギリギリまで詰め込むと、プリンタによっては下の方が切れてしまうことがあります。
COBOLは「事務処理の王様」と言われるだけあって、こうした一覧表を作る力が非常に強力です。 今回紹介したサンプルは基本中の基本ですが、これをマスターすれば、世の中のほとんどの帳票システムの仕組みが理解できるようになりますよ。