処理フロー: ブレイク(グループ)のあるバッチタスクの基本フロー
図はブレイク(グループ)のあるバッチタスクの基本フローです。
V8以前ならブレイク、V9以降はグループという表現になりましたが、意味は同じです。
ここでは、新しい呼び方に合わせて「グループ」として説明します。
通常のバッチタスクと異なるのは、グループ前処理とグループ後処理が入ることです。
グループ化には項目を使います。
ズームして、レコードメインでセレクトされている項目の中から選択します。
グループ化に使える項目としては、「R=実データ」だけでなく、「V=変数」でもOKです。
グループ化した項目の値が変化すると、グループ前処理とグループ後処理が実行されます。
そのため、データはグループ化した項目順に並んでいなければなりません。
その項目がインデックスになっていれば、タスク特性でそれを使えば良いのですが、
そうでなければソートテーブルを使います。
次に、グループ化項目の値が変化したときのグループ前処理とグループ後処理の実行タイミングですが、「
前レコードに対するグループ後処理」→「現レコードに対するグループ前処理」
という順で実行されます。
そして、最初と最後のレコードに対しては自動的にグループ前処理とグループ後処理が実行されます。
では、具体的にグループ処理の例を見てみましょう。
グループ化する項目が「xx区分(文字型:1桁)」で、
その値が、「A,A,A,B,B,B,C,C,C」という9レコードを処理する場合です。
処理フローは次のようになります。
タスク前処理
1レコード目読み込み(xx区分=A)
1レコード目のグループ前処理(最初のレコードに対して必ず実行される)
1レコード目のレコード前処理
1レコード目のレコード後処理
2レコード目読み込み(xx区分=A)→値が同じなのでグループ処理はしない
2レコード目のレコード前処理
2レコード目のレコード後処理
3レコード目読み込み(xx区分=A)→値が同じなのでグループ処理はしない
3レコード目のレコード前処理
3レコード目のレコード後処理
4レコード目読み込み(xx区分=B)→値が変わったのでグループ処理実行
3レコード目のグループ後処理
4レコード目のグループ前処理
4レコード目のレコード前処理
4レコード目のレコード後処理
5レコード目読み込み(xx区分=B)→値が同じなのでグループ処理はしない
5レコード目のレコード前処理
5レコード目のレコード後処理
6レコード目読み込み(xx区分=B)→値が同じなのでグループ処理はしない
6レコード目のレコード前処理
6レコード目のレコード後処理
7レコード目読み込み(xx区分=C)→値が変わったのでグループ処理実行
6レコード目のグループ後処理
7レコード目のグループ前処理
7レコード目のレコード前処理
7レコード目のレコード後処理
8レコード目読み込み(xx区分=C)→値が同じなのでグループ処理はしない
8レコード目のレコード前処理
8レコード目のレコード後処理
9レコード目読み込み(xx区分=C)→値が同じなのでグループ処理はしない
9レコード目のレコード前処理
9レコード目のレコード後処理
9レコード目のグループ後処理(最後のレコードに対して必ず実行される)
タスク後処理