バッチ処理フローのアーキテクチャについて

このトピックでは、次について説明します。

  • グローバル ペイロールのモード。

  • 受給者の選択。

  • 計算 (技術情報)。

  • バッチ処理で使用されるアレイ (技術情報)。

  • バッチ処理出力テーブル。

グローバル ペイロールでは、非常に特殊な処理順序で受給者およびエレメントを処理します。給与計算処理または休暇欠勤処理の実行時には、受給者、エレメント、ルールなど、定義済みのシステム構成要素全てが連携して動作します。

グローバル ペイロールには、以下の 2 つの主要なモードがあります。

  • 設定モード

    設定モードでは、給与計算システムを構成する多様なエレメント、ルール、その他のシステム設定を定義します。

  • 処理モード

    処理モードでは、定義済みの設定情報および入力されたデータが全て参照され、指定されたとおりに処理されます。

注: このセクションでは、バッチ処理フローのアーキテクチャの大まかな概要について説明しています。処理の各フェーズについては、この製品ドキュメントの後半で詳しく説明します。

給与計算または休暇欠勤のバッチ処理を実行する際に、最初に呼び出されるのはサービス プログラムです。サービス プログラムは、処理対象となる受給者の選択と計算処理との間の調整役として機能します。サービス プログラムによって、受給者選択処理が起動されます。受給者の選択が終わると、サービス プログラムは受給者選択フェーズで作成されたデータの制御を計算プログラムに移します。

画像: サービス プログラムはバッチ処理の開始点

以下の図は、サービス プログラムがどのようにして受給者選択フェーズと計算フェーズの調整をしているかを表しています。

サービス プログラムはバッチ処理の開始点

給与計算処理を行うには、まず処理対象となる受給者を指定する必要があります。グローバル ペイロールでは、これを受給者の選択または受給者の特定と呼んでいます。受給者の選択は、給与計算処理および休暇欠勤処理では必須です。

受給者選択の処理は、計算処理とは別のものです。受給者選択のルールは、給与計算または休暇欠勤の計算処理に関連付けられていません。受給者の選択フェーズでは、受給者の選択、および後で計算フェーズに渡されるデータの作成だけが行われます。

支給カレンダーは、受給者選択処理と計算処理の調整と定義を行う制御機能としての役割を果たします。また、給与計算/休暇欠勤ラン コントロールでも、受給者の選択が制御されます。

カレンダー定義のページで、アクティブな受給者を処理するのか、それともリストされた受給者のみを処理するのかを指定します。アクティブな受給者を処理する場合、他にもいくつかの条件を指定できます。リストされた受給者のみを処理する場合は、処理対象にする受給者の従業員 ID を受給者リストに挿入します。

受給者の選択処理ではまた、遡及トリガおよび期間分割トリガが使われます。遡及トリガを使うと、特定の受給者について、現在の支給期間以外の支給期間も処理することができます。期間分割トリガを使うと、支給期間がセグメントに分割されるため、複数の計算が行われます。

受給者選択処理の結果、受給者処理ステータス (GP_PYE_PRC_STAT) レコードおよび受給者セグメント ステータス (GP_PYE_SEG_STAT) レコードが作成されます。受給者処理ステータス レコードは、カレンダーごとに各受給者に対して作成されます。遡及処理も対象になります。受給者セグメント ステータス レコードは、カレンダーごとに各セグメントの各受給者に対して作成されます。受給者処理ステータス レコードおよび受給者セグメント ステータス レコードには、実行中のカレンダーに関連付けられている受給者データが格納されます。実質的に、受給者処理ステータス レコードおよび受給者セグメント ステータス レコードには、処理対象の受給者および全支給期間がリストされます。これには、現在の支給期間および予想される遡及期間も含まれます。

受給者の選択が終わると、サービス プログラムは処理の制御を計算フェーズに移します。計算フェーズでは、受給者処理ステータス レコードおよび受給者セグメント ステータス レコードに保存されているデータが、受給者データの開始データ セットとして扱われます。

給与計算処理の最初のステップで、プロセス レベルのデータがアレイにロードされます。ロードされるデータには、支給元、支給グループ、有資格グループ、カレンダー、プロセス リストなどから取得されたデータが含まれます。これらのシステム データは、受給者固有のデータと違って頻繁に変更されることはありません。

計算プログラムでは、受給者選択フェーズで作成された受給者処理ステータス レコードおよび受給者セグメント ステータス レコードに基づき、各受給者データが処理されます。このプログラムによって、受給者レベルのデータが全て受給者アレイにロードされます。ロードされるデータには、職務、個人、給与、上書き、ポジティブ入力などのテーブルから取得されたデータが含まれます。

