【ABAP】ALV – 行選択ボタンの表示（サンプルコードあり）

<!-- wp:paragraph -->以前の投稿で、単純なALV表示するための汎用モジュールの使い方を説明しましたが、今回は行選択ボタンを追加してみます。

＜参考 － REUSE_ALV_GRID_DISPLAYの投稿＞

https://sapmemo.com/alvbasic/ 

GUIのバージョンによっては、テーマで「Belize」を選択できますが、その場合は行選択ボタンがチェックボックス形式で表示されます。同じものを表すのでご了承ください。

## 実装方法

### 汎用モジュールの使用パラメータ

```
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat   = it_fcat
      is_layout     = wa_layout
    TABLES
      t_outtab      = it_main
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.
```

汎用モジュールのEXPORTINGパラメータ「is_layout」を設定するだけです。

それでは、is_layoutパラメータの中身をどのように設定するかを見ていきます。

### パラメータの詳細設定

#### 表示データの構造に行選択ボタン用の項目追加

```
TYPES:
  BEGIN OF t_main.
    INCLUDE TYPE ytest0008.
  TYPES:
    box TYPE checkbox,
  END   OF t_main.

DATA: it_main TYPE TABLE OF t_main.
```

表示データ（t_main）の中で、事前定義した構造と行選択ボタン用の項目IDを宣言します。

今回は「BOX」としました。

では、構造自体に追加せずに、プログラムの中で分けて実装したのは何故でしょうか。

答えは、ALV表示したときに余計な項目が表示されるからです。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-18-1024x308.png)構造に「BOX」項目を追加してALV表示してみます。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-19-1024x59.png)行選択ボタンは表示されるのですが、同時にBOX項目まで表示されてしまうのです。

このように不要な項目が表示されるのを避けるため、あえてプログラム内で分けて実装をしています。

#### レイアウトパラメータに行選択ボタンを割り当てる

```
wa_layout-box_fieldname = 'BOX'.
```

レイアウトパラメータの中にある「box_fieldname」を使用します。

構造に定義した行選択ボタン用の項目IDをセットしてください。

全然関係ないIDをセットするとALV表示後のショートダンプを起こすので、名称を一致させるのが重要なポイントです。

## サンプルコード

```
REPORT ytest0008.

TYPES:
  BEGIN OF t_main.
    INCLUDE TYPE ytest0008.
  TYPES:
    box TYPE checkbox,
  END   OF t_main.

DATA: it_main TYPE TABLE OF t_main.
DATA: it_fcat TYPE slis_t_fieldcat_alv.
DATA: wa_layout TYPE slis_layout_alv.

START-OF-SELECTION.

  SELECT * FROM but000 INTO CORRESPONDING FIELDS OF TABLE it_main.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_structure_name       = 'YTEST0008'
    CHANGING
      ct_fieldcat            = it_fcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  wa_layout-box_fieldname = 'BOX'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat   = it_fcat
      is_layout     = wa_layout
    TABLES
      t_outtab      = it_main
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.
```

青字で記載した部分が行選択ボタンの表示に必要な実装です。

サンプルコードを実行した画面がこちらです。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-20.png)各行に選択ボタンが表示され、ツールバーには全選択/全解除ボタンが自動で表示されました。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-21.png)全選択ボタンを押すと全行選択されます。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-23-wpp1598021947397.png)全解除ボタンを押すと全行選択解除されます。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-24-wpp1598022074366.png)選択行の情報を表示データの内部テーブル項目（今回は「BOX」）に自動で更新してくれます。実装しなくてもここまでやってくれるのです。

## ALV表示後に画面を戻るとショートダンプが発生する場合の対応方法

このページの内容で新規にプログラム実装をした人は影響がないかもしれませんが、以前の投稿で紹介したサンプルプログラムを拡張して行選択ボタンを追加しようとした人はこんなショートダンプが発生したのではないでしょうか。

![](https://sapmemo.com/wp-content/uploads/2020/08/image-22-1024x428.png)これには原因があるのですが、行選択ボタンに限った話ではないので別の投稿でまとめることにします。

⇒こちらにまとめました。

[【ABAP】ALV – 項目追加しても一覧に表示されない場合の対策方法（サンプルあり）](https://sapmemo.com/alvaddfield/)

## まとめ

少しの実装でALV画面に行選択ボタンと全選択/全解除ボタンの表示ができることがわかっていただけたでしょうか。

ALVレポートの開発ではよく使う手法ですので参考にしてください。