この記事を読むメリット
- SAPのテーブル更新ダイアログの概要が理解できます
- T-CODE:SE54を使用したテーブル更新ダイアログの作成方法が習得できます
博士!
T-CODE:SM30を使ってテーブルを更新できるようにするにはどうすればいいの?
アドオンテーブルを作ったはいいものの、ユーザにT-CODE:SE16Nの権限を渡すこともできないし、「データはどうやってメンテナンスさせるの?」と一度は疑問に思ったことがあるかもしれません。
SAP標準のテーブル更新機能(T-CODE:SM30)は、きちんと設計されたテーブル更新ダイアログさえ用意しておけば、追加開発なしでユーザメンテナンスの土台を用意できます。
そのテーブル更新ダイアログを生成・管理するのが、今回解説する T-CODE:SE54(テーブル/ビュー・ジェネレータ)です。本記事では、「そもそも更新ダイアログとは何か」という概念から、「SE54を使った作成手順」まで、実務目線で整理して解説していきます。
この記事のポイント
テーブル更新ダイアログとは
テーブル更新ダイアログとは、データベーステーブルに対して、直接SQLやデータブラウザ(SE16など)を使用せず、SAP上の画面(T-CODE:SM30)を通じて安全にデータを操作するための仕組みです。
現場では「更新ビュー」と呼ばれることも多いですが、本記事ではSAP標準の定義に則り「テーブル更新ダイアログ(Table Maintenance Dialog)」と呼びます。
※SAP上では一部「テーブル更新ジェネレータ」と表記されているところもあります。
SE54を実行すると、システムは自動的に以下のオブジェクトを生成します。
- Dynpro(画面): 一覧画面や詳細入力画面。
- 汎用モジュール: データの読み込み、保存、チェックを行うロジック。
- GUIステータス: 保存ボタンや削除ボタンなどのメニューバー。
これらがパッケージ化されたものが「テーブル更新ダイアログ」です。
もっと詳しく💡
SE16N との違い
よくある質問として「SE16Nで編集モードを使えばいいのでは?」というものがあります。しかし、SE16N等のデータブラウザはあくまで「参照」が主目的です。編集機能は開発者や緊急対応用であり、以下のリスクがあります。
- 権限管理が粗い(テーブル単位の細かい制御が難しい)
- 入力チェックが効かない場合がある
- ログが不十分(誰が何を変更したか追いづらい)
対してテーブル更新ダイアログは、エンドユーザに開放することを前提とした「公式な業務機能」です。
テーブル更新ダイアログ関連のトランザクションコード
| T-CODE | 内容 |
|---|
| SE54 | テーブル更新ジェネレータが起動し、テーブル更新ダイアログを作成することができます。 |
| SM30 | テーブル更新ダイアログを実際に更新する時に使用します。この画面でテーブル参照・更新・移送の操作が可能です。 |
| SE11 | ABAPディクショナリが起動し、テーブル更新ダイアログの元となる透過テーブルやビューを作成できます。 |
| SE93 | 作成したSM30画面を、ユーザ専用のT-CODEとして割り当てる際に使用。 |
テーブル更新ダイアログの登録方法
1. 作成手順:事前準備(SE11)
今回は事前に作成したテーブルを使っていくぞい!
アドオンテーブルの作成方法から知りたい方は以下の記事を参考にするのじゃ!
あわせて読みたい
【SAP基礎】アドオンテーブルの作成方法(T-CODE:SE11)
この記事を読むメリット SAPのテーブルの概要が理解できます T-CODE:SE11を使用したテーブルの作成方法が習得できます SAPは標準機能だけで業務が回れば理想的ですが、…
出荷および更新(Delivery and Maintenance)タブの設定
T-CODE:SE54を起動する前に、T-CODE:SE11(テーブル定義)側で絶対に済ませておかなければならない設定があります。
ここが漏れていると、T-CODE:SE54でエラーになったり、作成しても編集ができない状態になります。
T-CODE:SE11 で対象のアドオンテーブルを確認した時に「出荷および更新」タブ > データブラウザ/テーブルビュー更新 (Data Browser/Table View Maint.) が以下の設定になっている必要があります。
データブラウザ/テーブルビュー更新:X (表示/更新許可)
これを選択してください。これ以外(「表示のみ許可」や「制限付で許可」)になっていると、SE54でダイアログを生成できません。
2.テーブル更新ダイアログの第一画面
T-CODE:SE11のメニューバーからユーティリティ(U) > テーブル更新ジェネレータ(M)を選択するか、T-CODE: SE54 を直接叩いてテーブル名を入力し生成済みオブジェクトを選択し登録ボタンを押下します。
ダイアログ生成画面が表示されますので、以下の項目を入力していきます。
2-1. 権限グループ
権限グループは、そのテーブルまたはビューの保守を、どの権限の枠組みで制御するか を表す設定です。
T-CODE:SM30 などでメンテナンスを行う際、ユーザがその画面を使えるかどうかの判定に関係します。
テーブルメンテナンスは便利な反面、業務データや設定値を直接変更できるため、
「誰でも触れてよいもの」と「限られた担当者だけが触るべきもの」を分けて考える必要があります。
その切り分けに使うのが権限グループです。
今回は、専用トランザクションコードによる利用経路の制御を前提にし、権限グループは &NC& (Not Classified)としています。ただし、より厳密にテーブル保守権限を分離したい場合は、T-CODE:SE54 で独自の権限グループを設定し、S_TABU_DIS 等で制御する設計が望ましいこともあります。
2-2. 汎用グループ
今回は新しく作成した汎用グループ: ZSDFMG0001 を使用しています。
SE54を実行すると、内部的にABAPプログラム(画面やロジック)が自動生成されます。そのプログラムを格納する箱のようなものが汎用グループです。
既存の汎用グループに相乗りすることも可能ですが、メンテナンス画面用のコードは意外とボリュームがあります。他のアドオンロジックと混ざると管理が複雑になるため、「メンテナンス画面専用の汎用グループ」を切り出すのがベストプラクティスです。
2-3. 更新タイプ
更新タイプは、テーブルメンテナンス画面をどのような画面遷移・入力方式で使わせるか を決める設定です。代表的には「1ステップ」と「2ステップ」があります。
これは単なる見た目の違いではなく、ユーザがデータをどのように閲覧し、どの画面で変更するか という運用そのものに関わります。
1ステップでは、一覧画面上でそのままデータの参照・入力・修正ができます。
つまり、ユーザは一覧形式で複数レコードを見ながら、その場で追加・変更を行えます。
2ステップでは、一覧画面でダブルクリックし手選択した1レコードの詳細画面に遷移することができます。T-CODE:SM30で見たときの画面は、下記の様な違いがあります。
もっと詳しく💡
今回この方式を選んだ理由は、
対象データが 一覧で見ながらメンテナンスした方が分かりやすく、個別詳細画面に遷移する必要性が低い と判断したためです。
たとえば、下記の様なケースでは、1ステップが非常に相性の良い選択になります。
- 項目数がそれほど多くない
- 一覧比較しながら登録したい
- まとめて複数件を保守したい
- ユーザにとって Excel 的な一覧操作の方が直感的
逆に、下記の様なケースでは、2ステップのが好ましいときがあります。
- 項目数が多く、一覧に収まらない
- 1件ずつ詳細画面で丁寧に編集させたい
- 入力項目が多く、一覧編集だと見づらい
- 詳細単位での確認や制御が必要
なお、画面番号は 9000 が必須というわけではなく、機能グループ内で未使用の番号を指定できます。ただし、保守性や慣例の観点から、TMG では 9000 系の番号を使うことが多いです。
3.テーブル更新ダイアログの生成と変更
上記の入力が完了できれば、あとは登録ボタンを押下しテーブル更新ダイアログを生成します。
生成できればT-CODE:SM30でメンテナンスを行うことが可能になります。
また、変更したい時はT-CODE:SE54の画面で「登録/変更」ボタンを押下し、変更を行った後に保存ボタンを押下します。
変更理由を選択するポップアップが表示されますので、適当なものを選択しOKボタンを押下すれば完了です。今回は、更新タイプを1ステップから2ステップに変更しています。
テーブル更新ジェネレータの関連テーブル
| テーブルID | テーブル内容 |
|---|
| TVDIR | テーブルメンテナンスジェネレータの設定情報 (どのテーブル/ビューに対して TMG が生成されているか) |
| TDDAT | テーブルメンテナンスの許可・分類情報 ここを通じて SM30 / 権限制御とつながっていきます。 |
関連テーブル
まとめ
本記事では、「そもそもテーブル更新ダイアログ(TMD)とは」という概要レベルから作成方法まで詳しく解説してきました。
T-CODE:SM30は知っていても、その裏でテーブル更新ダイアログが作成されていることを知らない運用者も多いかと思います。
本記事が、SM30で更新できるものとできないものの違いがテーブル更新ダイアログの有無であることはもちろん、その作成方法を学ぶのにお役に立てれば幸いです!