制御レベル標識 (L1 から L9)

制御レベル標識は、入力仕様書の 63 から 64 桁目の記入項目によって定義され、 ある入力フィールドを制御フィールドとして指定するものです。 これは、次に、演算および出力命令を条件付けするために使用することができま す。 有効な制御レベル標識は L1 から L9 です。

制御レベル標識は、ある入力フィールドを制御フィールドとして指定するもの です。 制御フィールドが読み取られると、制御フィールドのデータは、前のレコードか らの同じ制御フィールドのデータと比較されます。 データが異なっている場合に は、制御の切れ目が起こり、この制御フィールドに割り当てられた制御レベル標 識がオンに設定されます。 次に、制御レベル標識を使用して、制御フィールドに同じ 情報が入っているすべ てのレコードが読み取られた時にだけ処理されるように、命令を条件付けするこ とができます。 標識は、合計と最初の明細の両方の時点でオンになったままであ るため、合計印刷 (制御グループの最後のレコード) および明細印刷 (制御グル ープの最初のレコード) の条件付けにも使用することができます。 制御レベル標 識は、次のレコードが読み取られる前にオフに設定されます。

制御フィールドが入っている最初のレコードが 読み取られた後で、制御の切れ 目が起こる可能性があります。 このレコードの制御フィールドは、16 進数のゼロが入って いる記憶域内の区域と 比較されます。 2 つの異なるレコードからのフィールドが比較されているわけで はないので、このサイクルの合計演算および合計出力命令は回避されます。

制御レベル標識は、その重要度の順に、最低の L1 から最高の L9 までランク づけされます。 制御の切れ目の結果としてより高いレベルの標識がオンに設定 されると、それより低いレベルのすべての標識がオンに設定されます。 ただし、より 低いレベルの標識は、定義されている場合にしかプログラム中で使 用することができません。 例えば、制御の切れ目によって L8 がオンに設定された 場合には、L1 から L7 もオンに設定されます。 LR (最終レコード) 標識は、入力ファイルがファイル の終わりになった時にオンに設定されます。 LR は最高レベルの標識と見なされ、 L1 から L9 も強制的にオンに設定されます。

制御レベル標識は、レコード識別標識または結果の標識として定義することも できます。 この方法で制御レベル標識を使用した場合には、高いレベルの標識が オンに設定されても、それより低いレベルの標識の状況は変更されません。 例えば、L3 が結果の標識として使用されている場合には、L3 がオンに設定さ れても、L2 および L1 の状況は変わりません。

他のフィールドとの関係での制御フィールドの重要度に よって、制御レベル標 識を割り当ている方法が決まります。 例えば、小計を必要とするデータには、最 終合計を必要とするデータより低い制御レベル標識が必要です。 各部門の従業員 をグループ分けする場合に、部門番号が入っている制御フィールドには、従業員 番号が入っている制御フィールドより高い制御レベル標識が必要です (図 11 を参照)。

制御レベル標識に関する規則

制御レベル標識を割り当ている場合には、以下の点に留意してください。

図 13 は、このような不要な制御の切れ目を防ぐ方法例を示し ています。

図 11. 制御レベル標識 (2 つのレコード・タイプ)
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
A* EMPLOYEE MASTER FILE -- EMPMSTL
A          R EMPREC                    PFILE(EMPMSTL)
A            EMPLNO         6
A            DEPT           3
A            DIVSON         1
A*
A*                 (ADDITIONAL FIELDS)
A*
A          R EMPTIM                    PFILE(EMPMSTP)
A            EMPLNO         6
A            DEPT           3
A            DIVSON         1
A*
A*                 (ADDITIONAL FIELDS)
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
 *
 *  In this example, control level indicators are defined for three
 *  fields.  The names of the control fields (DIVSON, DEPT, EMPLNO)
 *  give an indication of their relative importance.
 *  The division (DIVSON) is the most important group.
 *  It is given the highest control level indicator used (L3).
 *  The department (DEPT) ranks below the division;
 *  L2 is assigned to it.  The employee field (EMPLNO) has
 *  the lowest control level indicator (L1) assigned to it.
 *
IEMPREC        10
I                                          EMPLNO        L1
I                                          DIVSON        L3
I                                          DEPT          L2
 *
 *  The same control level indicators can be used for different record
 *  types.  However, the control fields having the same indicators must
 *  be the same length.  For records in an externally described file,
 *  the field attributes are defined in the external description.
 *
IEMPTIM        20
I                                          EMPLNO        L1
I                                          DEPT          L2
I                                          DIVSON        L3
図 12. オーバーラップする制御フィールド
REQTEXT
図 13. 不要な制御の切れ目を防ぐ方法
REQTEXT
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
ISALES         01
I                                  1    2  L2FLD         L2
I                                  3   15  NAME
IITEM          02
I                                  1    2  L2FLD         L2
I                                  3    5  L1FLD         L1
I                                  6    8  AMT
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
 *  Indicator 11 is set on when the salesman record is read.
 *
