（初）第四弾　ABAPー訓練「ALV／クエリ」

:writing_hand_tone1:[第三弾](https://qiita.com/luyu1567/items/df2c17dc02300757d646)
:writing_hand_tone1:[SAP 訓練目次](https://qiita.com/items/dd1fdf83a42f90a78c6e)
#１．ALV
構築図：
![alv_cmm_001.gif](https://qiita-image-store.s3.amazonaws.com/0/185058/6aa5ed15-c5b6-1c2e-3ecc-651752db7dd6.gif)
##１．１種類
- REUSE_ALV_GRID_DISPLAY
- REUSE_ALV_LIST_DISPLAY

##１．２実装順序（例：REUSE_ALV_GRID_DISPLAY）

**１．３．３＜REUSE_ALV_GRID_DISPLAY＞**
　　　　👇
　　**１．３．４＜LAYOUT＞**
　　　　👇
　　**１．３．５＜FIELDCAT＞**
　　　　👇
　　**１．３．６＜VARIANT＞**
　　　　👇
　　**１．３．７＜OUTTAB＞**

##１．３実装
###１．３．１データ型グループ

```ruby:ABAP

TYPE-POOLS:slis

```

###１．３．２ソーステンプレート

```ruby:ABAP
REPORT レポート名.
TYPE-POOLS:slis.

************************************************************************
* 内部テーブル
************************************************************************

************************************************************************
* 構造
************************************************************************

************************************************************************
* 変数
************************************************************************

************************************************************************
* 選択画面
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-t01.
SELECT-OPTIONS     s_ FOR v_ OBLIGATORY.
SELECT-OPTIONS     s_ FOR v_.
SELECTION-SCREEN END OF BLOCK b01.

************************************************************************
* 初期化
************************************************************************
INITIALIZATION.
  CLEAR: 内部テーブル

************************************************************************
* 主処理
************************************************************************
START-OF-SELECTION.

*- データ取得

*- データ編集

*- バリアント設定

*- レイアウト設定　

*- フィールドカタログ

*- ALV表示

```
###１．３．３＜REUSE_ALV_GRID_DISPLAY＞

```ruby:ABAP
*- テンプレートの上にどんどん実装します。
*- ALV表示
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      is_layout          = gw_***　  "レイアウト
      it_fieldcat        = gi_***　  "フィールドカタログ
      is_variant         = gw_***　  "バリアント
    TABLES
      t_outtab           = gi_***    "表示データ
* EXCEPTIONS
*     PROGRAM_ERROR      = 1
*     OTHERS             = 2
    .
  IF sy-subrc <> 0.
*- 失敗の場合は該当的な処理を追加してください。
  ENDIF.
```

###１．３．４＜LAYOUT＞

```ruby:ABAP
*-  ALV
DATA: gw_layout   TYPE slis_layout_alv.      "レイアウト

gw_layout-zebra  = 'X'.                    "縞模様
gw_layout-colwidth_optimize = 'X'.         "項目長にあわせる
gw_layout-window_titlebar   = sy-title.    "ALV枠のタイトル

```

###１．３．５＜FIELDCAT＞

```ruby:ABAP

*- ALV
　DATA: gi_fieldcat TYPE slis_t_fieldcat_alv.  "フィールドカタログ

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = sy-repid
*      i_internal_tabname =
      I_STRUCTURE_NAME   = 'ZSTU_GRADE'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_INCLNAME         =
*     I_BYPASSING_BUFFER =
*     I_BUFFER_ACTIVE    =
    CHANGING
      ct_fieldcat        = gi_fieldcat
* EXCEPTIONS
*     INCONSISTENT_INTERFACE       = 1
*     PROGRAM_ERROR      = 2
*     OTHERS             = 3
    .
  IF sy-subrc <> 0.
*- 失敗の場合は該当的な処理を追加してください。
  ENDIF.
```

###１．３．６＜VARIANT＞

```ruby:ABAP
*- ALV
DATA: gw_variant  TYPE disvariant.           "バリアント
gw_variant-report    = sy-cprog.
gw_variant-username  = sy-uname.
```

###１．３．７＜OUTTAB＞

```ruby:ABAP

DATA: gi_ZSTU_GRADE TYPE TABLE OF ZSTU_GRADE.

  SELECT * INTO TABLE gi_ZSTU_GRADE
    FROM ZSTU_GRADE
   WHERE ZSTUD_NO IN s_stud_no
     AND ZGRADE IN s_grade.

*- s_stud_no
*- SELECT-OPTIONS     s_stud_no FOR v_stud_no OBLIGATORY.
*- SELECT-OPTIONS     s_grade FOR v_grade.
```
###１．３．８実装サンプル

```ruby:ABAP
*&---------------------------------------------------------------------*
*& Report  ZALV_STUD_LIST01
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZALV_STUD_LIST01.
TYPE-POOLS:slis.

************************************************************************
*  宣言定義 
************************************************************************
DATA:
    GW_STUD     TYPE ZSTUDENT01,
*- ALV
    gw_variant  TYPE disvariant,           "バリアント
*- ALV
    gi_fieldcat TYPE slis_t_fieldcat_alv,  "項目設定
*-  ALV
    gw_layout   TYPE slis_layout_alv,      "レイアウト
    gi_stu      TYPE TABLE OF ZSTUDENT01.

************************************************************************
* 内部テーブル
************************************************************************

************************************************************************
* 定数
************************************************************************

************************************************************************
* スクリーン選択
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-t01.
SELECT-OPTIONS     s_class FOR GW_STUD-ZCLASS01 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b01.

************************************************************************
* 初期化処理
************************************************************************
INITIALIZATION.
  CLEAR: GW_STUD.

************************************************************************
*メイン処理
************************************************************************
START-OF-SELECTION.

*- データ取得
PERFORM FRM_DATA_GET.
*- データ編集

*- バリアント設定
  PERFORM FRM_ALV_VAR.
*- レイアウト設定
  PERFORM FRM_ALV_LAYOUT.
*- 項目設定
  PERFORM FRM_ALV_FIELDCAT.
*- ALV出力
  PERFORM FRM_ALV_OUTPUT.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ALV_OUTPUT .
*- ･ﾆ･ﾗ･・`･ﾈ､ﾎﾉﾏ､ﾋ､ﾉ､ﾉ､gﾗｰ､ｷ､ﾞ､ｹ｡｣
*- ALV表示
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      is_layout          = gw_layout    "レイアウト
      it_fieldcat        = gi_fieldcat  "項目設定
      is_variant         = gw_variant   "バリアント
    TABLES
      t_outtab           = gi_stu    "表示用内部テーブル
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
*- 例外処理
  ENDIF.
ENDFORM.                    " FRM_ALV_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ALV_LAYOUT .

  gw_layout-zebra  = 'X'.                    "シマウマ表示可否
  gw_layout-colwidth_optimize = 'X'.         "列サイズ自動可否
  gw_layout-window_titlebar   = sy-title.    "ALVタイトル

ENDFORM.                    " FRM_ALV_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ALV_FIELDCAT .

  PERFORM FRM_SET_FIELDCAT.


ENDFORM.                    " FRM_ALV_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_VAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ALV_VAR .

gw_variant-report    = sy-cprog.
gw_variant-username  = sy-uname.
ENDFORM.                    " FRM_ALV_VAR
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .

  DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  CLEAR gi_fieldcat.

*
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZNO01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t02.

  APPEND LS_FIELDCAT TO gi_fieldcat.

  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZNM01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t03.

  APPEND LS_FIELDCAT TO gi_fieldcat.


  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZBIRTHDAY_DT01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t05.

  APPEND LS_FIELDCAT TO gi_fieldcat.

  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZADDRESS01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t06.

  APPEND LS_FIELDCAT TO gi_fieldcat.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZCONTACT01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t07.

  APPEND LS_FIELDCAT TO gi_fieldcat.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZCLASS01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t04.

  APPEND LS_FIELDCAT TO gi_fieldcat.

    CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZCREATE_DT01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t08.

  APPEND LS_FIELDCAT TO gi_fieldcat.

      CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZCREATER01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t09.

  APPEND LS_FIELDCAT TO gi_fieldcat.

        CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZUPDATE_DT01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t10.

  APPEND LS_FIELDCAT TO gi_fieldcat.

          CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME    = 'ZUPDATER01'.
  LS_FIELDCAT-TABNAME      = 'ZSTUDENT01'.
  LS_FIELDCAT-SELTEXT_S = text-t11.

  APPEND LS_FIELDCAT TO gi_fieldcat.
ENDFORM.                    " FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_GET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DATA_GET .
  SELECT * INTO TABLE gi_stu
    FROM ZSTUDENT01
   WHERE ZCLASS01 IN s_class.
ENDFORM.                    " FRM_DATA_GET
```
#２．クエリ
##２．１実装順序
**２．２クエリ領域**
　　　👇
**２．３ユーザグループ**
　　　👇
**２．４インフォセット**
　　　👇
**２．５クエリおよびインフォセットクエリ**

##２．２クエリ領域の設定（グローバル・ローカル）
- メニューから設定する

##２．３ユーザグループの設定
- Tr-Cd:SQ03
- ZSTU_GRPを作る

##２．４インフォセット
- Tr-Cd:SQ02
- InfoSet:ZSTUDENT_LIST「インフォセット：表題およびデータベース」
  - [x] 基本テーブル使用テーブル結合:ZSTUDENT ⇒全項目
  - [ ] テーブル直接読込
- ⇒「結合」ボタンでZSTU_GRADEを追加する
- 赤〇を実行すると「インフォセット ZSTUDENT_LIST が生成されました」

- 「ロール/ユーザグループ割当」ボタン
　　⇒ZSTU_GRPにZSTUDENT_LISTを割当する

##２．５クエリおよびインフォセットクエリ
- Tr-Cd:SQ01
-選択項目と出力項目を設定する
-「出力」ボタンでクエリを作る
- [実行（F8）]を押下する

:writing_hand_tone1:[第五弾](https://qiita.com/luyu1567/items/11abae036e5f3cb70d4b)
:writing_hand_tone1:[SAP 訓練目次](https://qiita.com/items/dd1fdf83a42f90a78c6e)