Easytrieve Plus : STARTプロシジャーで入力レコードを参照したら「A010 無効なファイルの参照」エラーが発生した。最初の1件目のレコードかどうかの判断は簡単にできるか?

book

Article ID: 185566

calendar_today

Updated On:

Products

EASYPROCLIB CA Easytrieve Report Generator CA Easytrieve Report Generator for Common Services

Issue/Introduction

Question
STARTプロシジャーで入力レコードを参照したら「A010 無効なファイルの参照」エラーが発生した。最初の1件目のレコードかどうかの判断は簡単にできるか?

Environment

z/OS, MSP, VOS3, IBM, FUJITSU, HITACHI

Resolution

Answer
自動入力の場合、STARTプロシジャーが実行されるときは、まだファイルの入力が行われていません。そのためSTARTプロシジャーで入力エリアを参照すると「A010」エラーになります。1件目のレコ-ドに対する処理は、JOBアクティビィティでシステム定義フィールド RECORD-COUNT で判断して行います。RECORD-COUNTは、入出力されたレコード件数の情報を持つシステム定義フィールドです。

[レコード件数の参照]
[ファイル名 :] RECORD-COUNT

※RECORD-COUNTフィールドは、すべての入出力ファイルに対して、同じフィールド名で生成されます。複数ファイルを取り扱っている場合には、ファイル名で修飾して参照します。

記述例
(例) ファイルの1件目の制御レコードを判断して処理を進める

FILE     FILEA
CNT-CODE     1     1     A
CNT-DATE      4     8     A
CNT-TIME     12     8     A
CODE             1     3     N
NO                  4     5     N
NAME             9   15     A
SURYO         24     4     P 0
*
JOB
IF FILEA:RECORD-COUNT   =   1   AND   CNT-CODE   =   'D'
    STOP
ELSE
    PRINT
END-IF
*
REPORT
TITLE   ‘注文一覧表' +5 CNT-DATE ‘現在'
LINE    CODE NO NAME SURYO

※この例では、1件目のレコードのCNT-CODEの値が「D」であればその時点で処理を終了します。この場合、JOBアクティビティ内で扱っているファイルは1本なので、IF FILEA:RECORD-COUNT  =  1 は、IF RECORD-COUNT  =  1 と記述してもかまいません。
※ファイルの自動入力を行っている場合、1件目のレコ-ドに対する処理をSTARTプロシジャーで実行することはできません。STARTプロシジャーでは、まだファイルの入力は行われていないからです。

参考:
最後のレコードに対する処理をFINISHプロシジャーで実行することはできません。FINISHプロシジャーは自動入力ファイルのEOFを検出してから実行されますが、EOF時にはレコード・エリアは参照できないからです。この場合には、ファイル定義でWORKAREA パラメータを指定します。

Additional Information

Old Japanese Knowledge document ID: JTEC001000