C   01              SETON                                        11
 *
 *  Indicator 11 is set off when the item record is read.
 *  This allows the normal L1 control break to occur.
 *
C   02              SETOFF                                       11
C   02AMT           ADD       L1TOT         L1TOT             5 0
CL1   L1TOT         ADD       L2TOT         L2TOT             5 0
CL2   L2TOT         ADD       LRTOT         LRTOT             5 0
 *
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+...........................
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat
OPRINTER   D    01                  1  1
O                       L2FLD                5
O                       NAME                25
O          D    02                     1
O                       L1FLD               15
O                       AMT           Z     15
 *
 *  When the next item record causes an L1 control break, no total
 *  output is printed if indicator 11 is on.  Detail calculations
 *  are then processed for the item record.
 *
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+...........................
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat
O          T    L1N11               1
O                     L1TOT           ZB    25
O                                           27 '*'
O          T    L2                  1
O                     L2TOT           ZB    25
O                                           28 '**'
O          T    LR                  1
O                     LRTOT           ZB    25
REQTEXT

レコード・タイプが異なっていても、通常は同数の制御フィールドがあります 。しかし、アプリケーションによっては、一部のレコードに異なる数の制御フィールドが 必要な場合があります。

販売担当者レコードには、L2 の制御フィールドしかありません。 品目レコード には、L1 と L2 の両方の制御フィールドがあります。 通常の RPG IV のコーディングでは、販売担当者レコードに続く最初の品目レコードに よって不要な制御の切れ目が生じます。 これは、販売担当者レコードの直後の L1 の制御の切れ目によって認識され、その結果、販売担当者レコードの下の行に アスタリスクが印刷されます。

分割制御フィールド

入力レコード中の複数のフィールドに同じ制御レベル標識を割り当ていると、分 割制御フィールドが形成されます。 プログラム記述ファイルの場合には、同じ制 御レベル標識を持つフィールドは入力仕様書に指定された順序でプログラムによ って結合され、単一の制御フィールドとして取り扱われます (図 14 を参照)。 最初に定義されたフィールドは、制御フィールドの高位 (左端) 位置に入れら れ、最後に定義されたフィールドは、制御フィールドの低位 (右端) 位置に入 れられます。

図 14. 分割制御フィールド
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
IMASTER        01
I                                 28   31  CUSNO         L4
I                                 15   20  ACCTNO        L4
I                                 50   52  REGNO         L4

外部記述ファイルの場合には、同じ制御レベル標識を持つフィールドは、その フィールドが入力仕様書に指定された順序ではなく、データ記述仕様 (DDS) に記 述されている順序で結合されます。 例えば、DDS に次のフィールドが次の順序で指定されているとします。

また、これらのフィールドが、入力仕様書で次の順序により同じ制御レベル標 識を持つように指定されているとします。

フィールドは EMPNO DPTNO REGNO の順序で結合されて分割制御フィールドが構 成されます。

分割制御フィールドについては、次のような特別な規則があります。

図 15 は、これらの規則の例を示しています。

図 15. 分割制御フィールド-特別な規則
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
IDISK      BC  91   95 C1
I         OR   92   95 C2
I         OR   93   95 C3
I
 * All portions of the split control field must be assigned the same
 * control level indicator and all must have the same field record
 * relation entry.
I                                  1    5  FLD1A         L1
I                                 46   50  FLD1B         L1
I                                 11   13  FLDA          L2
I                                 51   60  FLD2A         L3
I                                 31   40  FLD2B         L3
I                                 71   75  FLD3A         L4  92
I                                 26   27  FLD3B         L4  92
I                                 41   45  FLD3C         L4  92
I                                 61   70  FLDB              92
I                                 21   25  FLDC              92
I                                  6   10  FLD3D         L4  93
I                                 14   20  FLD3E         L4  93

95 桁目の 1 で識別されるレコードには、次の 2 つの分割制御フィールドがあ ります。

  1. FLD1A および FLD1B
  2. FLD2A および FLD2B

95 桁目の '2' で識別されるレコードには、次の 3 つの分割制御フィールドがあ ります。

  1. FLD1A および FLD1B
  2. FLD2A および FLD2B
  3. FLD3A、FLD3B、および FLD3C

95 桁目の '3' で識別される 3 番目のレコード・タイプにも、次の 3 つの分割制 御フィールドがあります。

  1. FLD1A および FLD1B
  2. FLD2A および FLD2B
  3. FLD3D および FLD3E