1. 導入:なぜFOOTING句が必要なのか?
COBOLで業務システムを開発していると、必ずと言っていいほど「報告書(帳票)作成」のタスクに遭遇します。特に、明細行のあとに合計金額などを印字する際、「明細の途中で改ページされて合計が次のページに飛んでしまった!」といった経験はありませんか?
このような事態を防ぎ、報告書の品質を保つために重要なのが「FOOTING句」です。これを正しく設定することで、合計行のためのスペースを自動的に確保し、レイアウト崩れを防ぐことができます。
2. 基礎知識:FOOTINGとPAGE LIMITの関係
COBOLの報告書作成機能(REPORT SECTION)では、帳票全体の枠組みを「REPORT DESCRIPTION(RD)」で定義します。
ここで重要になるのが「PAGE LIMIT(ページ制限)」と「FOOTING(フッティング)」の設定です。
・PAGE LIMIT:1ページに印字できる最大の行数です。これを超えると自動的に改ページが発生します。
・FOOTING:明細行(DETAIL)が印字できる限界の行数です。
例えば、「PAGE LIMIT 60 FOOTING 55」と設定した場合、56行目から60行目までは「合計行(CONTROL FOOTING)」専用の領域として予約されます。つまり、明細データが56行目に差し掛かろうとすると、COBOL側が「あ、ここは合計行のスペースだから、先に改ページして新しいページで合計を出そう」と判断してくれるのです。
3. 実装/解決策:レイアウト設計の考え方
FOOTING句を設定する際は、以下の計算式を意識しましょう。
「PAGE LIMIT(合計行数)」=「最大行数」
「FOOTING(制御行数)」=「最大行数 - 合計行に割り当てたい行数」
この境界線を適切に設定することで、プログラム側が自動的に改ページを制御してくれるため、複雑なIF文で「残り行数をカウントして改ページを判定する」といった処理を自前で書く必要がなくなります。
4. サンプルプログラム:FOOTING句の実装例
以下は、報告書定義の一部を抜粋した例です。
[コード例]
RD SALES-REPORT
PAGE LIMIT 60
FOOTING 55. / 56行目以降を合計行用スペースとして確保 /
01 TYPE IS PAGE HEADING.
05 LINE 1 COLUMN 1 VALUE “売上報告書”.
01 TYPE IS DETAIL.
05 LINE + 1 COLUMN 5 PIC X(20) SOURCE ITEM-NAME.
05 COLUMN 30 PIC Z(7)9 SOURCE ITEM-PRICE.
01 TYPE IS CONTROL FOOTING SALES-ID.
/ 56行目以降、またはブレイク時にここが印字されます /
05 LINE + 2 COLUMN 5 VALUE “合計:”.
05 COLUMN 15 PIC Z(8)9 SOURCE TOTAL-PRICE.
5. 応用・注意点:現場での落とし穴
ベテランとして一つアドバイスをすると、FOOTING句の値は「余裕を持って設定する」のが鉄則です。
合計行が複数行にわたる場合、ギリギリの行数を指定すると、合計行の途中で強制改ページが発生し、かえって見栄えが悪くなることがあります。合計行に必要な行数+予備の1〜2行分を差し引いた値をFOOTINGに指定するようにしてください。
また、FOOTINGを超えた後の改ページ処理はCOBOLのランタイムが自動で行いますが、明細行の出力ロジックと競合しないよう、REPORT SECTIONの構造をシンプルに保つことも、バグを防ぐコツです。
帳票作成はCOBOLの醍醐味の一つです。ぜひFOOTING句を活用して、読みやすく美しい報告書を作成してください。

コメント