ALV標準功能彙總,分類彙總,排序,過濾這些功能除了可以直接使用它的標準功能按鈕之外,你也可以在程序裏設定,讓ALV列表第一次顯示出來就已經使用了這些功能。
用REUSE_ALV_GRID_DISPLAY實現的ALV不能在程序設定輸出字段的平均值,最小值,最大值等標準功能。用OO方式實現ALV輸出的就可以,請參考
http://blog.csdn.net/lhx20/archive/2008/08/26/2833234.aspx
一、排序
排序用到類型slis_t_sortinfo_alv,按條件把過濾的字段和規則設置好,添加到一個參考slis_t_sortinfo_alv類型的內表,在調用Function的時候指導內表賦給it_sort參數
二、過濾
過濾用到類型slis_t_filter_alv,按條件把排序的字段和規則設置好,添加到一個參考slis_t_filter_alv類型的內表,在調用Function的時候把內表的值賦給it_fitler參數
三、分類彙總
分類彙總是彙總和排序兩個功能來進行分類和彙總的。按照排序的字段的值進行分類,對已經彙總的字段進行分類彙總。在設置排序的時候設置類型slis_t_sortinfo_alv-subtot = ‘X’ 就可以了。
四、彙總
彙總是設置要彙總的字段的Fieldcat屬性,設置slis_t_fieldcat_alv-do_sum = ‘X’。
下面是源代碼
TYPE-POOLS slis.
TYPES ty_tab_spfli TYPE spfli OCCURS 0.
START-OF-SELECTION.
PERFORM f_display.
*&---------------------------------------------------------------------*
*& Form f_getdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_SPFLI text
*----------------------------------------------------------------------*
FORM f_getdata TABLES pt_spfli TYPE ty_tab_spfli.
SELECT * FROM spfli INTO TABLE pt_spfli.
ENDFORM. "f_getdata
*&---------------------------------------------------------------------*
*& Form f_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_display.
DATA: lt_spfli TYPE ty_tab_spfli,
lt_filter TYPE slis_t_filter_alv,
lt_sort TYPE slis_t_sortinfo_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv.
PERFORM f_getdata TABLES lt_spfli.
PERFORM f_filter_build TABLES lt_filter.
PERFORM f_sort_build TABLES lt_sort.
PERFORM f_fieldcat CHANGING lt_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
it_fieldcat = lt_fieldcat
it_filter = lt_filter
it_sort = lt_sort
TABLES
t_outtab = lt_spfli.
ENDFORM. "f_display
*&---------------------------------------------------------------------*
*& Form f_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_FIELDCAT text
*----------------------------------------------------------------------*
FORM f_fieldcat CHANGING pt_fieldcat TYPE slis_t_fieldcat_alv.
FIELD-SYMBOLS <fs_fieldcat> LIKE LINE OF pt_fieldcat.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SPFLI'
CHANGING
ct_fieldcat = pt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
other = 3.
LOOP AT pt_fieldcat ASSIGNING <fs_fieldcat> WHERE fieldname = 'DISTANCE'.
<fs_fieldcat>-do_sum = 'X'.
ENDLOOP.
ENDFORM. "f_fieldcat
*&---------------------------------------------------------------------*
*& Form f_filter_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_FILTER text
*----------------------------------------------------------------------*
FORM f_filter_build TABLES pt_filter TYPE slis_t_filter_alv.
DATA lwa_filter LIKE LINE OF pt_filter.
lwa_filter-fieldname = 'DISTANCE'.
lwa_filter-sign0 = 'E'.
lwa_filter-optio = 'EQ'.
lwa_filter-valut = 'MI '.
APPEND lwa_filter TO pt_filter.
ENDFORM. "f_filter_build
*&---------------------------------------------------------------------*
*& Form f_sort_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_SORT text
*----------------------------------------------------------------------*
FORM f_sort_build TABLES pt_sort TYPE slis_t_sortinfo_alv.
DATA lwa_sort LIKE LINE OF pt_sort.
lwa_sort-fieldname = 'CARRID'.
lwa_sort-up = 'X'.
lwa_sort-subtot = 'X'.
APPEND lwa_sort TO pt_sort.
ENDFORM. "f_sort_build