PRINTER ファイルを使用する時の重要な考慮事項は、ページ・オーバーフロー です。 外部記述 PRINTER ファイルの場合には、ページ・オーバーフローの処理はユー ザーの責任で行ってください。 次の 1 つを実行します。
プログラム記述または外部記述ファイルの場合には、ファイル仕様書に キーワード OFLIND (オーバーフロー標識) を使用して標識 *IN01 〜 *IN99 を指定することができます。 この標識は、行がオーバーフロー行に印刷されるか、あるいは 行送り操作またはスキップ操作中にオーバーフロー行に達したか、これを超えた時 に、オンに設定されます。 標識を使用して、オーバーフロー条件への応答を 条件付けることができます。 この標識は、オーバーフロー標識 (*INOA - *INOG、*INOV) が実行するような 、RPG オーバーフロー論理を条件付けしません。 標識をオフに 設定することはユーザーの責任です。
プログラム記述と外部記述の両方のファイルの場合には、行番号およびページ 番号は、ファイルの INFDS のプリンター・フィードバック・セクションで使用可能 です。 この情報をアクセスするためには、 ファイル仕様書に INFDS キーワードを指定してください。 この仕様書では、367 〜 368 桁目に行番号を定義し、データ構造の 369 〜 372 桁目に ページ番号を定義してください。 行番号とページ番号の両方のフィールドとも、小数部を持たない 2 進数として定 義しなければなりません。 INFDS はプリンター・ファイルに対するすべての出力操作の後に更新されるので、 これらのフィールドを使用して、プログラム中に行カウントの論理をもたずに 現在の行およびページ番号を判別することができます。
プログラム記述 PRINTER ファイルの場合には、以下の項で説明する オーバーフロー標識およびフェッチ・オーバーフロー・ルーチン論理が 適用されます。
オーバーフロー標識 (OA 〜 OG、OV) は、ページの最後の行を印刷、または 超えた時にオンに設定されます。 オーバーフロー標識を使用して、次のページに印刷する行を指定することがで きます。 オーバーフロー標識は、プログラム記述 PRINTER ファイルの場合にだけ指定す ることができ、主に見出し行の印刷を条件付けるために使用されます。 オーバーフロー標識は、出力仕様書に OFLIND キーワードを使用して指定され 、演算仕様書 (9 〜 11 桁目) および出力仕様書 (21 〜 29 桁目) の命令を条件付 けるために使用することができます。 オーバーフロー標識が指定されていない場合には、コンパイラーが最初の未使 用のオーバーフロー標識を PRINTER ファイルに割り当てます。 オーバーフロー標識は、演算仕様書の結果の標識 (71 〜 76 桁目) として 指定することもできます。
コンパイラーは、ページでオーバーフロー状態が最初に起こった時点でのみオーバーフロー標識をオンに 設定します。以下の 1 つが起こった場合には必ず、オーバーフロー条件ということになります。
表 41 には、ファイル仕様書および出力仕様書で、 オーバーフロー標識がある場合またはない場合の結果が示してあります。
以下の考慮事項は出力仕様書で使用するオーバーフロー標識に適用されます。
ファイル仕様書の桁 44 〜 80 | 出力仕様書の桁 21 〜 29 | 処置 |
---|---|---|
記入なし | 記入なし | 未使用の最初のオーバーフロー標識がオーバーフロー時の 次ページへのスキップの条件付けに使用されます。 |
記入なし | 記入 | コンパイル時のエラー。オーバーフロー標識が出力仕様書から 脱落しています。 未使用の最初のオーバーフロー標識がオーバーフロー時の 次ページへのスキップの条件付けに使用されます。 |
OFLIND(標識) | 記入なし | 連続印刷中。オーバーフローは認識されません。 |
OFLIND(標識) | 記入 | 通常のオーバーフロー処理。 |
図 178 には、すべてのページへの見出しの印刷に必要なコーディングの例が 示されています。1 ページ目、すべてのオーバーフロー・ページ、および制御フィールドの変更 (L2 がオン) の ために開始される各改ページ。 最初の行によって、オーバーフローが起こった (OA がオンで L2 がオンでない) 時にのみ、 見出しを新しいページの最上部 (06 にスキップ) に印刷することができます。
2 行目では、新制御グループの始め (L2 がオン) でのみ新しいページに見出し を印刷することができます。 この方法では、L2 と OA の両方がオンになることに よって発生する重複見出しは起こりません。 2 行目によって、制御フィールドが レコードで指定されている場合には、最初のレコードは常に制御の 切れ目となる (L2 をオンにする) ので、最初のレコード が読み取られた後に、見出しを 1 ページ目に印刷することができます。
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+............................. OPRINT H OANL2 3 6 O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++ O OR L2 O 8 'DATE' O 18 'ACCOUNT' O 28 'N A M E' O 46 'BALANCE' O*
図 179 には、すべてのページに一定のフィールドを印刷する ために必要なコーディングを示してあります。この場合には、オーバーフロー 条件または制御レベルの変更 (L2) で 06 へのスキップが行われます。 NL2 標識は、同じサイクルで行の印刷またはスキップが 2 回行われないよう にするものです。
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+............................. OPRINT D OANL2 3 6 O OR L2 O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++ O ACCT 8 O*
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.