サブプロシージャでのＦ仕様書

V6R1からは、サブプロシージャでローカルのＦ仕様書が定義出来ます。
サブルーチンやサービスＰＧＭを作成する際には、非常に役に立つのではないでしょうか。
今までは、サービスＰＧＭでアサインしているファイルはＵＣしない限り、使用しないファイルでもオープンされてましたが、この機能により、通常はサブプロシージャが呼ばれない限り、オープンはされません。
#ローカルＦ仕様書の挙動についてまとめ
**メインルーチンとサブプロシージャで同じファイル定義が有る場合**
1. ＯＤＰ共用→メインとサブで同一のカーソルを持つ
2. ＯＤＰ非共用→メインとサブで別のカーソルを持つ。サブは実行時にファイルオープンし、終了時にファイルクローズする。ただし、F仕様書にSTATICオプションを付けると、サブ終了時にファイルをクローズしない。

OVRDBFでＯＤＰを共用している場合は、挙動に気をつける必要がありますね。

```RPG:USR404.rpgle
     H****************************************************************
     H*-------------------------------*
     H*----<<日付・著作権    >>-----*
     H*-------------------------------*
     H DATEDIT(*YMD)
     H COPYRIGHT('(C) ushiday - ')
     H*-------------------------------*
     H*----<<コンパイル条件  >>-----*
     H*-------------------------------*
     H DFTACTGRP(*NO) ACTGRP(*NEW)
     H OPTION(*NOUNREF)
     H BNDDIR('QC2LE')
     FITEM      IF   E           K DISK
     D*
     D REC           E DS                  EXTNAME(ITEM : *INPUT)
     D                                     QUALIFIED
     D*
     D print           PR                  EXTPROC('print')                     標準出力関数
     D    msg                      1000A   VARYING CONST
     C*-------------------------------*
     C*----<<メインルーチン  >>-----*
     C*-------------------------------*
      /FREE

           print ( '---- PROGRAM START ----')    ;

           READ ITEM             ;
           READ ITEM             ;
           READ ITEM             ;
           DSPLY ('MAIN READ 3 TIMES') ;

           REC  = GET_ITEM() ;
           print ( '(' + %EDITC(REC.CODE :'X') + ')'
                           +  REC.NAME ) ;

           EXSR @END  ;

           //終了
           BEGSR   @END   ;
                print ( '---- PROGRAM END   ----')    ;

               *INLR = *ON    ;
               RETURN        ;
           ENDSR         ;

      /END-FREE
     P****************************************************************
     P** < GET_ITEM          >: 商品取得                          **
     P****************************************************************
     P GET_ITEM        B
     FITEM      IF   E           K DISK
     D GET_ITEM        PI                  LIKEDS(REC)
     D*----<<変数定義 >>-----*
     D REC           E DS                  EXTNAME(ITEM : *INPUT)
     D                                     QUALIFIED
      /FREE
           CLEAR REC             ;
           READ ITEM REC         ;
           DSPLY ('SUB ROUTINE READ 1 TIME') ;
           RETURN REC            ;
      /END-FREE
     P                 E
     P****************************************************************
     P** < print             >: 標準出力                          **
     P****************************************************************
     P print           B                   EXPORT
     D print           PI
     D    msg                      1000A   VARYING CONST
     D printf          PR              *   EXTPROC('printf')
     D    template                     *   VALUE OPTIONS(*STRING)
     D    string                       *   VALUE OPTIONS(*STRING)
     D    dummy                        *   VALUE OPTIONS(*NOPASS)
     D*
     D NEWLINE         C                   X'15'
     D*タイムスタンプ
     D WTIMESTAMP      S               Z
     D WDATE8          S              8S 0
     D WTIME6          S              6S 0
          WTIMESTAMP = %TIMESTAMP()   ;
          WDATE8     = %DEC(%DATE(WTIMESTAMP) : *ISO );
          WTIME6     = %DEC(%TIME(WTIMESTAMP) : *HMS );
      /FREE
          printf ( %EDITW(WTIME6:'  :  :  ')+ ' %s' + NEWLINE : msg) ;
      /END-FREE
     P                 E 

```

●ＯＤＰを非共用でのカーソルの状態
![2015-12-04_194945.png](https://qiita-image-store.s3.amazonaws.com/0/100029/680826c1-036e-faac-273b-d9a7cc97b010.png)

●ＯＤＰを共用でのカーソルの状態
![2015-12-04_195035.png](https://qiita-image-store.s3.amazonaws.com/0/100029/95b9d99a-4031-a980-0f16-ea223c085d8f.png)
![2015-12-04_195201.png](https://qiita-image-store.s3.amazonaws.com/0/100029/bdcb081f-8227-d879-0036-16d5ae813ad6.png)

●実行結果
![2015-12-04_195437.png](https://qiita-image-store.s3.amazonaws.com/0/100029/7b8ed361-29c5-1a66-bca7-9bf8cdee0e94.png)