【COBOL学習|豆知識】COBOLのReport Writer機能で帳票設計を自動化する「PAGE LIMIT句」の活用術

導入

帳票出力プログラムを作成する際、もっとも煩雑な処理の一つが「行数カウントと改ページ制御」です。行を数え、規定数に達したらヘッダーを出力し、ページ番号をインクリメントし……といった処理を自前で実装するのはミスが起きやすく、コードも冗長になりがちです。COBOLのReport Writer機能における「PAGE LIMIT句」を活用すれば、これらの面倒な制御をコンパイラに任せることができ、保守性の高いコードを実現できます。

基礎知識

Report Writer機能は、COBOLの標準機能の一つで、帳票のレイアウト定義をデータ部(Report Section)に分離して記述する仕組みです。その中で「PAGE LIMIT句」は、報告書1ページあたりの物理的な行数を決定する重要な設定です。この句を指定することで、システムは自動的に行数をカウントし、指定した行数を超えたタイミングで自動的に「改ページ(PAGE HEADINGやPAGE FOOTINGの出力)」を実行してくれます。また、組み込み変数である「PAGE-COUNTER」と連携し、ページ番号の管理も自動化されます。

実装/解決策

Report Writerを使用するには、以下の手順が必要です。
1. FD句でREPORT句を指定する。
2. Report SectionでRD(Report Description)を記述し、その中でPAGE LIMIT句を指定する。
3. 制御部(Procedure Division)でINITIATE、GENERATE、TERMINATE命令を使用して出力を行う。

PAGE LIMIT句を指定する際は、単に行数だけでなく、必要に応じて「HEADING」「FIRST DETAIL」「LAST DETAIL」「FOOTING」といった境界行を指定することで、より詳細な帳票レイアウトを制御可能です。

サンプルプログラム

以下は、1ページあたり10行で改ページを行うシンプルな帳票定義の例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. REPORT-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRINT-FILE ASSIGN TO “REPORT.TXT”.

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

REPORT SECTION.
RD MY-REPORT

  • 1ページを10行に制限します

PAGE LIMIT IS 10 LINES.

01 TYPE PAGE HEADING.
05 LINE 1 COLUMN 1 VALUE “— ページ見出し —“.

01 TYPE DETAIL.
05 LINE PLUS 1 COLUMN 1 PIC X(20) SOURCE MY-DATA.

01 TYPE PAGE FOOTING.

  • PAGE-COUNTERにより自動でページ番号が出力されます

05 LINE 10 COLUMN 60 VALUE “PAGE “.
05 COLUMN 65 PIC Z9 SOURCE PAGE-COUNTER.

PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE.
INITIATE MY-REPORT.

  • GENERATE命令で自動的に行数管理が行われます

MOVE “データ行1” TO MY-DATA.
GENERATE MY-DETAIL.

TERMINATE MY-REPORT.
CLOSE PRINT-FILE.
STOP RUN.

応用・注意点

現場での注意点として、PAGE LIMITで指定した行数と、実際に印刷する行間(LINE句)の整合性に注意してください。特に「LAST DETAIL」句を併用する場合、詳細行が最終行の行数指定を超えてしまうと、予期せぬ改ページが発生したり、レイアウトが崩れたりすることがあります。

また、Report Writerは非常に強力ですが、既存のロジックをすべてReport Writerに書き換えるのは工数がかかります。まずは、定型的な一覧表の出力など、改ページ制御が頻発する箇所から部分的に導入してみるのが、ベテラン技術者としての賢い進め方です。この機能を使いこなせれば、帳票プログラムの行数は大幅に削減できるはずですよ。

コメント

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