一个简单ALV的例子

*&---------------------------------------------------------------------*
*& Report  ZTEST_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_ALV.
tables: makt.

*********************************************************************************
selection-screen begin of block b1.
  select-options:
    se_matnr for makt-matnr.
selection-screen end of block b1.
*********************************************************************************

type-pools: slis.                          "这个类型组有很多ALV的自定义数据类型以及结构化数据类型
data:
  i_fieldcat_alv type slis_t_fieldcat_alv, "定义列标题(属性/信息)
  i_layout type slis_layout_alv,           "alv格式
  i_fieldcat type slis_fieldcat_alv,       "
  i_events type slis_t_event,              "alv事件
  w_events like line of i_events,
  i_list_comments type slis_t_listheader,  "alv表单标题区域设置
  w_list_comments like line of i_list_comments,
  w_repid like sy-repid.                   "当前程序

**********************************************************
*定义内表
data:
  begin of itab occurs 0,
    matnr like rseg-matnr,
    maktx like makt-maktx,
  end of itab.
********************************************************************


start-of-selection.

perform getdata.      "1.从数据库中取数据到相应内表中
perform layout_build. "2.用于定义ALV表单的相关格式、属性
perform fields_build. "3.用来定义表单中的各个列的相关信息,比如列名等
perform display_data. "4.用来显示ALV表单
end-of-selection.
*&---------------------------------------------------------------------*
*&      1.Form  getdata  从数据库中取数据到相应内表中
*&---------------------------------------------------------------------*


form getdata.
  select  matnr maktx from makt into itab
        WHERE MAKT~MATNR IN se_matnr.
  APPEND ITAB.
  ENDSELECT.
endform.

*&---------------------------------------------------------------------*
*&      3.Form  fields_build 设置报表显示列属性信息
*&---------------------------------------------------------------------*
form fields_build .
  refresh i_fieldcat_alv.
  clear i_fieldcat.
  data colnum type i.
  colnum = colnum + 1.
  i_fieldcat-col_pos = colnum.
  i_fieldcat-fieldname = 'MATNR'.
  i_fieldcat-seltext_s = '物料编号'.
  i_fieldcat-seltext_m = '物料编号'.
  i_fieldcat-seltext_l = '物料编号'.
  i_fieldcat-outputlen = 10.
  i_fieldcat-key = 'X'.
  append i_fieldcat to i_fieldcat_alv.
  clear i_fieldcat.
  colnum = colnum + 1.
  i_fieldcat-col_pos = colnum.
  i_fieldcat-fieldname = 'MAKTX'.
  i_fieldcat-seltext_s = '物料描述'.
  i_fieldcat-seltext_m = '物料描述'.
  i_fieldcat-seltext_l = '物料描述'.
  i_fieldcat-outputlen = 20.
  append i_fieldcat to i_fieldcat_alv.
  clear i_fieldcat.
endform.
*&---------------------------------------------------------------------*
*&      Form  events_build
*&---------------------------------------------------------------------*
form events_build .
  call function 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE           = 0
    IMPORTING
      ET_EVENTS             = i_events .
*  read table i_events with key name = 'TOP_OF_PAGE'
*                      into w_events.
*  if sy-subrc = 0.
*    move 'ALV_TOP_OF_PAGE' to w_events-form.
*    modify i_events from w_events index sy-tabix.
*  endif.
  READ TABLE i_events INTO w_events WITH KEY NAME = 'USER_COMMAND'.
  IF SY-SUBRC EQ 0.
    w_events-name = 'USER_COMMAND'.
    MODIFY i_events FROM w_events index sy-tabix.
  ENDIF.
endform.                    " events_build
*&---------------------------------------------------------------------*
*&      4.Form  display_data 用来显示ALV表单
*&---------------------------------------------------------------------*
form display_data .
  call function 'REUSE_ALV_GRID_DISPLAY'
   exporting
     I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'                               "用户触发事件
    i_callback_pf_status_set          = 'PF_STATUS_SET'(001)                        "调用用户事件和按钮事件
     i_callback_program                = w_repid                                      "当前程序
     is_layout                         = i_layout                                     "子函数layout_build填充的格式定义
     it_fieldcat                       = i_fieldcat_alv[]                             "子函数fields填充的各列
     it_events                         = i_events[]
     " i_grid_title                      = ''
     I_SAVE                            = 'A'                                          "保存变式
    tables
      t_outtab                          = itab.                                       "假设数据都在itab内表中
  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.                    " display_data
*&---------------------------------------------------------------------*
*&      2.Form  layout_build 设置alv显示格式和属性
*&---------------------------------------------------------------------*
form layout_build .
*  i_layout-detail_popup = 'X'.        "是否弹出详细信息窗口
*  i_layout-no_vline = ' '.            "这个用来设置列间隔线
  i_layout-colwidth_optimize = 'X'.   "优化列宽选项是否设置
  i_layout-detail_initial_lines = 'X'.    "show also initial lines
  i_layout-detail_titlebar = '详细内容'.   "设置弹出窗口的标题栏
*  i_layout-f2code = '&ETA'.           "设置触发弹出详细信息窗口的功能码,这里是双击
  i_layout-no_colhead = ' '.
  w_repid = sy-repid.                  "程序为当前程序
endform"layout_build
*---------------------------------
FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab.                                "调用的FORM
  set pf-status 'TEST1'.
endform.
*&--------------------------------------------------------------------*
*&      Form user_command
*&--------------------------------------------------------------------*
form user_command using i_ucomm like sy-ucomm                    "这段程序表明了自定义按钮是做什么用的。可以在SE41中自定义返回值
                        is_selfield type slis_selfield.
  case i_ucomm.
    when '&IC1'.
      message i888(sabapdocu) with '双击事件'.
    when 'REF'.
      message i888(sabapdocu) with '刷新事件'.
      is_selfield-refresh = 'X'.
      clear itab[].
  endcase.
endform"user_command
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值