導入:なぜ今、RD句を見直すのか
COBOLでの帳票出力において、多くの現場でベタ書きのWRITE制御や複雑なページ制御ロジックが散見されます。しかし、保守性の観点から見れば、これは「改修のたびにバグを埋め込むリスク」を抱えているのと同じです。RD(Report Description)句を正しく活用すれば、ヘッダー、フッター、集計行の制御をCOBOLコンパイラの機能に任せることができ、ビジネスロジックと出力形式を明確に分離することが可能です。本稿では、帳票定義の要となるRD句の活用法を解説します。
基礎知識:RD句の役割と仕組み
RD句は、REPORT SECTION(報告書節)の最上位に位置し、帳票の「器」を定義するものです。FD句で「REPORT IS 報告書名」を指定することで、ファイルと帳票定義が紐付けられます。
RD句で指定できる主な属性には以下があります。
PAGE LIMIT:1ページあたりの行数を決定します。
HEADING:ヘッダーの開始行を指定します。
FIRST DETAIL:最初の明細行の開始位置を指定します。
LAST DETAIL:明細行の終了位置を指定します。
FOOTING:フッターの終了位置を指定します。
これらを定義することで、ページ制御の複雑なカウンタロジックを自前で実装する必要がなくなります。
実装・解決策:RD句の構成
RD句を使用する際は、DATA DIVISION内のREPORT SECTIONに記述します。以下の手順で定義を行います。
1. FD句でREPORT句を記述し、帳票名と紐付ける。
2. REPORT SECTIONでRD句を記述し、ページレイアウトを定義する。
3. 報告書作成用の命令(INITIATE, GENERATE, TERMINATE)を使用して出力する。
サンプルプログラム:RD句を用いた帳票定義例
以下は、一般的な66行の帳票を定義する基本構造です。
IDENTIFICATION DIVISION.
PROGRAM-ID. REPORT-SAMPLE.
ENVIRONMENT DIVISION.
FILE-CONTROL.
SELECT PRINT-FILE ASSIGN TO PRINTER.
DATA DIVISION.
FILE SECTION.
FD PRINT-FILE
REPORT IS MY-REPORT. / 帳票定義と紐付け /
WORKING-STORAGE SECTION.
REPORT SECTION.
RD MY-REPORT
PAGE LIMIT IS 66 LINES / 1ページ66行 /
HEADING 1
FIRST DETAIL 5
LAST DETAIL 60.
01 PAGE-HEADER TYPE PAGE HEADING.
05 LINE 1 COLUMN 1 PIC X(20) VALUE “売上報告書”.
01 DETAIL-LINE TYPE DETAIL.
05 LINE PLUS 1 COLUMN 1 PIC X(10) SOURCE DATA-VAL.
PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE.
INITIATE MY-REPORT. / 帳票処理開始 /
/ ここでレコードを読み込みGENERATEを繰り返す /
GENERATE DETAIL-LINE.
TERMINATE MY-REPORT. / 帳票処理終了 /
CLOSE PRINT-FILE.
STOP RUN.
応用・注意点:現場で陥りやすい罠
RD句を使用する際、最も注意すべきは「ロジックのブラックボックス化」です。コンパイラが自動でページ制御を行うため、複雑な条件での改ページが必要な場合、制御が難しくなることがあります。
また、出力される帳票のレイアウトが固定されがちであるため、多言語対応や可変レイアウトが求められる帳票には不向きな場合があります。
現場では、REPORT SECTIONを記述する際の「行位置(LINE番号)」と「絶対位置・相対位置(PLUS指定)」の混在に注意してください。特にPLUS指定は、前の行からの相対的な行数となるため、意図しない改ページを引き起こすバグの温床になります。まずはシンプルな帳票から導入し、制御ロジックを整理することをお勧めします。

コメント