また、受給者レベルのデータをアレイにロードする処理では、支給を処理するたびにデータがリフレッシュされるか、またはデータへのポインタが初期化されるため、以下のことが可能になります。

  • 正しい有効日の付いた情報が常に使用されます。

  • 正しい年間累計残高が常に反映されます。

  • 休暇欠勤データなどのポジティブ入力は、常に次の給与に繰り越されます。

この段階で、プロセス レベルおよび受給者レベルの全てのデータがアレイにロードされ、処理の準備が整います。

次に、計算フェーズでエレメントの資格が確認されます。

計算プログラムによって、プロセス リスト マネージャ プログラムが呼び出されます。プロセス リスト マネージャ プログラムでは、プロセス リストが参照され、どのエレメントをどの順番で処理するのかが決められます。

プロセス リスト マネージャで処理対象のエレメントが見つかると、各エレメントの管理プログラムである PIN マネージャが呼び出され、処理の始めに処理対象として確認された各エレメントが処理されます。PIN マネージャでは、この処理中に PINV アレイが参照されます。PINV アレイには、給与計算バッチ処理中に全てのエレメントの変換結果が保存されます。PINV に保存されているデータが未変換のエレメントがあることを示している場合、PIN マネージャによって、特定タイプのエレメントを処理する PIN 変換プログラムが呼び出されます。

PINW と呼ばれる別のアレイには、バッチ処理中に変換される累計データが保存されます。

各 PIN 変換プログラムでは、それぞれ特定のタイプのエレメントが変換されます。たとえば、ある PIN 変換プログラムでは支給エレメントが変換され、別の PIN 変換プログラムではフォーミュラ エレメントが変換されます。PIN 変換プログラムによって、エレメントの定義がメモリにロードされます。その後 PIN 変換プログラムでは、受給者に対する受給者上書きデータやポジティブ入力データによって、メモリに保存されている定義が上書きされます。エレメントから他のエレメントが参照され、メモリにロードされている定義が上書きされると、PIN 変換プログラムによって PIN マネージャが呼び出され、参照先のエレメントが変換されます。エレメントは、他のエレメントの構成要素になることができます。つまり、処理中にある 1 つのエレメントを変換すると、主要エレメントを構成している他のエレメントを全て変換する必要がある場合がある、ということです。この処理の結果は、支給額、控除額、およびその他のエレメントの値の計算に使用されます。計算結果の値が PIN マネージャに返されると、PIN マネージャによってその値が主要値アレイ (PINV) に書き込まれます。

各エレメントは周期的に、または繰り返し変換されます。つまり、各エレメントが変換され、データが PINV または PINW に保存されると、次にプロセス リスト マネージャによって再びプロセス リストが参照され、次に処理されるエレメントが確認されます。こうして処理は繰り返されます。

給与計算または休暇欠勤の計算処理が全て終了すると、その結果が適切な出力テーブルに書き込まれます。最初に PINV および PINW アレイが参照され、計算結果がデータベースに書き込まれます。次に、全てのポジティブ入力が参照され、ポジティブ入力の履歴レコードにデータが書き込まれます。最後に、後で遡及処理を行うためのデルタが作成されます。

画像: 計算処理

以下の図は、バッチ処理の計算フェーズを表しています。

計算処理

グローバル ペイロールのバッチ処理では、データの保存にアレイを使用します。アレイは、COBOL プログラムで処理中のデータを保存する一時テーブルです。処理が終了すると、プログラムによって一時アレイから適切な出力テーブルにデータが書き込まれます。

アレイの最大サイズを、PeopleSoft が提供しているプログラムで定義されているサイズより大きくしたい場合には、COBOL プログラムの修正が必要になります。アレイが小さすぎてデータがアレイに入らなくなると、エラー メッセージが表示されてバッチ処理は異常終了します。エラー メッセージ (MSGID-ARRAY-OFLOW) には、アレイ、およびそのアレイが定義されている COBOL ファイルが表示されます。これによって、どのファイルを修正する必要があるのかがわかります。

アレイの反復回数の増加

テーブルにアクセスするプログラムでは、特定のサイズのメモリ領域を割り当てて、通常 1 回の給与計算で使用される給与計算処理テーブルの詳細行をテーブル アレイに保存します。

適切なテーブル アクセス プログラムのアレイの反復回数を増やすことで、アレイの最大サイズを増加させることができます。

