RPG

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

前述の例ではサブファイルは正しく表示されて ROLL UP/DOWNも可能であるが、これから以降
は作成したサブファイルを少しずつ改造して、実用的なやがては最後に高度な処理まで行えるよう
に仕上げて行こう。

最初に先に表示されたサブファイル表示の結果をもう一度確認してみる。

これは確かにサブファイルは正しく表示されているのであるが、続きのレコードがあるのか、これで
終わりであるのかを操作員が判断することができない。
そこで DDS のサブファイル・キーワードとして SFLEND(*MORE) を次のように追加する。

【 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  45                                  SFLEND(*MORE)            
0024.00      A                                      ROLLUP(14 ' 次頁 ')      
0025.00      A                                      ROLLDOWN(15 ' 前頁 ')    
0026.00      A                                      CF03(03 ' 終了 ')        
0027.00      A                                  1 27' 商品マスター照会 '     
0028.00      A                                      DSPATR(RI)               
0029.00      A                                      COLOR(PNK)               
0030.00      A*( 明細行の桁見出し )                                          
0031.00      A                                  7  2'  '                   
0032.00      A                                      DSPATR(HI)               
0033.00      A                                  7  7' 商品コード '           
0034.00      A                                      DSPATR(HI)               
0035.00      A                                  7 20' 商品名 '               
0036.00      A                                      DSPATR(HI)               
0037.00      A                                  7 45' 単価 '                 
0038.00      A                                      DSPATR(HI)               
0039.00      A                                  7 56' 品種コード '           
0040.00      A                                      DSPATR(HI)

SFLEND(*MORE) が効いているときは OS400によって「続く」が表示され、そうでないときは
「終わり」が表示される。
従って RPG 内部処理ではデータがあるときは標識 45 を *ON にセットしておいて、データが
これ以上ないときに初めて標識 45 を *OFF にセットすればよいことになる。
RPG ソースは次のようになる。

【 RPG ソース】
0001.00 H DFTNAME(SFL002) DATEDIT(*YMD/)                                        
0002.00 F**********  商品マスター照会 ************************************      
0003.00 FSFL002FM  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              SETOFF                                       45     
0043.00 C   50              LEAVE                                               
0044.00 C                   MOVE      RRN1          GYO                         
0045.00 C*----------------------------------------------------+                 
0046.00 C                   WRITE     SFREC01                                   
0047.00 C*----------------------------------------------------+                 
0048.00 C                   END                                                 
0049.00 C                   ADD       SFLPAG        STRRRN                      
0050.00 C     REDEND        ENDSR                                               
0051.00 C******************************************************                 
0052.00 C     SFLCLR        BEGSR                                               
0053.00 C******************************************************                 
0054.00 C                   SETON                                        4445   
0055.00 C                   WRITE     SFCTL01                                   
0056.00 C                   SETOFF                                       44     
0057.00 C                   ENDSR

実行の結果は次のとおりである。
わずかな修正だけで、OS400の機能と同じような画面となる。