この記事を読むメリット
- SAPのテーブルの概要が理解できます
- T-CODE:SE11を使用したテーブルの作成方法が習得できます
SAPは標準機能だけで業務が回れば理想的ですが、現実のプロジェクトでは必ずと言っていいほど「独自のデータを保持したい」という要件が発生します。
その受け皿となるのが、アドオンテーブルです。
適切な「出荷クラス」の選択、初期値や外部キーなどの項目の各種設定、そしてパフォーマンスに影響する「技術設定」。前例踏襲で何気なく設定していませんか?
これらを疎かにすると、後々の運用や移送、データのメンテナンスで必ずトラブルになります。
本記事では、T-CODE: SE11を使用したアドオンテーブル(透過テーブル)の作成方法を、SAPスペシャリストが現場で実践している「鉄則」と共に解説します。
この記事のポイント
アドオンテーブルとは?
アドオンテーブルとは、その名の通り “アドオン” (Add-On)で作るテーブルです。
現場によって多少呼び方が異なることもありますが、SAPの標準機能では実現できない機能を1から開発することをアドオン(Add-on)と言います。
アドオンテーブルを作成する際は、「本当にそのテーブルが必要かどうか?」もしくは、「SAPの標準テーブルで同じような用途で利用されているテーブルはないか?」、「Append項目の追加で対応できないか?」などを事前に熟慮することが必要です。
*Append項目とは、既存の標準テーブルに対して機能拡張の目的で追加した項目です。
アドオンテーブルを作りすぎると、メンテナンスが大変になる、かつその分バグの可能性も高まるため要注意です。
もっと詳しく💡
SE11で作成するテーブルにはいくつか種類がありますが、アドオン開発で最も頻繁に作成するのが「透過テーブル(Transparent Table)」です。
透過テーブルとは、ABAPディクショナリ上の定義と、データベース上の物理テーブルが「1対1」で対応しているテーブルのことを指します。 つまり、T-CODE:SE11で項目 MANDT, BUKRS… と定義すれば、OracleやHANAなどのデータベース側にも全く同じ名前・同じ型のカラムを持つテーブルが自動生成されます。
SAP等のERPパッケージでは、複数の論理テーブルを1つの物理テーブルにまとめて格納する形式(プールテーブル/クラスタテーブル)が存在しました。それらに対し、データベースの中身が「透けて見える(そのままの形である)」ことから、透過テーブルと呼ばれます。 現代のHANA環境などでは、ほぼ全てのビジネスデータはこの透過テーブルで管理されます。
関連するトランザクションコード
| T-CODE | 内容 |
|---|
| SE11 | アドオン・SAP標準を問わず、テーブル、ビュー、データエレメント、ドメインなどどいったディクショナリオブジェクトを一元管理する機能 |
| SE16・SE16N | 作成したテーブルのデータを確認するための標準ブラウザ |
| SM30 | テーブル更新ダイアログを作成した後、エンドユーザがデータメンテナンスを行う画面 |
アドオンテーブルの作成方法
それでは、実際に 出荷伝票でプラントと保管場所を独自ロジックで自動提案するためのマスタを作ると想定して、アドオンテーブルを作成していきます。
手順は以下にまとめました。
手順
- T-CODE:SE11を開き、テーブル名を入力し登録ボタンを押下
- 内容説明・出荷クラスを入力
- 「項目タブ」で項目名やデータエレメントを定義
- 必要に応じて「入力ヘルプタブ」や「通貨/数量項目タブ」を定義
- 技術設定を定義
- 保存して有効化
それでは上から順に実際に試してみましょう!
T-CODE: SE11 を起動し、「データベーステーブル」に名称を入力して「登録」を押します。
最初に、遷移した画面の内容説明にテーブルの説明を記載します。
デフォルトで「出荷および更新」のタブが表示されていますので、まずはこのタブから説明していきます。
1. 出荷および更新タブの設定
1-1. 出荷クラス(Delivery Class)
このテーブルに格納されるデータの「性質」を定義します。間違えると移送時にトラブルになります。
代表的なクラスの説明を以下にまとめています。
今回は、ユーザがT-CODE:SM30で本番機で直接メンテナンスするテーブルの想定で「A(アプリケーションテーブル)」を選択しています。
「C」を選ぶと、SM30で更新しようとした時に「クライアント xxx は変更不可です」と怒られたり、強制的に移送依頼番号を求められたりします(設定で回避可能ですが、運用が複雑になります)。
代表的な出荷クラスの選択値
- A:アプリケーションテーブル
- トランザクションデータや、頻繁に変更されるマスタデータ。
- 基本的にデータは移送しない(本番機で作成)。
- C:カスタマイジング
- システム設定値や、滅多に変更しない制御マスタ。
- 開発機でデータを登録し、移送依頼に入れて本番へ運ぶ運用になる。
- L:一時データの保存
1-2. データブラウザ/テーブルビュー編集(Data Browser/Table View Maint.)
この設定は、T-CODE:SE16N(データブラウザ)やT-CODE:SM30(更新画面)での「扱い(更新の可否)」を決定します。単なる表示許可だけでなく、セキュリティや運用設計に直結します。
今回はT-CODE:SE16Nから更新できるようにしたいため「X」を設定しています。
更新の選択値
- X:照会/更新 – 許可
- SE16/SE16Nで表示可
- SM30(テーブル/ビュー保守)で更新可(※TMGがある、かつ権限がある前提)
- “汎用ツールで触ってよい”という最も緩い設定
- D:表示のみ可
- SE16/SE16Nで表示は可
- 更新は不可(汎用保守やSE16N編集の入口を抑止)
- 実務的には「参照は許すが、汎用ツールで更新させない」用途
- N:照会/更新 – 不許可
- SE16/SE16Nでの表示自体を不可に寄せる
- SM30等の汎用保守も不可
- セキュリティ/秘匿性が高い、または汎用ツール経由を禁止したいテーブル向け
- スペース:照会/更新 – 制限付で許可(Restricted allowed)
- SE16/SE16Nで表示は可
- 更新はSM30などの保守ダイアログ/TMG経由・権限グループ必須など制限付きで可
- SE16Nのような“汎用編集”の入口を抑止し、更新は正規の保守経路(SM30/TMGや専用トランザクション)に寄せたいときに使われます
2. 項目設定
次に、「項目」のタブでテーブルの項目を定義していきます。
今回は既にSAP側で用意されているデータエレメントやそれに紐づくドメインを使用していきますので、主に、項目名・KEY・初期値・データエレメントを入力してエンターを押すだけでデータ型やラベル名などが自動で各種定義が反映されます。
2-1. キー
キー項目は、データのユニーク性を担保する項目です(例:会社コード、伝票番号など)。
SAPのテーブルは基本的にクライアント依存です。
必ずクライアントMANDTは第1キーに設定してください。
もう1つの注意点として、文字列型の長い項目などをキーにしすぎるとパフォーマンスが落ちますのでご留意ください。
クライアントはSAP独自の概念じゃ
この記事を読むと理解が深まるぞい!
あわせて読みたい
【SAP基礎】SAPのシステム構成とクライアントについて解説!
この記事を読むメリット SAPのシステム構成について理解ができます。 SAPのクライアントについて理解ができます。 SAPを含めたシステム開発のプロジェクトでは開発する…
2-2. 初期値
初期値のチェックボックスですが、非常に重要な意味を持ちます。
- チェックあり (ON):
- データベース上で
NOT NULL 制約が付きます。
- データの入力がない場合、型の初期値(数値なら0、文字ならスペース)が自動的に入ります。
- キー項目(Primary Key)は必ずチェックを入れる必要があります。
- チェックなし (OFF):
- データベース上で
NULL を許容します。
- ABAPプログラムで扱う際、NULL値の扱いはバグの温床になりやすいため、基本的には全ての項目で「初期値」にチェックを入れるのがSAPのベストプラクティスです。
※ただし、APPEND構造で標準テーブルを拡張する場合など、制約上チェックを外す必要があるケースも存在します。
2-3. 外部キー
外部キーは、データの整合性を保つための機能です。 例えば、「会社コード」を入力する項目で、存在しない会社コード「9999」を入力できないようにしたい場合などに使用します。
- 効果:
- SM30などでデータを入力する際、自動的に値の存在チェックが行われ、不正な値(マスタに存在しない値)を入力するとエラーになります。
- 外部キーを設定すると、チェックテーブル側に定義されている入力ヘルプが自動的に有効になります。開発者がわざわざ検索ヘルプを割り当て直す手間が省け、エンドユーザの利便性が向上します。
- データモデルの可視化につながります。
- 設定方法:
- 項目を選択して「鍵マーク」のボタンを押します。
- 外部キーの設定ポップアップでチェックテーブルと各種設定内容を入力します。
2-4. 入力ヘルプ
入力ヘルプは、F4キーを押したときに表示される入力支援機能です。
標準のデータエレメントの多くは入力ヘルプが自動的に効きますが、標準で用意されていないものやアドオン項目に対しては、明示的に指定してあげる必要があります。
下記の例は、保管場所の項目に対して、SAP標準の保管場所の検索ヘルプを割り当てています。
*外部キーを設定すると、チェックテーブルの入力ヘルプが自動で割り当てられるので、一度外部キーを削除しています。
2-5. 通貨/数量項目の設定
今回の例では設定する必要はありませんが、金額(CURR)や数量(QUAN)項目を定義した場合、「通貨/数量項目」タブでの設定が必須となります。これを忘れると有効化時にエラーになります。
- なぜ必要なのか?:
- SAPには金額や数量は、それぞれ通貨や単位をセットで保持するコンセプトがあります。
例えば、「1,000」という数値だけでは意味がありません。「1,000 円」なのか「1,000 USD」なのかで価値が変わるからです(SAP内部では、日本円などの小数部を持たない通貨は1/100で保存される仕様があるため、通貨コードとの紐付けは必須です)。
- 設定内容:
- 参照テーブル: 通常は自分自身(作成中のテーブル名)を指定。
- 参照項目: 金額項目なら対になる「通貨コード(CUKY)」項目、数量項目なら「単位(UNIT)」項目を指定します。
あわせて読みたい
【SAP基礎】SAPの内部書式と外部書式について解説!
この記事を読むメリット SAPの内部書式(内部値)と外部書式(外部値)の概念および調査方法を理解することができます SAP独特のデータ構造である内部書式(内部値)と…
3. 技術設定
「項目を並べたから保存!」では終わりません。右上の「技術設定」ボタンを押し、データベースレベルの物理設定を行います。これを行わないとテーブルは有効化できません。
3-1. データクラスとサイズカテゴリ
データクラスは、このテーブルがデータベースの「どの領域(テーブルスペース)」に保存されるかを指定します。代表的なものは以下の3つです。
- APPL0 (マスタデータ): アクセス頻度は高いが、更新頻度は低いデータ。
- APPL1 (トランザクションデータ): 頻繁に更新・追加されるデータ。
- USER (ユーザデータ): アドオンテーブル用(迷ったらこれ、という現場も多いですが、データの性質に合わせてAPPL0/1を選ぶのが本来の推奨です)。
サイズカテゴリは、想定されるレコード件数を指定します。
これはデータベース側で「最初にどれくらいの領域(エクステント)を確保するか」を決めるパラメータです。 「とりあえずデカくしておけ」と適当に設定すると領域の無駄遣いになりますし、逆に小さすぎると「エクステントの拡張」が頻発して断片化の原因になります。3年後の想定件数くらいを見積もって設定しましょう。
3-2. バッファリング
バッファリングとは、データベースから読み込んだデータを、アプリケーションサーバのメモリ上に一時保存する機能です。
【バッファ許可の設定】
- バッファリング不可:
- 毎回データベースを見に行きます。
- トランザクションデータ(頻繁に更新されるデータ)は必ずこれにします。
- バッファリング可:
- 2回目以降のアクセスはメモリから読み込むため、超高速です。
- 「更新は稀で、参照が大量にあるデータ」に向いています。
バッファされたデータは、データベースが更新されても即座には反映されません(数分のラグがある場合があります)。そのため、「リアルタイムの正確性が命」のデータや、「頻繁に更新される」データでバッファを有効にすると、古いデータを読み込んでしまう事故が起きます。 「更新は稀で、参照が大量にあるデータ」だけをバッファするのが鉄則です。
4. 有効化
全ての設定が終わったら、開発者にお馴染みの有効化を実施します。
ここでは、有効化ボタン(マッチ棒のアイコン)を押した時、裏側では何が起きているのか以下に記載します。
- 整合性チェック: 定義に矛盾がないか(キー項目の並び、データ型の整合性など)をチェック。
- DDICオブジェクト生成: SAPのアプリ層(ABAP Dictionary)でオブジェクトが確定。
- データベーステーブル生成 (CREATE TABLE): ここが重要です。SAPは接続しているデータベース(Oracle, HANA, SQL Server等)に対して、SQLの
CREATE TABLE コマンドを発行し、物理的なテーブルを作成します。
つまり、有効化して初めて「データを入れられるテーブル」がデータベース上に誕生するのです。 既存のテーブル定義を変更(項目追加など)して有効化した場合は、ALTER TABLE が発行されます。
テーブル確認(T-CODE:SE16N)
それでは、有効化したテーブルが本当に生成されているか見に行きましょう!
T-CODE:SE16NはSAP標準のテーブル照会画面です。
テーブル名を入力しENTERを押下すると作成したテーブルの項目が展開されます。項目名が正しく表示されているか、検索ヘルプが正しく機能するかを確認することができます。
今回は、「データブラウザ/テーブルビュー編集」でデータ編集を許可していますので、下記の様に「エントリ更新」のチェックボックスが有効化されています。ここでチェックを押すと、テーブル照会画面で行挿入や削除といったアイコンが表示され、自由にデータを更新することができます。
あわせて読みたい
【SAP共通】テーブルデータを照会する方法まとめ
この記事を読むメリット テーブルに格納されているデータを検索・照会することができるようになります。 SAPに登録されているテーブルのレコードを確認したいんだけど、…
テーブル定義の関連テーブル
| テーブルID | テーブル内容 |
|---|
| DD01L | ドメインの定義情報(DD01Tがテキスト情報) |
| DD02L | テーブルの定義情報(DD02Tがテキスト情報) |
| DD03L | テーブル項目の定義情報(DD03Tがテキスト情報) |
| DD04L | データエレメントの定義情報(DD04Tがテキスト情報) |
| DD05S | 外部キーの定義情報のヘッダ(DD05Qが明細情報) |
| DD07L | ドメインの固定値/値範囲の定義情報 |
| DD09L | 技術設定の定義情報 |
あわせて読みたい
【SAP小ワザ】テーブル項目テーブル関連図
この記事を読むメリット テーブルの項目を一気に把握する方法を知ることができます。 SAPテーブルの中には面白いテーブルがたくさんあるが、今日は各テーブルのデータ項…
まとめ
T-CODE:SE11でのテーブル作成は、一見単純ですが、「出荷クラス」、「初期値のチェック」、「外部キーによるガード」、「バッファによる速度最適化」といった、データベース設計の根幹に関わる設定をなんとなく流していたり、前例踏襲的に何気なく設定したりしていませんか?
本記事は、実際に現場でアドオンテーブルの開発を行っている実務者視点でポイントを押さえながら解説してきました。少しでもSAPテーブルへの理解を深めるきっかけになれば幸いです。
次は、今回作成したテーブルをユーザがT-CODE:SM30でメンテナンスする画面を作成する方法について解説していく予定です。公開でき次第、こちらにリンクを追加しますので、是非併せてご一読くださいね!