1. 導入:なぜページ制御が必要なのか
COBOLで帳票(レポート)を出力する際、避けて通れないのが「ページ制御」です。例えば、印刷用紙の端ギリギリに文字が印字されてしまったり、ページが変わるたびにヘッダーがずれてしまったりした経験はありませんか?
今回解説する『PAGE LIMIT』と『HEADING』句は、報告書の「余白」と「ヘッダーの開始位置」をシステム側で自動管理するための非常に重要な機能です。これを正しく設定することで、誰が見ても見やすい、プロフェッショナルな報告書を作成できるようになります。
2. 基礎知識:帳票制御の仕組み
COBOLの報告書作成機能(REPORT SECTION)では、紙一枚の中にどれくらいの行数があり、どこからヘッダーを表示するかを定義する必要があります。
・PAGE LIMIT:1ページに印字できる「最大の行数」を指定します。これを超える行を出力しようとすると、自動的に改ページ処理(ページ送り)が行われます。
・HEADING:ページヘッダー(見出し)を出力し始める「行番号」を指定します。
これらを組み合わせることで、「1ページ60行までとし、ヘッダーは1行目から表示する」といった制御が可能になります。
3. 実装と解決策
REPORT SECTIONの定義内にあるRD(Report Description)項目でこれらを記述します。
ここでのポイントは、HEADINGに指定する値は、必ずPAGE LIMITの範囲内である必要があります。また、余白を考慮して、余裕を持った行数設定を心がけるのが現場の鉄則です。
4. サンプルプログラム
以下のコードは、1ページ60行、ヘッダーを1行目から開始する基本的な定義例です。そのままコンパイルのテンプレートとして活用してください。
DATA DIVISION.
FILE SECTION.
FD REPORT-FILE.
01 PRINT-REC PIC X(132).
WORKING-STORAGE SECTION.
REPORT SECTION.
RD MY-REPORT
- ページ全体の最大行数を60行に設定
- ヘッダー(見出し)を1行目から開始するように指定
PAGE LIMIT 60
HEADING 1
FIRST DETAIL 5
LAST DETAIL 55.
01 PAGE-HEADER TYPE PAGE HEADING.
05 LINE 1 COLUMN 1 PIC X(20) VALUE “— 売上報告書 —“.
01 DETAIL-LINE TYPE DETAIL.
05 LINE 1 COLUMN 1 PIC X(10) VALUE “データ出力”.
PROCEDURE DIVISION.
- 実際のプログラムでは、INITIATEやGENERATEを使用して
- 報告書作成処理を制御します。
EXIT PROGRAM.
5. 応用・注意点
現場でよくある失敗は、「ヘッダーの行数」と「DETAIL行の開始位置」の整合性が取れていないことです。
HEADINGで指定した行数と、実際にヘッダー項目で記述するLINE句の行番号が矛盾していると、意図しない場所で改行が発生したり、エラーになったりします。
また、プリンターの物理的なマージン(上下左右の余白)はハードウェアに依存します。システム上のPAGE LIMITを60に設定しても、実際の印刷物では下の数行が切れてしまうこともあります。現場では、余裕を持って「55行程度」を実質的な限界値として運用するのが、トラブルを避けるコツですよ。
ぜひ、この設定を活用して、読みやすい報告書プログラムを構築してくださいね!

コメント