ARRSRPT プログラム全体

ARRSRPT プログラムは、ARRSRPT と FMTPROCS の 2 つのモジュールから構成されます。 図 21 はミニ・アプリケーションの異なる部分を示します。

図 21. ARRSRPT アプリケーション・プログラム

図 22 は ARRSRPT モジュールのソース全体を示したものです。

図 22. ILE RPG ARRSRPT モジュールの全ソース
      //=================================================================
      // モジュール ARRSRPT のソース。メイン・プロシージャーと 2 つの
      // サブプロシージャー InArrears および FmtCust が含まれています。
      //
      // 関連モジュール:  CVTPROCS  (InArrears によって呼び出された CharToNum)
      //=================================================================
      //--------------------------------------------------------------
      // ファイル
      //
      // CUSTFILE - 得意先情報が入っている
      // CUSTRPT  - プリンター・ファイル (様式 ARREARS を使用)
      //--------------------------------------------------------------
     FCUSTFILE  IP   E             DISK
     FCUSTRPT   O    E             PRINTER
      *--------------------------------------------------------------*
      * プロトタイプ
      *--------------------------------------------------------------*
      /COPY QRPGLE,FMTPROC_P
      *--------------------------------------------------------------*
      * 得意先が滞納中の場合に、InArrears は '1' を戻します
      *--------------------------------------------------------------*
     D InArrears       PR             1A
      *--------------------------------------------------------------*
      * FmtCust は CUSTNAME、CUSTNUM、STREETNAME などを
      * 読み取り可能な様式に様式設定します。
      *--------------------------------------------------------------*
     D FmtCust         PR
     D  Name                        100A
     D  Address                     100A
      *--------------------------------------------------------------*
      * グローバル定義
      *--------------------------------------------------------------*
     D CurDate         S               D
     ICUSTREC       01
      *--------------------------------------------------------------*
      * メイン・プロシージャー
      *--------------------------------------------------------------*
     C                   IF        InArrears() = '1'
     C                   CALLP     FmtCust(RPTNAME : RPTADDR)
     C                   EVAL      RPTNUM = CUSTNUM
     C                   WRITE     ARREARS
     C                   ENDIF
     C     *INZSR        BEGSR
     C                   MOVEL     UDATE         CurDate
     C                   ENDSR

       *--------------------------------------------------------------*
       * サブプロシージャー
       *--------------------------------------------------------------*
       //--------------------------------------------------------------
       // InArrears
       //
       // パラメーター: (なし)
       // グローバル:   DUEDATE, AMOUNT, CurDate
       //
       // 戻り:         得意先が滞納中であれば '1'
       //--------------------------------------------------------------
     P InArrears       B                     
     D InArrears       PI             1A     
       // ローカルの宣言
     D DaysLate        S             10I 0   
     D DateDue         S               D     
       // プロシージャー本体
      /free
          DateDue = %date (DUEDATE: *ISO);
          DaysLate = %diff (CurDate: DateDue: *d);
           // 入力ファイルの中のデータは別のタイプの
            // コンピューターからのデータで、AMOUNTC フィールドは、
            // 数値を含む文字ストリングです。
            // このストリングは、印刷の場合は数値の AMOUNT フィールドに
            // 変換しなければなりません。
           AMOUNT = %dec(AMOUNTC : 31 : 9);
          if DaysLate > 60 AND AMOUNT > 100.00;
             return '1';
          endif;
          return '0';
      /end-free
     P InArrears       E                     
 //--------------------------------------------------------------
 // FmtCust は、CUSTNAME、CUSTNUM、STREETNAME などを
 // 読み取り可能な様式に様式設定します。
 //
 // パラメーター:   Name     (出力)
 //                 Address  (出力)
 // グローバル:     CUSTNAME、CUSTNUM、STREETNUM、STREETNAME、CITY
 //                 STATE、ZIP
 //--------------------------------------------------------------

P FmtCust         B
D FmtCust         PI
D  Name                        100A
D  Address                     100A

 /free

     //--------------------------------------------------------------
     // CUSTNAME と CUSTNUM は次のように様式設定されます。
     // A&P Electronics     (得意先番号 157)
     //--------------------------------------------------------------
     Name = CUSTNAME + ' ' + '(得意先番号 '
                        + %char(CUSTNUM) + ')';

     //--------------------------------------------------------------
     //   FmtAddr プロシージャーを呼び出してアドレスを処理します。
     //--------------------------------------------------------------

 Address = FmtAddress (STREETNUM : STREETNAME :
                              CITY : STATE : ZIP);
 /end-free
P FmtCust         E

ARRSRPT について次のことに注意してください。

プログラム ARRSRPT のサンプル出力を、図 23 で示します。

図 23. ARRSRPT の出力
     得意先番号: 00001
         ABC Electronics      (得意先番号 1)
         15 Arboreal Way, Treetop MN 12345
         未処理の金額:          $1234.56   期日: 1995-05-01

     得意先番号: 00152
         A&P Electronics      (得意先番号 152)
         27 Garbanzo Avenue, Smallville MN 51423
         未処理の金額:         $26544.50   期日: 1995-02-11

図 24 および図 25 はそれぞれ、ファイル CUSTFILE および CUSTRPT の DDS ソースを示します。

図 24. CUSTFILE の DDS
     A*================================================================*
     A* ファイル名     : CUSTFILE
     A* 関連プログラム : ARRSRPT
     A* 説明           : これは物理ファイル CUSTFILE です。これには
     A*                  CUSTREC と呼ばれる 1 レコード様式があります。
     A*================================================================*
     A* 得意先マスター・ファイル -- CUSTFILE
     A          R CUSTREC
     A            CUSTNUM        5  0       TEXT('CUSTOMER NUMBER')
     A            CUSTNAME      20          TEXT('CUSTOMER NAME')
     A            STREETNUM      5  0       TEXT('CUSTOMER ADDRESS')
     A            STREETNAME    20          TEXT('CUSTOMER ADDRESS')
     A            CITY          20          TEXT('CUSTOMER CITY')
     A            STATE          2          TEXT('CUSTOMER STATE')
     A            ZIP            5  0       TEXT('CUSTOMER ZIP CODE')
     A            AMOUNTC       15          TEXT('AMOUNT OUTSTANDING')
     A            DUEDATE       10          TEXT('DATE DUE')
図 25. CUSTRPT の DDS
     A*===================================================================*
     A* ファイル名     : CUSTRPT
     A* 関連プログラム : ARRSRPT
     A* 説明           : これはプリンター・ファイル CUSTRPT です。これには
     A*                  ARREARS と呼ばれる 1 レコード様式があります。
     A*===================================================================*
     A          R ARREARS
     A                                  2  6
     A                                      '得意先番号:'
     A            RPTNUM         5  0   2 23
     A                                      TEXT('CUSTOMER NUMBER')
     A            RPTNAME      100A     3 10
     A                                      TEXT('CUSTOMER NAME')
     A            RPTADDR      100A     4 10
     A                                      TEXT('CUSTOMER ADDRESS')
     A                                  5 10'未処理の金額:'
     A            AMOUNT        10  2   5 35EDTWRD('       $0.  ')
     A                                      TEXT('AMOUNT OUTSTANDING')
     A                                  5 50'期日:'
     A            DUEDATE       10      5 60
     A                                      TEXT('DATE DUE')