Answer
STOPステートメントとSTOP EXECUTEステートメントとでは終了処理が異なります。
STOP ステートメントで終了の指示をすると、FINISHプロシジャーを実行してからそのJOBの処理を終了し、複数JOBの場合は次のJOBの実行を開始します。 STOPEXECUTEで終了の指示をすると、その場ですべての処理を終了するのでFINISHプロシジャーも、後続のJOBも実行されません。また、VFMを経由するレポートも出力されません。(VFMを経由するレポートとは、SEQUENCE処理のあるレポート、または複数レポート機能を使用した2番目以降のレポ-トです。)
<STOPステートメントの場合> <STOP EXECUTEステートメントの場合>
JOB1 JOB1
JOBアクティビティ処理 JOBアクティビティ処理
~ ~
STOPステートメント実行 →→ FINISH処理前へ STOP EXECUTEステートメント実行 →→ 即時、全処理終了
(JOB1、JOB2全て終了)へ
~ ~
↓ ↓
FINISH処理 FINISH処理
↓ ↓
REPORT処理 REPORT処理
↓ ↓
JOB1の全処理終了 JOB1の全処理終了
↓ ↓
JOB2 JOB2
↓ ↓
終 了 終 了
記述例
(例) 自動入力をしない場合STOPとSTOP EXECUTEを使い分ける
FILE FILEA VS
~
JOB INPUT NULL FINISH FINAL-RTN
GET FILEA STATUS
DO WHILE NOT EOF FILEA
IF FILE-STATUS NOT ZERO
DISPLAY ‘入力エラー FILE-STATUS =' FILE-STATUS
STOP EXECUTE
END-IF
IF FIELDA SPACE
CNT = CNT + 1
END-IF
END-DO
STOP
*
FINAL-RTN. PROC
DISPLAY ‘正常終了 ' CNT '件出力'
END-PROC
*
REPORT
SEQUENCE CODE
TITLE '*** チェック・リスト ***'
LINE CODE NAME SURYO DATE
※このような処理の場合、STOP EXECUTEで終了するとFINISHプロシジャーは実行されず、レポートは出力されません。(SEQUENCE処理があり、VFMを経由しているため。) しかしながら、STOPで終了した場合にはFINISHプロシジャーは実行されレポートも出力されます。
STOP/STOP EXECUTEの使い分けとして、自動入力しない場合やファイルの件数は多いが処理するデータが限られているというような場合の途中で、打ち切っても正常処理としたい時はSTOP処理を、また、継続しても意味を持たない処理を無効にするような時は、STOP EXECUTEを使用するのが適切です。