RPG

31.伝票番号の自動発生サブルーチン

伝票番号の自動発生には、コントロール・レコードを作成して、これから1つづつ
連続番号をカウントアップする方法が見受けられる。
しかし、複数のユーザーの同時入力や、入力プログラムが途中でダウンしたような場合は、
コントロールの手修正が必要となる。
どのような不足の事態が発生しても、確実に次の番号を発生させる手段はないだろうか?
ここで紹介するサブルーチンは、データベースから最後の番号を読み取ってカウントアップする方法である。

0001.00     +C*( DENNO   の自動発生  )
0002.00      C                     EXSR HASEI
0003.00     +C*( CF12 )- 前画面
0004.00      C           *IN12     IFEQ '1'                        CF12
0005.00      C                     SETOF                     12
0006.00      C*    未使用の DMY-RECORD を削除
0007.00      C                     EXSR DMYDEL
0008.00      C                     GOTO START
0009.00      C                     END                             CF12
0010.00      C******************************************************
0011.00      C           HASEI     BEGSR
0012.00      C******************************************************
0013.00      C*( 伝票番号の自動発生 )
0014.00      C*----------------------------------------------------*
0015.00      C*( ?FIELD :                 :  自動発生              |
0016.00      C*----------------------------------------------------*
0017.00      CSR         DENNO     IFEQ *BLANKS
0018.00      CSR         DENNO     OREQ *ZEROS
0019.00      CSR         *HIVAL    SETGTFILE
0020.00      CSR                   SETOF                     50
0021.00      CSR                   READPFILE                     50
0022.00      CSR 50                Z-ADD1         NXTNO   80
0023.00      CSRN50                MOVE DENNO     NXTNO
0024.00      CSRN50                ADD  1         NXTNO
0025.00      CSR                   MOVE NXTNO     DENNO
0026.00      C*( 複数同時入力用 DUMMY-RECORD 出力 )
0027.00      C*    他の W/S から入力されると次の番号が与えられるように
0028.00      CSR                   MOVE *ZEROS    GYO 
0029.00      CSR         *NOKEY    CLEARFFILRCD
0030.00      C*----------------------------------------------------*
0031.00      C                     WRITEFILRCD                     |
0032.00      C*----------------------------------------------------*
0033.00      CSR                   END
0034.00      C*
0035.00      CSR         HASEND    ENDSR
0036.00      C******************************************************
0037.00      C           DMYDEL    BEGSR
0038.00      C******************************************************
0039.00      C*( 複数同時入力用 DUMMY-RECORD 削除 )
0040.00      CSR                   MOVE DENNO     DMY001
0041.00      CSR         *LIKE     DEFN DENNO     DMY001
0042.00      CSR                   MOVE *ZEROS    GYO 
0043.00      CSR                   CLEARFILRCD
0044.00      CSR                   MOVE DMY001    DENNO
0045.00      C*----------------------------------------------------+
0046.00      C           DMYEQL    KLIST                           |
0047.00      C                             KFLD           DENNO    |
0048.00      C                           KFLD           GYO        |
0049.00      C*----------------------------------------------------+
0050.00      CSR         DMTEQL    SETLLFILE 
0051.00      CSR                   DO   *HIVAL 
0052.00      CSR                   SETOF                     50
0053.00      CSR         DMYEQL    READEFILE                     50
0054.00      CSR 50                GOTO DELEND 
0055.00      C*----------------------------------------------------*
0056.00      C                     DELETFILRCD                     |
0057.00      C*----------------------------------------------------*
0058.00      CSR                   END
0059.00      CSR         DELEND    TAG
0060.00      CSR                   MOVE DMY001    DENNO 
0061.00      CSR                   ENDSR 
0062.00      C***************************************************** 
0063.00      C           LRRTN     BEGSR 
0064.00      C*****************************************************
0065.00      C* 
0066.00      CSR                   EXSR DMYDEL  
0067.00      CSR         LREND     ENDSR 
       *****************  データの終り  ***************************