ARRSRPT プログラムは、ARRSRPT と FMTPROCS の 2 つのモジュールから構成されます。 図 21 はミニ・アプリケーションの異なる部分を示します。
図 22 は 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 で示します。
得意先番号: 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 ソースを示します。
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')
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')
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.