【COBOL学習|豆知識】[ベテランが教える「PAGE LIMIT無指定」の意外な落とし穴と使い道]

1. 導入:なぜ「PAGE LIMIT」を意識する必要があるのか

COBOLのReport Writer(RW)機能は、帳票作成の強力な味方ですが、記述を怠ると予期せぬ結果を招くことがあります。特に「PAGE LIMIT」の指定は、物理的な帳票を想定している場合、もっとも注意すべき設定の一つです。なぜなら、これを省略するとRWは「改ページという概念がない」と判断し、報告書作成機能の恩恵を一部放棄することになるからです。本稿では、この「PAGE LIMIT無指定時」の挙動と、その正しい活用方法について解説します。

2. 基礎知識:RWにおけるページ制御の仕組み

Report Writerにおいて、RD(Report Description)句で定義される「PAGE LIMIT」は、1ページあたりの行数を制御する非常に重要なパラメータです。
通常、帳票プログラムでは「ページ終了(PAGE FOOTING: PF)」や「ページ開始(PAGE HEADING: PH)」を自動的に呼び出すために、RWが現在の行数をカウントしています。しかし、PAGE LIMITを省略すると、RWは「1ページは無限に続く」と見なし、PFやPHの制御を停止します。これは、プリンタ出力用ではなく、CSVや固定長ファイルのような「電子データ」をRWで構築する際に、あえて利用されるテクニックです。

3. 実装・解決策:意図的に「無指定」にするケース

もし、あなたが「物理帳票」を作ろうとしているのに改ページがされないと悩んでいるなら、RD句に必ず行数を指定してください。逆に、帳票のレイアウト定義機能だけを借用し、後続処理でデータファイルを生成したい場合は、PAGE LIMITを省略することで、不要な改ページコード(改行コードの挿入など)に悩まされることなく、連続したストリームデータとして出力することが可能です。

4. サンプルプログラム

以下に、電子データ作成を想定したRD記述の例を示します。

> 報告書定義(PAGE LIMITを省略することで無限ページモードにする)
RD DATA-FILE-REPORT.
01 TYPE IS PAGE HEADING.
05 LINE 1 PIC X(20) VALUE “HEADER_DATA”.
01 TYPE IS DETAIL.
05 LINE 1 PIC X(20) SOURCE DETAIL-VALUE.

> 手続き部での呼び出しイメージ
PROCEDURE DIVISION.
OPEN OUTPUT TARGET-FILE.
INITIATE DATA-FILE-REPORT.
PERFORM UNTIL END-OF-DATA
MOVE DATA-IN TO DETAIL-VALUE
GENERATE DATA-FILE-REPORT > 改ページなしで延々と出力される
END-PERFORM.
TERMINATE DATA-FILE-REPORT.
CLOSE TARGET-FILE.

5. 応用・注意点:現場で陥りやすいバグ

現場で最も多いトラブルは「帳票が1枚で終わってしまう」「ページごとの集計(PF)が正しく機能しない」という相談です。これらはほぼ間違いなくPAGE LIMITの無指定が原因です。
また、電子データ出力用としてPAGE LIMITを省略する場合でも、ヘッダー情報(PH)が最初の一回しか出力されない点には注意してください。もし、データ量に応じて定期的(例えば1000行ごと)にヘッダーを挟みたい場合は、PAGE LIMITを頼るのではなく、手続き部でカウンタを管理し、意図的に制御するロジックが必要になります。
「楽をするための無指定」か「制御を奪うための無指定」か。この違いを理解して、RWの機能を使いこなしてください。

コメント

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