abap 簡單開發ALV表報

  看了很多人開發alv報表都寫一大堆複雜的東西。其實可以將這些複雜內容寫在一個包裏,程序調用只需要很簡單的代碼結構即可。

report 調用如下:

 REPORT  ysdr0004.

 INCLUDE y_alv_func.-----"包含文件

perform get_data.-------"取數據

perform show_alv.------"顯示alv

 

form  get_data.

.....

endform.

form show_alv.

    DATA title TYPE string.
  title = LINES( it_show1 ).
  CONCATENATE  '記錄共計:'   title '條.' INTO title.
  alv_set_title  title.
*  alv_set_status.
  SORT it_show1 BY prctr region .
  alv_clear_data.
  alv_add_data 'IT_SHOW1' '' '' 'CHAR' '' '' 'PRCTR' '利潤中心'.
  alv_add_data 'IT_SHOW1' '' '' 'CHAR' '' '' 'REGION' '區域'.
*  alv_add_data 'IT_SHOW1' '' '' 'NUMC' '' '' 'PERIO' '期間/年度'.
  alv_add_data 'IT_SHOW1' 'X' '' 'CURR' '' '' 'ABSMG' '銷售數量'.
  alv_add_data 'IT_SHOW1' 'X' '' 'CURR' '' '' 'ERLOS' '銷售收入'.
  alv_add_data 'IT_SHOW1' 'X' '' 'CURR' '' '' 'CM' '標準人工費用'.
  alv_add_data 'IT_SHOW1' 'X' '' 'CURR' '' '' 'RM' '標準材料成本'.
  alv_add_data 'IT_SHOW1' 'X' '' 'CURR' '' '' 'ZCOGS' '最終銷售成本'.
  alv_add_data 'IT_SHOW1' '' '' 'CURR' '' '' 'BL' '收入/成本'.
  alv_show_data it_show1.

endform.
*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text  處理雙擊事件
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command  USING r_ucomm LIKE sy-ucomm
                           rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN '&IC1'.
            ENDCASE.
    WHEN OTHERS.
  ENDCASE.

ENDFORM.                    "user_command

 

*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       text 當顯示ALV前調用了alv_set_status.這段就必須加

*  此函數,且去se80中複製一個ZSTANDARD
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZSTANDARD' .
ENDFORM.                    "set_pf_status

開發包代碼:


TYPE-POOLS: slis.
DATA: i_fieldcat TYPE slis_t_fieldcat_alv ,
fieldcat_ln LIKE LINE OF i_fieldcat.
DATA: i_events TYPE slis_t_event.
DATA: i_layout TYPE slis_layout_alv.
DATA: g_variant LIKE disvariant.
DATA:   l_title    TYPE lvc_title,
      l_window_titlebar LIKE sy-title,
      l_ls_event TYPE slis_alv_event.

DATA: p_hotspot.
DATA: col_pos        LIKE sy-cucol .
DATA: g_user_command TYPE slis_formname VALUE 'USER_COMMAND'.
"處理雙擊事件

DATA:status TYPE c."是否使用自定一狀態欄。
*DATA:i_grid_title  TYPE  lvc_title.
*******建造數據*********************************
DEFINE alv_add_data.
  fieldcat_ln-tabname     = &1."待顯示的內表名
  fieldcat_ln-do_sum = &2."是否按該列求和
  fieldcat_ln-edit        = &3.   "使其呈可輸入狀態
  fieldcat_ln-datatype  = &4.   "凍結列
*  i_fieldcat-tech        = &5.   "是否爲技術字段
  fieldcat_ln-emphasize   = &5.
  fieldcat_ln-input       = &6. "
*  fieldcat_ln-inttype     = &6."類型
  fieldcat_ln-fieldname   = &7."字段名
  fieldcat_ln-seltext_l   = &8.

  col_pos = col_pos + 1.
  fieldcat_ln-col_pos =  col_pos .
  fieldcat_ln-ddictxt         = 'L'.
  fieldcat_ln-outputlen   = '40'.
*  fieldcat_ln-key = &9."固定列不移動
  append fieldcat_ln to  i_fieldcat.
*  p_col_pos = p_col_pos + 1.
  clear: fieldcat_ln.
END-OF-DEFINITION.

DEFINE alv_clear_data.
  clear : g_variant,i_events,i_layout,i_fieldcat[].
END-OF-DEFINITION.
DEFINE alv_set_status.
  status = 'X'.
END-OF-DEFINITION.
DEFINE alv_set_title.
  l_title = &1.
END-OF-DEFINITION.
*DEFINE alv_set_title.
*  i_grid_title = &1.
*END-OF-DEFINITION.
DEFINE alv_show_data.
******啓動命令功能********************************
  refresh i_events.
  call function 'REUSE_ALV_EVENTS_GET'
    exporting
      i_list_type = 0
    importing
      et_events   = i_events.
  read table i_events with key name = slis_ev_user_command
                            into l_ls_event.
*  BREAK-POINT.
  if sy-subrc = 0.
    move slis_ev_user_command to l_ls_event-form.
    append l_ls_event to i_events.
  endif.

******** Control data ************************************
*  i_layout-colwidth_optimize = 'X'.
  i_layout-zebra             = 'X'.
  i_layout-get_selinfos      = 'X'.
  i_layout-colwidth_optimize = 'X'.
  i_layout-detail_popup      = 'X'.
  i_layout-no_keyfix         = ''.
  i_layout-colwidth_optimize = 'X'.
  i_layout-get_selinfos = 'X'.
  if  l_title is not initial.
    i_layout-window_titlebar   = l_window_titlebar. "擡頭顯示
  endif.
******** Display data ************************************
  if status is initial.
    call function 'REUSE_ALV_GRID_DISPLAY'
      exporting
*      i_grid_title = i_grid_title
        i_callback_program       = sy-repid
*     i_callback_pf_status_set = 'SET_PF_STATUS'
* i_bypassing_buffer      = 'x'
*      i_buffer_active         = 'x'

        i_default                = 'X'
        i_save                   = 'A'
        i_grid_title            = l_title        "擡頭
        is_variant               = g_variant
        it_events                = i_events
        it_fieldcat              = i_fieldcat
        is_layout                = i_layout
      tables
        t_outtab                 = &1
      exceptions
        program_error            = 1
        others                   = 2.
  else.
    call function 'REUSE_ALV_GRID_DISPLAY'
      exporting
*        i_grid_title             = i_grid_title
*        i_bypassing_buffer       = 'x'
*        i_buffer_active          = 'x'
        i_callback_program       = sy-repid
        i_callback_pf_status_set = 'SET_PF_STATUS'
        i_default                = 'X'
        i_save                   = 'A'
        i_grid_title            = l_title        "擡頭
        is_variant               = g_variant
        it_events                = i_events
        it_fieldcat              = i_fieldcat
        is_layout                = i_layout
      tables
        t_outtab                 = &1
      exceptions
        program_error            = 1
        others                   = 2.
  endif.
END-OF-DEFINITION.

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章