Easytrieve Plus : STOPステートメントとSTOP EXECUTEステートメントとの違いは? PRINTステートメントを実行しているのにレポートが出力されない。 (STOP EXECUTE使用)

book

Article ID: 185567

calendar_today

Updated On:

Products

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

Issue/Introduction

Question
STOPステートメントとSTOP EXECUTEステートメントとの違いは?
PRINTステートメントを実行しているのにレポートが出力されない。(STOP EXECUTE使用)

Environment

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

Resolution

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
        PRINT
        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を使用するのが適切です。

Additional Information

Old Japanese Knowledge document ID: JTEC000995