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

図 2 は ARRSRPT モジュールのソース全体を示したものです。
図 2. 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 について次のことに注意してください。
- 定義仕様書はプロトタイプ呼び出しのプロトタイプから始まります。/COPY ファイルは、
呼び出されたプロシージャー FmtAddr のプロトタイプを提供するために使用されます。
プロトタイプは最初にある必要はありませんが、いろいろなタ イプの定義の一貫性のある順序を確立する必要があります。
- 日付フィールド CurDate はグローバル・フィールドであり、モジュール内 のすべてのプロシージャーがそれをアクセスできることを意味します。
- メイン・プロシージャーは単純に続けます。これには、2 つのメインタスクで ある入出力および初期設定ルーチン用の演算仕様書が含まれています。
- メイン・プロシージャーに続く各サブプロシージャーには、タスクの 1 つの 詳細が含まれています。
プログラム ARRSRPT のサンプル出力を、図 3 で示します。
図 3. 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
図 4 および図 5 はそれぞれ、ファイル CUSTFILE および CUSTRPT の DDS ソースを示します。
図 4. 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')
図 5. 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')