9 から 11 桁目

演算仕様書の 9 から 11 桁目を使用して、演算が処理される条件を制御する標識 を指定することができます。9 桁目に N を指定して標識の値がオフ ('0') であるかどうかを テストする必要があることを指示することができます。10 から 11 桁目に有効な記入項目は以下のとおり です。
  • 01 から 99
  • H1 から H9
  • MR
  • OA から OG、OV
  • L1 から L9
  • LR
  • U1 から U8
  • KA から KN、KP から KY
  • RT
9 から 11 桁目に使用する標識は、すべて次のタイプの標識の 1 つとして事前に定義 しておかなければなりません。
  • オーバーフロー標識 (ファイル仕様書 OFLIND(標識))
  • レコード識別標識 (入力仕様の 21 から 22 桁目)
  • 制御レベル標識 (入力仕様の 63 から 64 桁目)
  • フィールド標識 (入力仕様の 69 から 74 桁目)
  • 結果標識 (演算仕様書の 71 から 76 桁目)
  • 外部標識
  • LR および MR のようにオンに設定される標識
  • *IN 配列、*IN(xx) 配列要素、または *INxx フィールド (これらの予約語の 1 つを使用して標識を定義する方法については、データとして参照される標識を参照し てください。)

演算を条件付けするために標識がオフでなければならない場合には、9 桁目に N を 入れてください。グループ化された AND/OR 行の標識の他に制御レベル標識 (7 から 8 桁目 に指定される場合) も、図 1 のとおりに演算を実行する前に、 すべてがこの図に示されるとおりに正確に指定されていなければなりません。

図 1. 演算の条件付け (制御レベル標識)
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
 *
C   25
CAN L1              SUB       TOTAL         TOTAL        A 
CL2 10
CANNL3TOTAL         MULT      05            SLSTAX       B 
 *

標識 25 がレコード・タイプを表し、レコード・タイプ 25 が読み取られた 時に制御レベル 2 の切れ目が起こったとします。 L1 と L2 は両方ともオンになっ ています。7 から 8 桁目の制御レベル標識によって条件付けされたすべての演算 は、9 から 11 桁目の制御レベル標識によって条件付けされた演算より前に実行されます。 したがって、 A  の演算の前に  B  の演算が行われます。  A  の演算は、25 によって示される新しい制御グループの最初のレコードに ついて実行されますが、 B  の演算は、前の制御グループのすべてのレコ ードに対して実行される合計演算です。

他の条件が満たされて L2 がオンの時に  B  の演算を実行することが できます。標識 10 はオンでなければならず、L3 標識がオンであってはなりません。

L2 と NL3 の両方によって条件付けされた演算は、制御レベル 2 の切れ目が起 こった時にだけ実行されます。 制御レベル 3 が起こった場合には、L2 もオンにな りますが、その時点ではこの演算は実行したくないため、これら 2 つの標識が同 時に使用されています。

9 から 11 桁目に条件付け標識を使用する場合に知っておく必要があるいくつかの特 別な考慮事項は、次のとおりです。
  • 外部記述ワークステーション・ファイルを使用する場合に、演算仕様書の条件 付け標識は RPG プログラムの中で定義されているか、またはワークステーション ・ファイルの DDS ソース仕様の中で定義されていなければなりません。
  • プログラム記述ワークステーション・ファイルを使用する場合に、そのワー クステーション・ファイルに使用される標識は、RPG プログラムのコンパイル時 には不明です。したがって、標識 01 から 99 が宣言されたものと見なされ、それら の標識を定義せずに演算仕様書の条件付けに使用することができます。
  • 停止標識を使用して、入力データまたは別の演算で指定のエラー条件が見付 かった場合に、プログラムを終了したり、命令が処理されないようにすることが できます。 プログラムは、停止の原因となったレコードが完全に処理されてから停止するの で、停止標識の使用が必要になります。したがって、命令がエラー状態のまま処 理された場合には、結果は誤りとなります。また、停止標識を使用して、エラー が起こった時にだけ実行したい命令を条件付けすることができます。
  • 9 から 11 桁目に LR を指定した場合には、演算は最後のレコードが処理された 後、あるいは LR がオンに設定された後で実行されます。
  • 9 から 11 桁目に制御レベル標識を使用し、7 から 8 桁目を使用しない (明細時の) 場合には、この標識によって条件付けされた演算は、制御の切れ目またはより高 いレベルの制御の切れ目の原因となったレコードに対してだけ実行されます。
  • 7 から 8 桁目に制御レベル標識を指定し (合計時)、9 から 11 桁目に MR を指定し た場合に、MR は、制御の切れ目の原因となった読み取られたばかりのレコードで はなく、前のレコードの突き合わせ条件を指示することになります。 7 から 8 桁目の 制御レベル標識によって条件付けされたすべての演算が実行された後 に、MR は、読み取られたばかりのレコードの突き合わせ条件を指示します。
  • 7 から 8 桁目および 9 から 11 桁目がブランクの場合には、その行に指定された演 算が明細演算時に実行されます。

図 2 から 図 3 までは 、条件付け標識の例を示しています。

図 2. 演算の条件付け (フィールド標識)
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilenameSqNORiPos1NCCPos2NCCPos3NCC.PFromTo++DField+L1M1FrPlMnZr...*
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
 *
 *  Field indicators can be used to condition operations.  Assume the
 *  program is to find weekly earnings including overtime.  The over-
 *  time field is checked to determine if overtime was entered.
 *  If the employee has worked overtime, the field is positive and -
 *  indicator 10 is set on.  In all cases the weekly regular wage
 *  is calculated.  However, overtime pay is added only if
 *  indicator 10 is on.
 *
ITIME      AB  01
I                                  1    7  EMPLNO
I                                  8   10 0OVERTM              10
I                                 15   20 2RATE
I                                 21   25 2RATEOT
CL0N01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++
 *
 *  Field indicator 10 was assigned on the input specifications.
 *  It is used here to condition calculation operations.
 *
C                   EVAL (H)  PAY = RATE * 40
C   10              EVAL (H)  PAY = PAY + (OVERTM * RATEOT)
図 3. 演算の条件付け (レコード識別標識)
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
 *
 *  A record identifying indicator is used to condition an operation.
 *  When a record is read with a T in position 1, the 01 indicator is
 *  set on.  If this indicator is on, the field named SAVE is added
 *  to SUM.  When a record without T in position 1 is read, the 02
 *  indicator is set on.  The subtract operation, conditioned by 02,
 *  then performed instead of the add operation.
 *
IFILE      AA  01    1 CT
I         OR   02    1NCT
I                                 10   15 2SAVE
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
 *
 *  Record identifying indicators 01 and 02 are assigned on the input
 *  specifications.  They are used here to condition calculation
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
C   01              ADD       SAVE          SUM               8 2
C   02              SUB       SAVE          SUM               8 2