プログラム記述ファイルでのフェッチ・オーバーフロー・ルーチンの使用

残りの明細、合計、例外、およびオーバーフロー標識によって条件付けられた 見出し行を印刷するために十分なスペースがページ上に残っていない場合には 、フェッチ・オーバーフロー・ルーチンを呼び出すことができます。 このルーチンがオーバーフローを起こします。 オーバーフロー・ルーチンをいつ取り出すかを決めるために、考えられるオーバーフローのすべての状況を 研究してください。 行およびスペースを数えることによって、各明細行、合計行、および例外行で オーバーフローが起こるとどうなるか予測することができます。

フェッチ・オーバーフロー・ルーチンを使用すると、基本 ILE RPG オーバーフロー論理を変更して、ミシン線を超えて印刷が行われるのを防ぎ、ページを可能な限り無駄なく使用することができます。 通常のプログラム・サイクルでは、オーバーフロー標識がオンになっているか、合計出力の直後に コンパイラーによって 1 回だけ検査されます。 フェッチ・オーバーフロー機能を指定した場合には、 フェッチ・オーバーフローが指定されている各行ごとに、コンパイラーによって オーバーフローが検査されます。

図 180 は、フェッチ・オーバーフロー・ルーチンがオンに設定された場合とオフに設定された場合のオーバーフロー印刷の通常の処理を 示したものです。

図 180. オーバーフロー印刷: オーバーフロー標識の設定
 A 
フェッチ・オーバーフローを指定しない時は、すべての出力の後にオーバーフロー行が印刷 されます。オーバーフローがいつ起こるかに関係なく (OA がオン)、オーバーフロー標識 OA は オーバーフローの出力中、オンのままで、見出しと明細出力時の後でオフに なります。
 B 
フェッチ・オーバーフローを指定した時は、オーバーフロー標識 OA がオンの場合、 フェッチ・オーバーフローを指定した出力行の前にオーバーフロー行が 書き出されます。OA がオンに設定された時は、見出しおよび明細出力が終った後でもオンの ままです。オーバーフローが既に感知されてオーバーフロー行が書かれたことがある場合を除いて、 オーバーフロー行がオーバーフロー時に、一瞬の間に書かれることは ありません。

フェッチ・オーバーフローの指定

フェッチ・オーバーフローは、PRINTER ファイルの詳細行、合計行、または例外行のどの出力仕様書にしても、18 桁目 に F を指定します。フェッチ・オーバーフロー・ルーチンは、用紙を自動的に次のページへ 進めることはしません。

出力中、出力行の条件標識は、その行が書き出されるべきものかどうかを判別するかめに テストされます。その行が書き出されるべきもので 18 桁目に F が指定されていると、 コンパイラーはオーバーフロー標識がオンかどうかを判別するために テストします。オーバーフロー標識がオンのときは、オーバーフロー・ルーチンが 取り出され、以下の処理がなされます。

  1. 取り出しが指定されたファイルのオーバーフロー行のみが、出力のために検査 される。
  2. オーバーフロー標識によって条件の設定された、すべての合計行が書き出される。
  3. プリンターが現在処理中の行番号よりも小さい行番号にスキップする指定が、 オーバーフロー標識によって条件設定された行に指定されると、用紙が新しい ページに進む。
  4. オーバーフロー標識によって条件設定された見出し、詳細、および例外行が 書き出される。
  5. オーバーフロー・ルーチンを取り出した行が書き出される。
  6. このプログラム・サイクルに書き出すために残っていた詳細、および合計行があればすべて 書き出される。

各 OR 行の 18 桁目は、オーバーフロー・ルーチンが OR 関係で各レコードに使われるものである 場合は、F でなければなりません。フェッチ・オーバーフローは、オーバーフロー標識が 同じ仕様書行の 21 から 29 桁目で指定されていると使われることはありま せん。その場合は、オーバーフロー・ルーチンは取り出され ません。

フェッチ・オーバーフローの指定例

図 181 は、フェッチ・オーバーフローの使い方を示します。

図 181. フェッチ・オーバーフローの使い方
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+.............................
OPRINTER   H    OA                     3 05
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++
O                                           15 'EMPLOYEE TOTAL'
O          TF   L1                     1
O                       EMPLTOT             25
O          T    L1                     1
O                       EMPLTOT             35
O          T    L1                     1
O                       EMPLTOT             45
O          TF   L1                     1
O                       EMPLTOT             55
O          T    L1                     1
O                       EMPLTOT             65
O          T    L1                     1
O                       EMPLTOT             75
O          T    L1                     1
O*

18 桁目に F がコーディングされている合計行はオーバーフロー・ルーチン を取り出すことができます。 これらの行の印刷の前にオーバーフローが検知された場合にのみ、これを実行 します。 フェッチ・オーバーフローが処理される前に、オーバーフロー標識がオンになっているかどうかを判別する ための検査が行われます。 オンになっている場合には、オーバーフロー・ルーチンが取り出され、 オーバーフロー標識によって条件付けられた見出し行が印刷されて、合計演算が 処理されます。