SAPにおけるちょっと特殊なテーブル「TVARVC(バリアント変数)テーブル」について初心者向けに解説します。
SAPコンサルを目指す方や、熟練のABAPerを目指す方であれば当たり前のように知っておきたい重要知識です。
是非最後までご覧ください。
SAP:TVARVCテーブルとは?
SAP標準テーブル「TVARVC」とは、バリアント変数をクライアント別に保持しているテーブルで、トランザクションコード:STVARV から「TVARVC」テーブルの値を、STVARVC からクライアント000の「TVARVC」テーブルの値を参照・変更することが可能です。
SAP標準テーブル「TVARVC」とは、バリアント変数をクライアント別に保持しているテーブルのこと。
そもそも、バリアント変数って?という方のために、基本から解説します。
バリアント変数とは?
バリアント変数とは、バリアントが参照している変数のことです。
バリアントとは、同じ選択条件で実行することが多いプログラムに対して、入力値のセットを保存させておくもの。
画面の項目ごとに値をセットしておき、バリアントを呼び出すことで複数項目の値を一気に入力する仕組みです。
そもそも「バリアント」の理解が自信ない・・・という方はこちらの記事をどうぞ!
例であげたように「日付」項目に対するバリアントも存在しますが、毎日複数存在するバリアントの日付を1から修正するのは大変です。そこで、考えられたのがバリアント変数。
バリアント定義の画面から、「変数名」項目にセットして利用します。
例であげた「ZAA01」の値を「2020/04/01」に変えてあげれば、画面に表示される日付も「2020/04/01」に変更されるという仕組み。
複数のバリアントが1つのバリアント変数を参照することが可能なので、1つのバリアント変数を変えれるだけで複数バリアントの日付項目の一括変更が行えます。
そして、このバリアント変数の値を保持しているのが「TVARVC」テーブルです。
TVARVC:「クライアント固有」のバリアント変数
「TVARVC」テーブルは、バリアント変数の値をクライアント固有で保持しています。
SAPでは、1つのシステム上に複数の環境を定義することができます。この複数の環境をSAPではクライアントと呼びます。
SAPのシステムランドスケープや「移送」の概要を理解したい方はこちらの記事をご覧ください。
クライアント固有で保持しているということは、例えばクライアント「100」でバリアント変数の値を変えてもクライアント「200」では変更が反映されないということになります。
今自分がログオンしているクライアントのバリアント変数の値はトランザクションコード「STVARV」から参照することができます。
クライアント「000」の「TVARVC」テーブル
一方で、クライアントに関係なくバリアント変数を登録・変更したい場合も存在します。このようなバリアントの場合、トランザクションコード「STVARVC」から登録・変更を行います。
「STVARV」と異なり、「STVARVC」を実行すると、クライアント「000」の「TVARVC」テーブルの値を参照しにいく仕組みです。
クライアント「000」とは、全てのマスタとなる(全てのおおもとの)クライアントです。ここに保存されているバリアント変更の値を変更すれば、全クライアントのバリアント変数が変更されます。例えば、システムバリアントが参照するバリアント変数であれば、トランザクションコード「STVARVC」から登録を行うのが王道です。
SAP標準テーブル「TVARVC」とは、バリアント変数をクライアント別に保持しているテーブルのこと。
これで、バリアント変数についての基本的な理解は以上です。
ABAPでバリアント変数を処理する場合の注意
バリアント変数をABAPプログラムから参照したり、値を変更したりする場合もあります。
* バリアント変数テーブル更新 UPDATE TVARVC SET LOW = 'sample' WHERE NAME = 'sample' AND TYPE = 'sample' AND NUMB = 'sample'.
簡単なUPDATE文ですが、このUPDATE文はプログラムが実行されたクライアントのバリアント変数の値だけを変更しています。
つまり、クライアント「000」のバリアント変数の値を更新しているわけではありません。
もし、クライアント「000」のバリアント変数の値を更新したい場合、以下のように「CLIENT SPECIFIED」オプションを利用し、対象クライアントを明示するのを忘れないようにしましょう。
* バリアント変数テーブル更新 UPDATE TVARVC CLIENT SPECIFIED SET LOW = 'sample' WHERE MANDT = '000' " クライアント000を指定 AND NAME = 'sample' AND TYPE = 'sample' AND NUMB = 'sample'
SELECT文の場合も同様です。
SELECT SINGLE LOW FROM TVARVC CLIENT SPECIFIED INTO (内部テーブル) WHERE MANDT = '000' AND NAME = 'sample' AND TYPE = 'sample' AND NUMB = 'sample'.
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!