Groupmax Form Version 6 ユーザーズガイド
図8-2,図8-7,図8-8に示した業務の処理定義の例を,次に示します。
[顧客名]
@レコード入力△TOKUI,?コード=%得意先コード
@判定開始△#コード=¥NIL
@成立
@代入△'※※※'
@不成立
@代入△#名前
@判定終了
[商品名]
@レコード入力△SHOHIN,?コード=%コード
@判定開始△#コード=¥NIL
@成立
@代入△'※※※'
@不成立
@代入△#商品名
@判定終了
[数量]
@代入△%数量
[金額]
@代入△%金額
[小計]
@代入△SUMB(%金額,%区分,%得意先コード)
[合計]
@代入△SUMB(%金額,%得意先コード)
[累計]
@代入△SUM(%金額)
- 「顧客名」の項目処理
レコードの読み込み
@レコード入力でデータベースTOKUIのレコードを読み込みます。TOKUIの項目「コード」の内容が,印刷するデータベースUDATAKの「得意先コード」の内容と同じであるレコードを読み込むように,条件を指定してあります。
書式印刷業務では,印刷するデータベース(ここではUDATAKのことです)からレコードを読み込む処理を,定義する必要はありません。書式印刷業務を呼び出すときに,処理コマンドのオペランドなどで指定したデータベースが読み込まれます。
@判定開始〜@判定終了では,該当するレコードが実際にあったかどうかを判定します。該当するレコードがないと,レコード項目の内容は空値「¥NIL」になります。その場合,@代入で,「顧客名」に「※※※」を代入して印刷します。レコードがあった場合は,その項目「名前」のデータを「顧客名」に印刷します。
項目名の指定方法
@レコード入力のオペランドでは,データベースのレコードの項目名「コード」に「?」を付けて指定しています。また,@判定開始のオペランドでは,「#」を付けています。これは,書式の項目名と読み込むデータベースの項目名を区別するための指定方法で,それぞれ「?項目名」,「#項目名」といいます。「?項目名」は,レコードをこれから読み込もうとするときに指定し,「#項目名」は,読み込んだ後で指定します。
また,印刷するデータベースのレコードの項目名「コード」には「%」を付けて指定しています。これも,書式の項目名とを区別するための指定方法で,「%項目名」といいます。
代入文の左辺の省略
@代入のオペランドでは,代入文の左辺を省略しています。代入先が,処理中の項目自身の場合は,左辺を省略できます。
- 「商品名」の項目処理
データベースSHOHINの項目「コード」の内容が,UDATAKの項目「コード」の内容と同じであるレコードを読み込みます。読み込んだレコードの「商品名」の内容を,書式の項目に印刷します。
- 「数量」,「金額」の項目処理
UDATAKから読み込んだレコードの項目「数量」,「金額」の内容を,そのまま印刷します。
このように,書式の項目名とデータベースの項目名が同じで,その内容をそのまま代入する場合,処理定義を省略してもかまいません。
- 「小計」の項目処理
SUMB関数で「金額」の合計を計算して,印刷します。このとき,UDATAKの「区分」又は「得意先コード」の内容が変わるたびに,合計を計算し直します。この「区分」及び「得意先コード」を,ブレーク条件といいます。SUMB関数の最初の引数には合計を求める項目を,2番目以降の引数にはブレーク条件にする項目を,それぞれ指定します。
UDATAKのレコードは,「得意先コード」及び「区分」の内容に従って並べられています。「区分」は,商品区分(単価が1000未満か1000以上か)を表しています。レコードを読み込むたびに,SUMBは「金額」の内容を加算します。「区分」の内容が変化すると,書式を作成するときに定義した印刷条件に従って小計領域が印刷されます。このとき,「小計」には,それまでにSUMBで計算した合計が印刷されます。その後,SUMBは合計を0にして,次のレコードから加算し直します。「得意先コード」の内容が変化したときも,同じように合計が印刷されます。このようにして,商品区分ごとに小計を印刷できます。
- 「合計」の項目処理
「小計」と同様にSUMB関数を使って,「金額」の合計を印刷します。ここでは,ブレーク条件に「得意先コード」だけを指定しているので,顧客ごとに小計を印刷できます。
- 「累計」の項目処理
SUM関数も,合計を計算する関数です。ただし,SUMBとは異なり,ブレーク条件を指定できません。したがって,読み込んだすべてのレコードの「金額」の内容が合計されて,「累計」に印刷されます。
All Rights Reserved, Copyright (C) 2001, Hitachi, Ltd.