TVARVCとはSAPの標準テーブルであり、主に変数IDとそれに保持させる値をセットで格納しておくためのテーブルだ。このテーブルに登録されている変数をTVARVC変数と呼ぶ。
プログラム実行中の変数はその処理に限り使用するものだが、TVARVC変数はDBテーブル上に保持することで、様々なプログラムから参照し値を取得するなど、処理を跨いで共通的に使用することができる。
このため特に日付や年度・月を保持させるのに適している。こうした日付は各種プログラムの処理で使用することになるため、「この変数を参照すればこういう値が取得できる」というものがあれば便利だ(各プログラムで個別に計算していては非効率)。
TVARVC変数は、画面バリアントの機能にて、画面上の項目に割り当てて自動的に値を読み込むという使い方もでき、これは標準機能内で用意されているものだ。
こうしたTVARVCに関わる機能は、設計や実装を行う際に欠かせない基礎知識となっているので、今回はTVARVC変数について解説する。
TVARVC変数の設定方法と使用目的
TVARVCのテーブル項目
テーブルTVARVCは以下のような項目レイアウトとなっている。
ここでは一例として、前月の最終営業日を保持する変数「ZS_PREV_LAST_WKDAY」という変数をテーブル登録した場合を図示する。
「選択値」の項目に、現在日を2021年1月としたときに、前月の最終営業日(会社により異なる)が格納されている。
選択タイプ
選択タイプにはS(Select Option)またはP(Parameter)がある。
Select Optionの場合は、範囲選択などのオプションとともに使用する変数となる。
Parameterの場合は主に単一値を設定する変数となる。
INCL/EXCL
Includeオプションとする場合はIを、Excludeオプションとする場合はEを選択する。
オプション
EQ (Equal)、NE (Not Equal)、BT (Between)といった形で2文字で指定する。
選択値(From – To)
「選択値」の項目は二つある。左側がFrom、右側がToを表す。
単一値のみ必要なのであれば、右側の選択値は空欄でよい。
TVARVC変数の使い方
冒頭で解説した通り、各種プログラムから共通的に参照可能な変数としてTVARVC変数を用意しておき、場合に応じて値を取得するのが主な用途となる。
とくに、あるていど複雑な計算が必要な日付を持たせるのに適している。
・前月の最終営業日(営業日は各社カレンダにより異なる)
・当月の給与支給日(毎月25日)からX営業日前(ただし25日休日の場合は更に一日前の営業日)
・夜間処理基準日
こうした日付は、給与計算や経理上の支払い締め日として用いたり、日を跨ぐような夜間処理を行う場合は処理日がバラバラにならないように「夜間処理基準日」を定めたりといった形で運用する。
さらに、月や日が変わるごとに変数の中身の値は更新していく必要がある。この更新処理も、TVARVC変数定期更新用のアドオンを作成し、日次でジョブを流すなどして更新を自動化する。
TVARVC変数の更新方法
手動で登録・更新する場合はTr:STVARVから実行することが出来る。
通常、TVARVC変数は無数に作成することになるので、ずっと固定値で運用するでもない限り、手動で更新するのではなく自動更新アドオンを用いることになる。
ちなみに、開発機で作成したTVARVC変数を移送で本番機に反映させても良い。
TVARVC変数の画面項目への割当
画面バリアントを保存する際に、項目に対してTVARVC変数のIDを割り当てることで、画面項目の値を自動的にTVARVCから読み込ませることが可能になる。
画面項目へのTVARVC変数の割当方法
画面バリアント登録時に属性設定の「選択可能」フラグをオンにし、画面上部の「選択変数」ボタンを押すことで、TVARVC変数の割当画面に行くことができる。
そこで割り当てたいTVARVC変数を入力する。
画面項目にTVARVC変数を割り当てるメリット
例えばある日付項目に対し、可変的に日付を割り当てたい場合があるとする。(「前月の最終営業日」といったように土日祝日の考慮が必要な、ある程度複雑な日付)
画面バリアントは素の値のまま保存すると、その値が固定値で採用されてしまう。
しかし当然のことながら、今月実行する場合と来月実行する場合では、日付の値は変えたい。
したがってTVARVC変数に「前月の最終営業日」などを保持させておき、その変数IDを画面項目に対して割り当てる、という手段を取る。こうすることで、画面バリアントを読み込むタイミングで、TVARVC変数の現在の値を自動で取得してくれる。
TVARVC変数を用いて可変的な値指定を行う
先述の通り、TVARVCは手動で毎回変更することもできるが、さすがに面倒なので、TVARVC変数は各プロジェクトで定期自動更新の仕組みを作ることになる。
定期自動更新とはつまり、TVARVC変数の自動更新用プログラムを作ることで、プログラム内で要件に沿った複雑な日付計算などを行う。(前月の最終営業日を求める場合は、現在のシステム日付を基準に、カスタマイズ済のSAPカレンダを使いつつ計算する)
そして、そのTVARVC変数の更新プログラムを提起実行するジョブを組むことで、自動更新の仕組みを作る。大方のプロジェクトでは、夜間ジョブの開始時点など、日次で動作するジョブに組み入れて日次更新をする仕組みを取っているのではないだろうか。
画面バリアントとTVARVC変数の関係を以下の図にまとめる。
ちなみにTVARVテーブルというものもあるがこれは旧いテーブルで、現在はTVARVCに置き換わっている。
豆知識だが、TVARVに登録した変数をTVARVCに転写するPGM:RSTVARVCLIENTDEPENDENTというプログラムも存在する。