ABAP アドオンテーブルの作り方

  オブジェクト

アドオンテーブルとは?

名前の通りアドオン(Add-On)で作るテーブルです。
SAPが用意している標準テーブルは実現できない各社独自の要件を実現するために作る事が多いテーブルです。

作成手順

以下アドオンテーブルの作る手順について記述します。
まずはトランザクション:SE11(ABAP ディクショナリ)を実行します。

テーブル名の決め方

DBテーブルの入力欄に作成したい名称を入力します。
テーブル名は16桁まで入力可能です。入力できる文字はルールがあり、アドオンテーブルはY始まり、Z始まりで作成する必要があります。
Yは検証用、Zは本番用等といったルールを持っている企業が多いと思います。
また、Z_TESTやZA_TESTといった風に_(アンダーバー)を2桁目、3桁目に入力できないよう制限がかかっています。
名称の入力が終わったら、「登録」ボタンを押します。

出荷と更新タブ

最初に「出荷と更新」のタブが表示されますが、その前に「内容説明」にテーブルの名称を入力しましょう。
次に「出荷と更新」タブで出荷クラスを入力します。いくつか選択肢がありますが、「A:アプリケーションテーブル(マスタ/トランザクションテーブル)」で良いと思います。

次に「データブラウザ/テーブルビュー更新」を入力します。プログラム等での更新のみを許可するのであれば「空白:照会/更新 – 制限付で許可」、ユーザーやシステム管理者がメンテナンスするのであれば「X:照会/更新 – 許可」で良いと思います。「N:照会/更新 – 不許可」は更新だけでなく、照会もできなくなってしまう為、使いどころが思いつきません。

これらの値を入力すれば次に「項目」タブへうつります。

項目タブ

テーブルの項目を入力します。要件に合わせて必要な項目を追加してください。
項目名には任意の名前を入力します。プライマリーキーであればKey欄のチェックボックスをつけます。次にその項目の型を入力します。データエレメントを参照する場合は、データエレメント列にその名前を入力します。独自の型をつける場合は、「事前定義済データ」を選択すると、データの型、長さ、少数点、内容説明が入力可能になるので必要な定義を入力してください。

また、項目名の1行目にMANDT(クライアント)を入れるかどうかで、クライアント依存、クライアント非依存が決まります。
次に「通貨/数量項目」にうつります。

通貨/数量項目タブ

金額の項目や、数量の項目を定義していない場合は入力不要ですのでスキップしてください。定義している場合は、該当の項目の参照テーブル、参照項目が入力可能となっていますので、参照したい通貨コードや数量単位を入力してください。他のテーブルの通貨コードや数量単位も参照可能ですが、どうゆう仕組みで参照されているのかが不明なので、基本的にテーブル内の項目として通貨コード、数量単位を持たせる事が多いです。
次に「技術設定」のボタンを押します。

技術設定

「論理記憶粋パラメータ」の「データクラス」を選択します。
マスタデータであれば「APPL0」、伝票等のトランザクションデータであれば「APPL1」で良いと思います。
次に「サイズカテゴリ」を選択します。テーブルに格納予定のデータボリュームを予想し選択してください。
超えたからといって保存できなくなるわけではない為、予想ボリュームで良いです。
他にも項目がありますが、基本はデフォルトで問題ありません。
入力が終われば一度「保存」ボタンを押し、次に「戻る」ボタンで戻ってください。
次に「有効化」ボタンを押せばテーブルの完成です。

上記の手順の場合、拡張カテゴリに関して警告が表示されると思います。
設定していないくても問題ありませんが、移送時の警告表示が好ましくないのであれば「補足」->「拡張カテゴリ」から設定を行ってください。

拡張カテゴリ

APPEND構造にて拡張可能なデータ型の種類を選択できます。
拡張不可であればAPPEND構造は追加できないと思っていれば良いと思います。
ただ、アドオンテーブルにおいてAPPEND構造で項目を拡張する必要はあまりない為、どの設定でも問題ないと考えられます。

APPEND構造とは

前述したようにアドオンテーブルで使う用途はあまりなく、標準テーブルに対して拡張する際に使用される事がほとんどだと思います。
また標準テーブルに対して直接変更(モディフィケーション)した場合、Note適用や、アップグレードのタイミングで消えてしまいます。APPEND構造であればその心配はないので、標準テーブルへの拡張をAPPEND構造を用いて実施しましょう。
また、項目を追加しただけでは値は格納されないので、User-Exit/BADI等で更新する為のロジックを記述しましょう。