1. 導入:なぜ「LAST DETAIL 句」が重要なのか
COBOLの報告書作成機能(REPORT SECTION)を使用する際、最も頭を悩ませるのが「ページ制御」です。特に、明細行をどこまで出力し、どのタイミングで改ページしてページ脚書き(PAGE FOOTING)を出すかという制御は、帳票の美しさを左右します。この「LAST DETAIL 句」を適切に設定することで、ページ下部の余白を確保し、意図しない場所での改ページや、フッターの欠落を防ぐことができます。
2. 基礎知識:REPORT SECTION とページ制御
COBOLの報告書作成機能は、あらかじめレイアウトを定義しておくことで、改行やページ制御をコンパイラが自動で行ってくれる強力な仕組みです。
ここで重要になるのが「PAGE LIMIT」と「LAST DETAIL」の関係です。
PAGE LIMITは、1ページに印字できる物理的な行数の最大値です。
LAST DETAILは、その名の通り「明細行(DETAIL)を出力できる最後の行番号」を指します。
もし、LAST DETAILで指定した行数を超えて明細を出力しようとすると、プログラムは自動的に「これ以上明細は載せられない」と判断し、PAGE FOOTING(ページ脚書き)を印字して改ページを行います。
3. 実装/解決策:適切な設計の考え方
現場の設計では、まず「1ページの合計行数」から「ページヘッダ・ページフッター・合計行の占有行数」を引き算します。その残った範囲内で、明細が綺麗に収まるようにLAST DETAILを決定するのがコツです。
例えば、PAGE LIMITを60行とした場合、50行目までを明細用と定めれば、残りの10行分(51~60行)を合計欄やフッターのために確保できます。これにより、明細がフッターと重なって印字される事故を確実に回避できます。
4. サンプルプログラム
以下は、A4用紙を想定した基本的な報告書定義の例です。
REPORT SECTION.
RD LIST-REPORT
PAGE LIMIT 60
/ 明細は50行目まで出力可能。それ以降は自動的にFOOTINGへ遷移 /
LAST DETAIL 50.
01 TYPE PAGE HEADING.
05 LINE 1 COLUMN 1 PIC X(20) VALUE ‘売上報告書’.
01 TYPE DETAIL.
05 LINE PLUS 1 COLUMN 1 PIC X(10) VALUE ‘商品データ’.
01 TYPE PAGE FOOTING.
/ 明細が50行を超えるとここが印字される /
05 LINE 55 COLUMN 1 PIC X(10) VALUE ‘— 続く —‘.
5. 応用・注意点:現場で陥りやすい罠
現場でよくある失敗は、「LAST DETAIL を PAGE LIMIT と同じ値にしてしまうこと」です。
これをしてしまうと、ページギリギリまで明細が印字され、ページ脚書き用の行が確保できなくなります。特に、ページフッターに「小計」や「ページ合計」を出力する設計の場合、その行数分を考慮してLAST DETAILを短めに設定するのが鉄則です。
また、プリンタの物理的な印字可能領域と、帳票設計上の行数が一致しているかを確認することも忘れないでください。ベテランの技としては、あえてLAST DETAILを少し余裕を持って設定し、帳票に「余白」を作ることで、読み手に優しいレイアウトを心がけるのが良いでしょう。

コメント