You are on page 1of 5

このチュートリアルでは、編集可能なグリッドで特定のセルのみを有効にする方法を

示します。
まず、いくつかのデモ データを準備します。 素材とそのメンテナンス状況の一覧が表
示されます。 ステータスが「A」に設定されている場合、グリッドでのステータスの
編集を無効にします。
MATNR (タイプ MATNR、主キー) PSTAT (タイプ PSTAT_D)

123456K

654321E

567890D

876543 B

90 万 A

ここで、ALV グリッドを描画する画面 (つまり 0200) を持つ関数グループを作成しま


す。
画面レイアウト エディタでカスタム コンテナを作成し、GO_GRID_CONTAINER などの
名前を付けます。
また、UPDATE と UPDATE の 2 つの関数を使用してカスタム PF STATUS を作成します。
画面のフロー ロジックは単純です。
終了前のプロセス。
モジュール pbo_0200。

*
エントリー後のプロセス。
モジュール pai_0200。

PBO_0200 モジュールは、データの収集、フィールド カタログの作成、および ALV の表


示に使用されます。 ここにコードが続きます

モジュール pbo_0200 出力。


データ:
ls_layout タイプ lvc_s_layo,

ls_variant TYPE 不変。

フィールドシンボル:

<fs_fcat> タイプ lvc_s_fcat。

* このユーザー ステータスでは、次の 2 つの関数を作成します。

* UPDATE - すべての変更を保存し、グリッドを更新します
* UPDATE - Z テーブルのデータでグリッドを更新します

PF ステータス 'PF_STATUS' を設定します。

* コンテナとグリッドの初期作成

gr_container が初期の場合。

CREATE OBJECT gr_container


輸出
* これは、レイアウト エディターで作成したオブジェクトへの参照です。

container_name = 'GO_GRID_CONTAINER'.

* 親は上記で作成したコンテナです

オブジェクトの作成 gr_grid
輸出
i_parent = gr_container.

* 最も簡単なフィールド ディレクトリの作成

コール関数「LVC_FIELDCATALOG_MERGE」
輸出
i_structure_name = 'ZMATSTAT'
変更点
ct_fieldcat = gt_fieldcat.

*!!! 重要!!!

* 必要なすべての列を編集可能としてマークする必要があります!!!

READ TABLE gt_fieldcat ASSIGNMENT <fs_fcat> WITH KEY fieldname = 'PSTAT'.

<fs_fcat>-edit = abap_true.

* データベースからデータを読み込み、チェックを入れる

* R/O として適切なフィールド

EXECUTE reload_data.
* セル スタイルに関する情報を含むフィールド名を指定します (RW / RO)

ls_layout-stylefname = 'CELL_STYLES'.

ls_variant-report = sy-repid.

ls_variant-username = sy-unname.

*!!! 重要!!!

* ENTER イベントを登録して、マニュアルが変更されるようにします

* GT_DATA に伝搬されます

gr_grid->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ).

*ALV を描く

gr_grid->set_table_for_first_display(
輸出
is_layout = ls_layout

is_variant = ls_variant

i_save = 'A'

i_default = 'X'
変更点
it_fieldcatalog = gt_fieldcat

it_outtab = gt_data )。
停止について。
モジュールを終了します。 " PBO_0200 EXIT

モジュール PAI_0200 はユーザー インタラクションを処理するために使用され、ここで


はそのコードに従います
モジュール pai_0200 入力。
データ:
l_matstat TYPE zmatstat。

フィールドシンボル:

<fs_data> gt_data と同じ行。

CASE sy-ucomm.
「戻る」または「離れる」または「キャンセル」するとき。
画面 0 を設定します。

「更新」の場合。
* DB Z テーブルを更新

gt_data ASSIGN <fs_data> でループし、matn は初期ではありません。

対応する <fs_data> を l_matstat に移動します。

l_matstat から zmatstat を変更します。


エンドループ。

* データベースをリロードしてマークする

* R/O として適切なフィールド

EXECUTE reload_data.

gr_grid->refresh_table_display( )。

「リフレッシュ」するとき。
EXECUTE reload_data.

gr_grid->refresh_table_display( )。
ケースを終了します。
モジュールを終了します。 " PAI_0200 入力

ヘルパー FORM RELOAD_DATA は、データベースからデータを収集し、関連するフィー


ルドを読み取り専用としてマークするために使用されます
FORM reload_data.
データ:
l_lvc_s_styl タイプ lvc_s_styl。

フィールドシンボル:

<fs_data> gt_data と同じ行。

gt_data[] を削除します。

* データを読む

選択する *

テーブル gt_data の対応するフィールド


zmatstat から。

* データのすべての行をループし、PSTAT を入力します

* 値 = 'A' の場合は R/O として

gt_data でループ

ALLOCATES <fs_data>

WHERE pstat = 'A'.

l_lvc_styl-style = cl_gui_alv_grid=>mc_style_disabled.

l_lvc_styl-fieldname = 'PSTAT'.

* INSERT コマンドを使用する必要があります

* CELL_STYLES フィールドが SORTED TABLE であるため

INSERT l_lvc_styl INTO TABLE <fs_data> セル スタイル。


エンドループ。
最終形態。 "reload_data

ABAP から画面を呼び出すと、次のようになります。

You might also like