7.98.2 UPRINTの使用例
例1:以下のRDMLプログラムは、受注番号を入力するようユーザーに要求し、注文の詳細とそれに関連付けられた明細行を印刷します。
GROUP_BY NAME(#ORDERDET) FIELDS(#ORDNUM #CUSTNUM #DATEDUE #ORDLIN #PRODUCT #QUANTITY #PRICE)
L1: REQUEST FIELDS(#ORDNUM)
FETCH FIELDS(#ORDERDET) FROM_FILE(ORDHDR) WITH_KEY(#ORDNUM) NOT_FOUND(L1) ISSUE_MSG(*YES)
SELECT FIELDS(#ORDERDET) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
UPRINT FIELDS(#ORDERDET)
ENDSELECT
ENDPRINT
例2:ACCOUNTというファイルに以下のフィールドとデータが保持されているとします。
会社(#COMP) |
部門(#DIV) |
課(#DEPT) |
支出(#EXPEND) |
収入(#REVNU) |
---|---|---|---|---|
01 |
1 |
ADM |
400 |
576 |
" |
" |
MKT |
678 |
56 |
" |
" |
SAL |
123 |
6784 |
" |
2 |
ADM |
46 |
52 |
" |
" |
SAL |
978 |
456 |
" |
3 |
ACC |
456 |
678 |
" |
" |
SAL |
123 |
679 |
02 |
1 |
ACC |
843 |
400 |
" |
" |
MKT |
23 |
0 |
" |
" |
SAL |
876 |
10 |
" |
2 |
ACC |
0 |
43 |
ファイルのキーが#COMP、#DIV、#DEPTの場合、以下のRDMLプログラムによって、このファイルからページ番号と小計付きのレポートが生成されます。
GROUP_BY NAME(#ACCOUNTS) FIELDS((#COMP *TOTLEVEL1 *NEWPAGE) (#DIV *TOTLEVEL2) (#DEPT *TOTLEVEL3) (#EXPEND *TOTAL) (#REVNU *TOTAL))
SELECT FIELDS(#ACCOUNTS) FROM_FILE(ACCOUNT)
UPRINT FIELDS(#ACCOUNTS)
ENDSELECT
ENDPRINT
フィールド属性について、以下の点に注意してください。
· *NEWPAGE属性を使用すると、会社番号が変更されると必ず新しいページが開始されます。
· *TOTLEVELn属性によって、要求される合計「レベル制御切れ」を示します。この場合、会社、部門(会社内)、および課(会社の部門内)別の合計が必要になります。
· *TOTAL属性を使用すると、フィールドが合計されます。この場合、支出フィールドと収入フィールドが合計されます。
フィールド属性とその使用方法の詳細については、「フィールド属性」を参照してください。
また、LANSAがデータをソートしないことに注意してください。データは、UPRINTコマンドに渡された順序で印刷されます。情報の印刷順序に関し、プログラマの責任において、新しいページおよび合計レベル属性を「意味のあるもの」にしてください。
上記のRDMLプログラムは、以下のようにコーディングすることもできます。
SELECT FIELDS(#COMP #DIV #DEPT #EXPEND #REVNU) FROM_FILE(ACCOUNT)
UPRINT FIELDS((#COMP *TOTLEVEL1 *NEWPAGE) (#DIV *TOTLEVEL2) (#DEPT *TOTLEVEL3) (#EXPEND *TOTAL) (#REVNU *TOTAL))
ENDSELECT
ENDPRINT