SAP ABAP テーブルコントロールの例
⚡ スマートサマリー
SAP ABAPテーブルコントロールは、画面に組み込まれた画面上にスクロール可能なグリッドとして内部テーブルを表示します。 Painterこのページでは、その機能、CONTROLS宣言、カーソル処理、PBOループとPAIループ、および列属性について説明します。

テーブルコントロールとは何ですか SAP ABAP?
テーブルコントロールとステップループは、Screen 内の画面に追加する画面テーブル表示用のオブジェクトです。 Painter.
プログラミングの観点から見ると、テーブル コントロールとステップ ループはほぼ同じです。 テーブル コントロールは、デスクトップ アプリケーションのテーブルに関連付けられたルック アンド フィールでデータを表示する、単純に改良されたステップ ループです。
ABAPテーブルコントロールの特徴
テーブル コントロールを使用すると、ユーザーは次のことが可能になります。
- 表を垂直方向および水平方向にスクロールします
- 列の幅のサイズを変更する
- フィールド内をスクロールします (フィールドの内容がフィールドよりも広い場合)
- テーブルの行または列を選択します
- 列の順序を変更する
- 将来使用できるように現在の表示設定を保存します
テーブル コントロールは、テーブルを見やすく使いやすくする特別な書式設定機能 (一部は自動、一部はオプション) も提供します。 テーブル コントロールが提供するのは –
- ユーザーがウィンドウのサイズを変更したときのテーブルの自動サイズ変更 (垂直および水平)
- 行間および列間の区切り線 (垂直および水平)
- すべての列の列ヘッダー フィールド
一般的に、テーブルコントロールが提供する機能の多くは、システムの SAPGUIフロントエンドなので、自分でプログラムする必要はありません。唯一の注目すべき例外は垂直スクロールです。.
例 (トランザクション TZ60)
上記のトランザクションTZ60は、列ヘッダー、区切り線、選択列を含むグリッドという最終結果を示しています。以前のステップループとの違いを以下にまとめます。
テーブルコントロールとステップループの比較
ステップループの特徴の一つは、テーブルの行が画面上で複数行にまたがることができる点です。一方、テーブルコントロールの行は常に1行に収まる必要があります(スクロールは可能ですが)。下の表は、これら2つの画面要素を比較したものです。
| 基準 | テーブルコントロール | ステップループ |
|---|---|---|
| 行レイアウト | 1行は常に1画面行です | 1行が複数の画面行にまたがる場合があります |
| 列の処理 | 列はユーザーがサイズ変更、並べ替え、非表示にすることができます。 | 画面上に定義された固定列レイアウト |
| スクローリング | フロントエンドによる水平スクロール、PAIでプログラムされた垂直スクロール | すべてABAPコードでプログラミングされています |
| 宣言 | コントロール…画面を使用したテーブルビューのタイプ | プログラムには制御構造がありません |
| ディスプレイの設定 | ユーザーは個人用のレイアウトを保存できます | 無し |
テーブルコントロールは現代的な要素であるため、このページの残りの部分はテーブルコントロールに関するプログラミングを行います。
テーブルコントロールの作成とプログラミング方法
テーブルコントロールには、画面要素、プログラム内の制御構造、そしてPBOとPAIの両方におけるループが必要です。以下のサブセクションでは、この順序で説明します。
支配権を宣言する
ABAP プログラムでテーブル コントロールを処理するには、次のステートメントを使用して、プログラムの宣言部分で各テーブル コントロールのコントロールを宣言する必要があります。
CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>
どこABAP プログラムの画面上のテーブル コントロールの名前です。 このコントロールにより、ABAP プログラムはテーブル コントロールの属性を読み取り、コントロールに影響を与えることができます。 テーブルの初期値がロードされる画面番号です。
カーソル位置の設定と読み取り
テーブル コントロールのカーソル位置は、次の方法で設定できます。
PBO では、テーブル コントロールの特定の行の特定のフィールドにカーソルを設定できます。
SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>]
オプションの OFFSET オプションを使用すると、「カーソル位置の設定」で説明されているように、フィールドにカーソルのオフセットを入力できます。
PAIでは現在のカーソル位置を読み取ることができます。
GET CURSOR FIELD <f> LINE <lin> ...
「カーソル位置の確認」フィールドに記載されている情報に加えて、 カーソルが現在テーブル コントロールのどの行にあるかに関する情報が含まれます。 も使用できます
GET CURSOR LINE <lin>.
テーブルコントロールの行を特定するには、SY-SUBRC を使用します。SY-SUBRC を使用すると、カーソルがテーブルコントロールの行に配置されているかどうかを確認できます。
対応する内部テーブル行を読み込む
の対応する行を取得するには、 内部テーブル:
GET CURSOR line <lin>. ind = <table_control>-top_line + <lin> - 1. Read table <itab> index ind.
システム変数 stepl – ループ ... エンドループ内の現在のテーブル行インデックスが含まれます。 Loopc – テーブルに表示される行数が含まれます
画面にコントロールを作成する Painter
テーブル コントロールを作成するには
- 画面にテーブルコントロール要素を追加する
- テーブルコントロールに名前を付けます。ABAPプログラムでは、同じ名前の構造体を宣言します(コントロール) TABLEVIEW を画面上で使用する)
- フィールドを作成するには、「辞書/プログラムフィールド」機能を使用してください。
- フィールドが必要な構造の名前を入力します。 (プログラムの辞書から選択したい場合は、関連するボタンをクリックしてください)。
- フィールド リストで必要なフィールドを選択し、[OK] を選択します。
- テーブルコントロール領域をクリックします
選択列が必要な場合は、属性の適切なチェックボックスをオンにして名前を付けます。 ABAPプログラム.
PBOループとPAIループのコーディング
PBO には次のステートメントが必要です
LOOP at <itab> USING CONTROL <cntrl_name>. ENDLOOP.
PAIには必ずあるはずです。
LOOP at <itab>. ENDLOOP.
画面と内部テーブル間のデータ転送はループ内で行われます。内部テーブルにデータを格納するには、DESCRIBE TABLE を使用します。 LINES -lines は、コントロール内の行の総数を格納するために使用されます。FIELD ステートメントは、データ転送のタイミングを制御するために使用できます。
⚠️ 警告: PBOループでは、コントロールに「USING CONTROL」という名前を付ける必要があります。そうしないと、コントロールは行数を認識できず、垂直スクロールが機能しなくなります。
実行時に列属性を変更する
個々のセルの属性を変更するには、PBO の SCREEN テーブルを一時的に変更します。 CONTROLS ステートメントによって作成された構造体の属性を変更できます。
<cntrl>-fixed_cols etc are the attributes of the control <cntrl>-cols-index etc are the attributes of the columns. <cntrl>-cols-screen-invisible etc are the screen attributes of each column.
💡ヒント: ループオーバーPBO の -cols を使用して、2 番目の画面を作成するのではなく、特定のユーザー ロールに対して列を非表示または保護します。

