【COBOL学習|実務向け】COBOL帳票作成の効率化:PAGE-COUNTER特殊レジスタを使いこなす

導入

帳票出力プログラムを作成する際、もっとも煩雑な作業の一つが「ページ番号の管理」です。行数を数え、改ページ条件でカウントアップし、ゼロパディングして印字する……これらをすべて自前のカウンタ変数で管理すると、ロジックが複雑化し、バグの温床になりがちです。COBOLには、この面倒な処理を自動化してくれる「PAGE-COUNTER」という便利な特殊レジスタが用意されています。今回は、この機能を活用して、保守性の高い帳票ロジックを組む方法を解説します。

基礎知識

PAGE-COUNTERは、REPORT SECTION(報告書作成機能)を使用する際に自動生成される特殊レジスタです。REPORT SECTIONは、帳票のヘッダーやフッター、詳細行のレイアウトを定義する機能で、PAGE-COUNTERはその中の「ページ番号」を保持します。

システムが改ページを検知すると、自動的にPAGE-COUNTERの値がインクリメントされます。開発者はカウントアップのロジックを書く必要はなく、単に出力レイアウトの定義に組み込むだけで、常に正しいページ番号を表示できる仕組みです。

実装/解決策

PAGE-COUNTERを利用するには、REPORT SECTION内で定義を行う必要があります。
1. RD(REPORT DESCRIPTION)句でレポート名を定義。
2. その配下のヘッダー行(PAGE HEADING)などで、PAGE-COUNTERを参照するようにSOURCE句を指定。
3. 手順部(PROCEDURE DIVISION)でINITIATE、GENERATE、TERMINATE命令を使用してレポートを制御。

これだけで、COBOLコンパイラが自動的にページ管理を行ってくれます。

サンプルプログラム

以下のコードは、REPORT SECTIONを用いた基本的なページ番号印字の例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. PAGE-TEST.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRINT-FILE ASSIGN TO DISPLAY.

DATA DIVISION.
FILE SECTION.
FD PRINT-FILE REPORT IS REP-FILE.

WORKING-STORAGE SECTION.
01 WS-EOF-FLG PIC X VALUE ‘N’.

REPORT SECTION.
RD REP-FILE
PAGE LIMIT 20 LINES
HEADING 1
FIRST DETAIL 5.

01 TYPE PAGE HEADING.
05 COLUMN 10 PIC X(05) VALUE ‘PAGE:’.

  • PAGE-COUNTERをSOURCE句に指定するだけで自動的にページ番号が印字されます

05 COLUMN 16 PIC ZZZ9 SOURCE IS PAGE-COUNTER.

01 TYPE DETAIL.
05 COLUMN 1 PIC X(20) VALUE ‘DATA LINE CONTENT’.

PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE.
INITIATE REP-FILE.

  • GENERATEを繰り返すと自動で改ページとページ加算が行われます

PERFORM 30 TIMES
GENERATE REP-FILE
END-PERFORM.
TERMINATE REP-FILE.
CLOSE PRINT-FILE.
STOP RUN.

応用・注意点

現場で活用する際のポイントをいくつか挙げます。

1. 明示的なリセットは不要だが注意が必要
PAGE-COUNTERはREPORT SECTIONのINITIATE実行時に自動的に1に初期化されます。しかし、プログラム内で一度に複数のレポートを扱う場合や、サブルーチン化している場合は、どのRDのPAGE-COUNTERを参照しているか混乱しないよう注意してください。

2. ページ番号の加工
SOURCE句で参照する際、PICTURE句を工夫することで「PAGE: 001」といったゼロ埋めや、「ページ:1」といった日本語と組み合わせた表示も自由自在です。

3. 制限事項の確認
古いコンパイラや特定のベンダー固有の仕様により、PAGE-COUNTERの最大値(桁数)が制限されている場合があります。膨大なページ数になる帳票の場合は、念のため仕様書の桁数を確認してください。

手動でカウンタを管理するコードは、改ページ条件の変更時に修正漏れが発生しやすいものです。ぜひREPORT SECTIONとPAGE-COUNTERを積極的に活用し、堅牢な帳票ロジックを構築してください。

コメント

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