以下の例では、次のようなレコードから成るACCOUNTSファイルをもとに、レポートを作成します。ここで、ファイルは会社番号、部門番号、部署コードを基準に整列しているとします。
会社(#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 |
注:説明を簡単にするため、ここでは1つのファイルを対象としたレポート作成例しか挙げませんが、実際には対象ファイル数に制限はありません。
最も単純なレポートは、ファイルの内容をすべてそのまま列挙する、という形のものでしょう。
これは次のように記述すれば作成できます。
DEF_LINE NAME(#ACCOUNT) FIELDS(#COMP #DIV #DEPT
#EXPEND #REVNU)
SELECT FIELDS(#ACCOUNT) FROM_FILE(ACCOUNTS)
PRINT LINE(#ACCOUNT)
ENDSELECT
ENDPRINT
作成結果は次のようになります。
会社 部門 課 支出 収入 01 1 ADM 400 576 01 1 MKT 678 56 01 1 SAL 123 6784 01 2 ADM 46 52 01 2 SAL 978 456 01 3 ACC 456 678 01 3 SAL 123 679 02 1 ACC 843 400 02 1 MKT 23 0 02 1 SAL 876 10 02 2 ACC 0 43
この例を若干変更するだけで、特定の会社についてのみ出力するなど、レポートの内容を変えることができます。
DEF_LINE NAME(#ACCOUNT) FIELDS(#COMP #DIV #DEPT
#EXPEND #REVNU)
REQUEST FIELDS(#COMP)
SELECT FIELDS(#ACCOUNT) FROM_FILE(ACCOUNTS)
WITH_KEY(#COMP)
PRINT LINE(#ACCOUNT)
ENDSELECT
ENDPRINT
同様に、収入と支出の差が所定の値未満のものだけを出力するよう、条件を与えることも可能です。
DEF_LINE NAME(#ACCOUNT) FIELDS(#COMP #DIV
#DEPT #EXPEND #REVNU)
DEFINE FIELD(#MAXLOSS) REFFLD(#REVNU)
LABEL('Allowable loss')
REQUEST FIELDS(#MAXLOSS)
SELECT FIELDS(#ACCOUNT) FROM_FILE(ACCOUNTS)
WHERE('(#REVNU - #EXPEND) *LT #MAXLOSS')
PRINT LINE(#ACCOUNT)
ENDSELECT
ENDPRINT
次の例では*ONCHANGE属性を使って、会社番号がすぐ上の行と異なる場合のみ印字するようにしています。
DEF_LINE NAME(#ACCOUNT) FIELDS((#COMP *ONCHANGE)
#DIV #DEPT #EXPEND #REVNU)
SELECT FIELDS(#ACCOUNT) FROM_FILE(ACCOUNTS)
PRINT LINE(#ACCOUNT)
ENDSELECT
ENDPRINT
実際に作成されるレポートは、例えば次のようになります。
会社 部門 課 支出 収入 01 1 ADM 400 576 1 MKT 678 56 1 SAL 123 6784 2 ADM 46 52 2 SAL 978 456 3 ACC 456 678 3 SAL 123 679 02 1 ACC 843 400 1 MKT 23 0 1 SAL 876 10 2 ACC 0 43