■  ワークフィールドWとSの違い


TERMINATIONプロシージャーを使って、なおかつ、 レポートにSEQUENCEを使った場合にカウンター等を表示させると正しくない値が表示される ことがあります。

下記の例はレコード件数を表示させる簡単なサンプルですが、 SEQUNCEを入れた場合と入れない場合で、件数が違って 表示されています。

EX)
//FILEA    DD *          ←INPUTファイル(6件)
991126REC1
991129REC2
991130REC3
991130REC4
991129REC5
991126REC6
//SYSLIN   DD   *
LIST OFF
PARM LIST(NOPARM NOFILE)
FILE FILEA             ←INPUTファイル定義
I-DAY     1  6 N
I-NAME    * 10 A
*
CNT       W  5 P 0 VALUE 0    ←ワークエリアをWタイプで定義
*
JOB INPUT FILEA FINISH LAST-PROC
     CNT = CNT + 1
     PRINT REPT1
LAST-PROC. PROC
     DISPLAY SKIP 2 'LAST-PROC = ' RECORD-COUNT ' ケン'    ←EASYのシステムフィールド(=RECORD-COUNT)
     DISPLAY        '      CNT = ' CNT ' ケン'             ←ユーザー定義のフィールド(=CNT)
END-PROC.
REPORT REPT1 SPACE 1 TITLESKIP 1
*SEQUENCE I-DAY                                            
TITLE 1 '***** TEST *****'
LINE 1 I-DAY I-NAME
TERMINATION. PROC
     DISPLAY        'TERMINATION = ' RECORD-COUNT ' ケン'  ←EASYのシステムフィールド(=RECORD-COUNT)
     DISPLAY        '      CNT = ' CNT ' ケン'             ←ユーザー定義のフィールド(=CNT)
END-PROC.
/*
//

                    ↓実行結果例

<実行結果1>…SEQUENCEをコメントにした場合

 99年12月01日                                         ***** TEST *****   
                                                         I-DAY    I-NAME       
                                                         991126 REC1           
                                                         991129 REC2           
                                                         991130 REC3           
                                                         991130 REC4           
                                                         991129 REC5           
                                                         991126 REC6           
LAST-PROC =           6  ケン         ←全て正しい件数
      CNT =           6  ケン
TERMINATION =         6  ケン
      CNT =           6  ケン


<実行結果2>…SEQUENCEがある場合

LAST-PROC =           6  ケン        ←FINISHでの表示件数は正しいが
      CNT =           6  ケン                                               
 99年12月01日                                         ***** TEST *****   
                                                         I-DAY    I-NAME       
                                                         991126 REC1           
                                                         991126 REC6           
                                                         991129 REC2           
                                                         991129 REC5           
                                                         991130 REC3           
                                                         991130 REC4           
TERMINATION =         4  ケン       ←TERMINATIONでは正しくない件数 
      CNT =           4  ケン 

 

※このような場合は、ワークの定義をでなくにすればOKです。
  SEQUENCE処理するとVFM(EASYの仮想ファイル)を使って処理されますが、 WタイプはVFM上にスプールされますが、SタイプはVFM上にスプールされないという違いがあります。


BEFORE PAGE

TOP PAGE