4.4.1 DEF_LINEコマンドの使い方

以下の例では、次のようなレコードから成る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