注: ここで詳しく説明する修正以外、グローバル ペイロールによって提供されている COBOL の修正は極力行わないことをお勧めします。

たとえば、GPCDPDM.CBL 内の修正前のコードを見てみましょう。

以下は、アレイおよびそのアレイに対応する、COUNT コントロール フィールドです。このフィールドの値を超過しない限り、処理が強制終了されることはありません。修正を行う際には、強調表示されている数字を両方とも同じ値に変更する必要があります。

05  L-PMT-COUNT           PIC 9999    VALUE 0   COMP.
         88  L-PMT-COUNT-MAX               VALUE 200.
05  L-PMT-DATA                        OCCURS 200
                                           INDEXED BY PMT-IDX.

ここでは、どのカレンダーの実行中にも、1 人の受給者について処理する支給の数が 200 を超えないものと想定されています。200 を超える支給が処理されると、エラー メッセージ (MSGID-ARRAY-OFLOW) が表示され、その給与計算処理は終了します。

このアレイは処理する受給者が変わるたびにデータのロードとリフレッシュが行われますが、支給ごとにリフレッシュされるアレイや、処理全体を通してロードとインクリメントが行われるアレイもあります。

グローバル ペイロールの新規リリースにアップグレードする際、PeopleSoft からまったく新しいソース コードのセットが提供される場合でも、このタイプの修正は難しくありません。アレイ サイズの修正を新しいコード行に移動するだけです。アレイのサイズを修正したときは、必ずグローバル ペイロール COBOL コード行 (GPP*) 全体を再コンパイルする必要があります。

給与計算または休暇欠勤のバッチ処理実行の最終目的は、一連の出力テーブルを作成することです。この出力テーブルには、重要なバッチ処理の結果が保存されます。グローバル ペイロールで作成した出力テーブルに保存されている情報のタイプがわかっていれば、これらのテーブルを使ってそれぞれの組織のニーズに対応したレポートを作成したり、その他の方法でデータを加工したりすることができます。

画像: バッチ処理出力テーブル間の関係

以下の図は、バッチ処理の出力テーブル間の関係を表しています。

バッチ処理出力テーブル間の関係

受給者選択処理で作成されるテーブル

受給者選択処理によって、以下のテーブルが作成されます。

  • 受給者処理ステータス レコード (GP_PYE_PRC_STAT)。

    カレンダーごとに、EMPLID と EMPL_RCD の組み合わせそれぞれについて、受給者処理ステータス レコードが 1 つあります。

    受給者処理ステータス レコードと受給者セグメント ステータス レコードとの関係は 1 対 1 または 1 対多です。

  • 受給者セグメント ステータス レコード (GP_PYE_SEG_STAT)。

    受給者セグメント ステータス レコードは、受給者処理ステータス レコードの子レコードです。カレンダー内の総額/純額の計算ごとに、受給者セグメント ステータス レコードが 1 つ存在します。

エレメント結果を保存するテーブル

以下のテーブルに、エレメント結果が保存されます。

  • 支給/控除 (GP_RSLT_ERN_DED)。

    バッチ処理終了後の支給および控除のエレメント結果が保存されます。

  • その他のエレメント (GP_RSLT_PIN)。

    休暇付与エレメントの結果など、バッチ処理終了後の各種エレメントの変換結果が保存されます。

累計結果を保存するテーブル

累計テーブル (GP_RSLT_ACUM) には、バッチ処理終了後の累計結果が保存されます。

デルタを保存するテーブル

デルタ テーブル (GP_RSLT_DELTA) に、デルタが保存されます。デルタとは 2 つのエレメント結果の間の差分のことです。このデータは、遡及処理の際に重要になることがあります。このテーブルは、受給者セグメント ステータス テーブル (GP_PYE_SEG_STAT) の子テーブルです。受給者セグメント ステータス テーブルは受給者処理ステータス テーブル (GP_PYE_PRC_STAT) の子テーブルです。

ポジティブ入力の結果を保存するテーブル

以下のテーブルに、ポジティブ入力の結果が保存されます。

  • ポジティブ入力データ (GP_RSLT_PI_DATA)。

    バッチ処理終了後のポジティブ入力計算の結果が保存されます。計算で使用されたポジティブ入力行だけがこのテーブルに含まれます。

  • ポジティブ入力サポート エレメント上書き (GP_RSLT_PI_SOVR)。

    バッチ処理終了後のサポート エレメント上書きの結果が保存されます。

  • 休暇欠勤日次データ (GP_RSLT_ABS)。

    休暇欠勤日時データの結果が保存されます。