RPG

103. サブファイルの誤解と使用方法 (3)

それでは最も簡単なサブファイル表示の RPG を作成してみよう。
最初に DSPF ソースは以下のとおりである。

【 DSPF ソース 】
0001.00      A                                      DSPSIZ(24 80 *DS3)       
0002.00      A                                      MSGLOC(24)               
0003.00      A                                      PRINT                    
0004.00      A          R SFREC01                   SFL                      
0005.00      A                                      TEXT(' SFL明細行 ')   
0006.00      A            GYO            4A  O  8  2TEXT('  ')             
0007.00      A            SHCODE        10A  O  8  7TEXT(' 商品コード ')     
0008.00      A            SHNAME        24O  O  8 20TEXT(' 商品名 ')         
0009.00      A            SHTANK         7Y 0O  8 45TEXT(' 単価 ')           
0010.00      A                                      EDTCDE(K)                
0011.00      A            SHSCOD         4A  O  8 56TEXT(' 品種コード ')     
0012.00      A                                                               
0013.00      A          R SFCTL01                   SFLCTL(SFREC01)          
0014.00      A                                      TEXT(' SFL制御見出 ') 
0015.00      A                                      OVERLAY                  
0016.00      A* SFLPAG : 1 画面での表示行数                                  
0017.00      A* SFLSIZ : サブファイル全体の容量                              
0018.00      A                                      SFLSIZ(14)               
0019.00      A                                      SFLPAG(13)               
0020.00      A  41                                  SFLDSPCTL                
0021.00      A  42                                  SFLDSP                   
0022.00      A  44                                  SFLCLR                   
0023.00      A                                      ROLLUP(14 ' 次頁 ')      
0024.00      A                                      ROLLDOWN(15 ' 前頁 ')    
0025.00      A                                      CF03(03 ' 終了 ')        
0026.00      A                                  1 27' 商品マスター照会 '     
0027.00      A                                      DSPATR(RI)               
0028.00      A                                      COLOR(PNK)               
0029.00      A*( 明細行の桁見出し )                                          
0030.00      A                                  7  2'  '                   
0031.00      A                                      DSPATR(HI)               
0032.00      A                                  7  7' 商品コード '           
0033.00      A                                      DSPATR(HI)               
0034.00      A                                  7 20' 商品名 '               
0035.00      A                                      DSPATR(HI)               
0036.00      A                                  7 45' 単価 '                 
0037.00      A                                      DSPATR(HI)               
0038.00      A                                  7 56' 品種コード '           
0039.00      A                                      DSPATR(HI)

例としてわかりやすくするために初期画面等は用意していない。
単純にサブファイルだけを表示する RPG を作成する。
RPG ソースは以下のとおりである。

【 RPG ソース 】
0001.00 H DFTNAME(SFL001) DATEDIT(*YMD/)                                        
0002.00 F**********  商品マスター照会 ************************************      
0003.00 FSFL001FM  CF   E             WORKSTN                                   
0004.00 F                                     SFILE(SFREC01:RRN1)               
0005.00 FSHOHIN    IF   E           K DISK                                      
0006.00 F*****************************************************************      
0007.00 D* 作業変数の定義                                                       
0008.00 D RRN1            S              4S 0 INZ                               
0009.00 D SFLPAG          S              4S 0 INZ(13)                           
0010.00 D STRRRN          S              4S 0 INZ(1)                            
0011.00 D ENDRRN          S              4S 0 INZ                               
0012.00 C     *LOVAL        SETLL     SHOHIN                                    
0013.00 C                   EXSR      SFLCLR                                    
0014.00 C*   : ファイルの読み取り                                               
0015.00 C                   EXSR      READ                                      
0016.00 C*( サブ・ファイルの表示 )                                              
0017.00 C*----------------------------------------------------+                 
0018.00 C     DSPLY         TAG                                                 
0019.00 C                   SETON                                        4142   
0020.00 C                   EXFMT     SFCTL01                                   
0021.00 C                   SETOFF                                       4142   
0022.00 C*----------------------------------------------------+                 
0023.00 C*( CF03 )- 終了                                                        
0024.00 C     *IN03         IFEQ      *ON                                       
0025.00 C                   SETON                                        LR     
0026.00 C   LR              RETURN                                              
0027.00 C                   END                                                 
0028.00 C*( ROLL-UP )                                                           
0029.00 C     *IN14         IFEQ      *ON                                       
0030.00 C                   EXSR      READ                                      
0031.00 C                   END                                                 
0032.00 C*( 実行キー )                                                          
0033.00 C                   GOTO      DSPLY                                     
0034.00 C     END           TAG                                                 
0035.00 C******************************************************                 
0036.00 C     READ          BEGSR                                               
0037.00 C******************************************************                 
0038.00 C     STRRRN        ADD       13            ENDRRN                      
0039.00 C     STRRRN        DO        ENDRRN        RRN1                        
0040.00 C                   SETOFF                                       50     
0041.00 C                   READ      SHOHIN                                 50 
0042.00 C   50              LEAVE                                             
0043.00 C                   MOVE      RRN1          GYO                       
0044.00 C*----------------------------------------------------+               
0045.00 C                   WRITE     SFREC01                                 
0046.00 C*----------------------------------------------------+               
0047.00 C                   END                                               
0048.00 C                   ADD       SFLPAG        STRRRN                    
0049.00 C     REDEND        ENDSR                                             
0050.00 C******************************************************               
0051.00 C     SFLCLR        BEGSR                                             
0052.00 C******************************************************               
0053.00 C                   SETON                                        44   
0054.00 C                   WRITE     SFCTL01                                 
0055.00 C                   SETOFF                                       44   
0056.00 C                   ENDSR

わずか 56ステップのプログラムであるがサブファイル表示のための基本的な機能を含んでいる。
最初に SFLCLR によってサブファイルをクリヤーして READ によってサブファイル・レコードを
追加しているシンプルな処理である。
ROLLUP キーが押されたら、さらに READ を実行してサブファイル・レコードを追加している。
ROLL-DOWN キーの処理が記述されていないことにも注目して欲しい。
ROLL-DOWN 処理は OS400によって制御されるので RPGでは記述する必要がないのである。

コンパイルして CALL SFL001 によってプログラムを実行すると結果は次の画面が表示されて、
ROLL UP/DOWN も行うことができる。