唐突にALVテンプレート

ABAPをやっていて、ALVってどう作るんだろう、
という人にしか、役に立たないものだが、
ALV一覧を作るときのテンプレートである。


選択項目、テーブル抽出、出力定義を書けば、
一応ALVの一覧ができあがる、というもので、
私は結構使っているモノである。
多分他の人が使っても、役にたつのではないかなあ、
ということで、公開である。
なお、使用に関しては、皆様自己責任でお願いするのである。

report y00001 .

type-pools slis .

*テーブル宣言
tables : ....

*出力データ
types: begin of out_data,
   ....
end of out_data.

data: vi_out_data type table of out_data,     "出力
      wk_count type i .

*検索データ
data : begin of i_data occurs 0 ,
 .....
end of i_data .

*選択画面

select-options ....

*入力値チェック
at selection-screen .


*検索・表示
start-of-selection .

*テーブル検索
  perform get_data .
*データの編集
  perform edit_data .
*データ件数の確認
  clear wk_count.
  describe table vi_out_data lines wk_count .
  if wk_count = 0.
    message id ... "表示対象は0件です
  else.
    perform data_output.
  endif.


*&---------------------------------------------------------------------*
*&      form  data_output
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form data_output.

*項目指定
  data : it_fieldcat type slis_t_fieldcat_alv.
*レイアウト設定
  data : st_layout type slis_layout_alv.
*ソート基準
  data : it_sort type standard table of slis_sortinfo_alv,
         he_sort type slis_sortinfo_alv.
*レポートid
  data : l_repid like sy-repid.
*alvタイトル
  data : wk_title type lvc_title .

*レポートid設定
  l_repid = sy-repid.
*タイトル設定
  wk_title = ....
* レイアウトの指定
  st_layout-colwidth_optimize = 'X'. "列幅最適化
  st_layout-zebra             = 'X'. "ストライプパターン
  st_layout-f2code            = 'detail'. "クリック時のコマンド
  st_layout-expand_all        = 'X'.
  st_layout-get_selinfos = 'X'.

*各項目の属性指定
  perform set_property tables it_fieldcat .

*ソート基準の設定
  perform set_sort tables it_sort .

*出力
  call function 'reuse_alv_grid_display'
    exporting
*   i_interface_check                 = ' '
*   i_bypassing_buffer                =
*   i_buffer_active                   = ' '
      i_callback_program                = l_repid "戻り指定
*   i_callback_pf_status_set          = ' '
*   i_callback_user_command           = ' '
*   i_callback_top_of_page            = ' '
*   i_callback_html_top_of_page       = ' '
*   i_callback_html_end_of_list       = ' '
*   i_structure_name                  =
*   i_background_id                   = ' '
      i_grid_title                      = wk_title "タイトル
*   i_grid_settings                   =
      is_layout                         = st_layout
      it_fieldcat                       = it_fieldcat     "項目カタログ
*   it_excluding                      =
*   it_special_groups                 =
*   it_sort                           = it_sort "ソート基準
*   it_filter                         =
*   is_sel_hide                       =
*   i_default                         = 'X'
      i_save                            = 'a' "バリアント保存可能
*   is_variant                        =
*   it_events                         =
*   it_event_exit                     =
*   is_print                          =
*   is_reprep_id                      =
*   i_screen_start_column             = 0
*   i_screen_start_line               = 0
*   i_screen_end_column               = 0
*   i_screen_end_line                 = 0
*   it_alv_graphics                   =
*   it_add_fieldcat                   =
*   it_hyperlink                      =
* importing
*   e_exit_caused_by_caller           =
*   es_exit_caused_by_user            =
    tables
      t_outtab                          = vi_out_data
   exceptions
     program_error                     = 1
     others                            = 2
            .
  if sy-subrc <> 0.
* message id sy-msgid type sy-msgty number sy-msgno
*         with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.


endform.                    " data_outpur
*&---------------------------------------------------------------------*
*&      form  set_property
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->p_he_fieldcat  text
*----------------------------------------------------------------------*
form set_property tables   p_it_fieldcat .

  data : he_fieldcat type slis_fieldcat_alv.
*項目設定
  clear he_fieldcat.
  he_fieldcat-fieldname     = '....
  he_fieldcat-seltext_s     = '..... "out_dataの項目ひとつひとつについて宣言
  append he_fieldcat to p_it_fieldcat.
*
  clear he_fieldcat.
  he_fieldcat-fieldname     = '....
  he_fieldcat-seltext_s     = '..... "out_dataの項目ひとつひとつについて宣言
  append he_fieldcat to p_it_fieldcat.

....

endform.                    " set_property
*&---------------------------------------------------------------------*
*&      form  set_sort
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->p_he_sort  text
*----------------------------------------------------------------------*
form set_sort tables   p_it_sort .

  data : he_sort type slis_sortinfo_alv.

*ソート順を指定する際は、ここで指定

endform.                    " set_sort
*&---------------------------------------------------------------------*
*&      form  edit_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form edit_data.

  data : wk_outdata type out_data .


  loop at i_data .
    move-corresponding i_data to wk_outdata .
*品目テキストの取得
....などなど、編集する項目を取得し、wk_outdataに登録
    append wk_outdata to vi_out_data .

  endloop.

endform.                    " edit_data
*&---------------------------------------------------------------------*
*&      form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data.

*テーブルセレクト
  select ... into table i_data-....
    from ....
   where ....


endform.                    " get_data