処理フロー: ブレイク(グループ)のあるバッチタスクの基本フロー

ブレイク(グループ)のあるバッチタスクの基本フロー図

図はブレイク(グループ)のあるバッチタスクの基本フローです。
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レコード目のグループ後処理(最後のレコードに対して必ず実行される)
タスク後処理