TVARVCのバリアント変数が更新されない!?
バリアント変数を更新したにも関わらず、バリアント変数を読み込むと、更新前の値が取得されることはありませんか?
SAP Note 2285937 – The updated data for the table TVARVC can not be read にこの問題が記載されていますので、本記事ではその原因と解決策について解説していきます。
TVARVCとは
TVARVCとは、バリアント変数を格納するクライアント依存のテーブルです。
バリアント変数とは、バリアントに設定する変数のことです。
基本的にバリアントは固定値を設定しますが、バリアント変数を設定することで、変数に従ってジョブを実行できます。
通常はバリアント変数に日付(例:第1営業日/最終営業日)を設定し、アドオンの更新プログラムで要件に従い、バリアント変数の値を更新します。
また、下記の記事でバリアントについて解説していますので、合わせてご確認ください。
バリアント変数が更新されない原因
なぜバリアント変数が更新されなかったのでしょうか?
バリアント変数が更新されなかったわけではありません。
バリアント変数を更新したAPサーバとバリアント変数を読み込んだAPサーバが別々だったからです。
テーブル:TVARVCはSAP標準でテーブルバッファリングがONになっています。
テーブルバッファリングがONになっていると、APサーバはテーブルからバリアント変数の値を読み込むのではなく、APサーバ内のバッファから値を読み込むため、バッファにある更新前のバリアント変数の値が読み込まれたということです。
テーブルバッファリング設定はプロファイル:rdisp/bufrefmodeで管理し、バッファリング間隔(秒)はプロファイルパラメータ:rdisp/bufreftimeで管理されています。
更新されたバリアント変数を参照する方法
システムのバージョンにより解決策が異なりますので、バージョンごとの解決策について解説していきます。
SAP_BASIS < 750
SAP_BASIS < 750の場合、抜本的な解決策はありません。
バリアント変数を更新するAPサーバとバリアント変数を読み込むAPサーバが同一になるようにしてください。
それぞれが別ジョブになっているため、両方のジョブを特定のサーバで実行するように改修します。
バリアント変数を更新するAPサーバとバリアント変数を読み込むAPサーバを同一にできない場合、2つの方法があります。
1.汎用モジュール:BUF_GENERIC_RESET を使用し、テーブル:TVARVC のテーブルバッファを無効化します
2.テーブル:TVARVC のテーブルバッファをオフにします(非推奨)
SAP_BASIS >= 750
SAP_BASIS >= 750の場合、抜本的な解決策が用意されました。
SAP Note 2897019 – Invalid values when reading configured variant values in TVARVC due to not executed conversion exitを適用することで、新規設定テーブル:TVARVC_CONVEXITが導入されます。
このテーブルは指定された変数の読込動作を指定することができ、バッファをバイパスして変数を読み込むように設定されている場合はそのように実行されます。