前述の例ではサブファイルは正しく表示されて ROLL UP/DOWNも可能であるが、これから以降
は作成したサブファイルを少しずつ改造して、実用的なやがては最後に高度な処理まで行えるよう
に仕上げて行こう。
最初に先に表示されたサブファイル表示の結果をもう一度確認してみる。
これは確かにサブファイルは正しく表示されているのであるが、続きのレコードがあるのか、これで
終わりであるのかを操作員が判断することができない。
そこで DDS のサブファイル・キーワードとして SFLEND(*MORE)
を次のように追加する。
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 ソースは次のようになる。
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の機能と同じような画面となる。