ALV功能总结
一.关于FUNCTION 'REUSE_ALV_GRID_DISPLAY'常用参数说明及用法
REPORT Z_ALV_TEST01
NO STANDARD PAGE HEADING
MESSAGE-ID ZX.
*** Global Data declearINCLUDE Z_ALV_TEST01TOP.
INCLUDE Z_ALV_TEST01F01.
*** initial dataINITIALIZATION.
*** prepare report dataSTART-OF-SELECTION.
perform get_data.
perform alv_show.
*** output reportEND-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Include Z_ALV_TEST01TOP
*&---------------------------------------------------------------------*TABLES:MARA,MBEW,EKPO,MAKT.
SELECT-OPTIONS:S_MATNR FOR MARA-MATNR.
DATA:BEGIN OF IT_MATNR OCCURS 0,
BOX TYPE C,"用来控制输出画面左测的可选择该行,如果选中某行,则该栏位值为‘X’
MATKL LIKE MARA-MATKL,
MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
MAKTX LIKE MAKT-MAKTX,
MEINS LIKE MARA-MEINS,
MBRSH LIKE MARA-MBRSH,
MENGE LIKE EKPO-MENGE,
END OF IT_MATNR.
TYPES:BEGIN OF WA_MATNR,
MATKL LIKE MARA-MATKL,
MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
MAKTX LIKE MAKT-MAKTX,
MEINS LIKE MARA-MEINS,
MBRSH LIKE MARA-MBRSH,
MENGE LIKE EKPO-MENGE,
END OF WA_MATNR.
DATA:IT_MATNR_OLD LIKE IT_MATNR OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS TYPE WA_MATNR.
TYPE-POOLS: slis.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
lt_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE,
it_events TYPE slis_t_event,
lt_event_exit TYPE slis_t_event_exit,
ls_event_exit TYPE slis_event_exit,
pt_top_of_page TYPE slis_t_listheader,
gs_print TYPE slis_print_alv,
gs_layout TYPE slis_layout_alv .
*&-------------------------------------------------------------------
*& Include Z_ALV_TEST01F01
*&-------------------------------------------------------------------
*& Form get_data
*&-------------------------------------------------------------------FORM get_data .
SELECT *
INTO CORRESPONDING FIELDS OF TABLE IT_MATNR
FROM MARA
WHERE MATNR IN S_MATNR.
LOOP AT IT_MATNR.
SELECT SINGLE MENGE
INTO IT_MATNR-MENGE
FROM EKPO
WHERE MATNR = IT_MATNR-MATNR.
SELECT SINGLE MAKTX
INTO IT_MATNR-MAKTX
FROM MAKT
WHERE MATNR = IT_MATNR-MATNR
AND SPRAS = 'M'.
MODIFY IT_MATNR.
ENDLOOP.
IT_MATNR_OLD[] = IT_MATNR[].
ENDFORM. " get_data
*&-------------------------------------------------------------------
*& Form set_pf_status
*&-------------------------------------------------------------------FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ALV_PF_STATUS'.
ENDFORM. "Set_pf_status
此FORM的作用是在标准的ALV工具栏上添加自定义的按钮
该名称必须和FUNCTION 参数I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'对应起来,即FORM的名称和变量名称要一样.GUI STATUS 'ALV_PF_STATUS'是自己定义的,因为自定义后会把标准的ALV工具栏覆盖,所以还要把标准工具栏复制过来.
方法如下:
T-CODE :SE90 Program Library-- GUI Status
program name:SAPLKKBL GUI Status:STANDARD_FULLSCREEN 标准的ALV工具栏名称,F8运行,选择菜单栏GUI Status---COPY,最后输入你的程序名以及你自定义的GUI Status名,此例即为ALV_PF_STATUS,再添加按钮.
*&-------------------------------------------------------------------
*& Form ALV_USER_COMMAND
*&-------------------------------------------------------------------
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*form ALV_USER_COMMAND using r_ucomm like sy-ucomm
rs_selfield type slis_selfield. "响应ALV点击自定义按钮之后的事件
case r_ucomm.
when 'EXIT2'. "在set pf-status '9100'.的屏幕状态里面自定义的按钮名称
LEAVE TO SCREEN 0.
WHEN '&DATA_SAVE'. "修改屏幕字段物料描述MAKTX,此时的&DATA_SAVE是标准GUI的参数,I_CALLBACK_PF_STATUS_SET 不要进行设置
LOOP AT IT_MATNR.
READ TABLE IT_MATNR_OLD ASSIGNING
WITH KEY MATNR = IT_MATNR-MATNR.
CHECK IT_MATNR-MAKTX <> -MAKTX.
UPDATE MAKT SET MAKTX = IT_MATNR-MAKTX WHERE MATNR = IT_MATNR-MATNR
AND SPRAS = 'M'.
ENDLOOP.
WHEN '&IC1'."表示双击
CHECK rs_selfield-tabindex > 0.
READ TABLE IT_MATNR INDEX rs_selfield-tabindex.
SET PARAMETER ID : 'MAT' FIELD IT_MATNR-MATNR.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
endcase.
rs_selfield-fieldname表示双击的字段名,有时候有用.
endform. "ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form alv_show
*&---------------------------------------------------------------------*FORM alv_show . PERFORM prepare_alv_field. "设置屏幕输出拦位的描述和格式
PERFORM eventtab_build USING it_events[].
"触发ALV事件,比如TOP_OF_PAGE, ALV_END_OF_LIST, ALV_END_OF_PAGE
PERFORM build_sortcat. "设置排序和分类汇总
PERFORM build_layout. "设置输出格式
PERFORM build_eventexit."设置ALV按钮增强功能
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog/SY-REPID "程式名称
i_background_id = 'ALV_BACKGROUND'
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
"如果ALV使用自定义的工具栏,如果使用系统工具栏则忽略该行
I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' "自定义工具栏的事件
* I_CALLBACK_TOP_OF_PAGE = GT_LIST_TOP_OF_PAGE[]
I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'"自定义ALV表头
使用HTML语言对表头的输出格式进行控制,包括输出文字的大小,字体及颜色等,总之在HTML语言中能实现的在这里都能实现.具体实现见FORM ALV_TOP_OF_PAGE
当I_CALLBACK_TOP_OF_PAGE和I_CALLBACK_HTML_TOP_OF_PAGE同时设置时,只有I_CALLBACK_HTML_TOP_OF_PAGE起作用.it_fieldcat = it_fieldcat[]"必须要设置的参数,设定输出目录
it_events = it_events[] "如果有事件触发
* i_structure_name = 'it_matnr' i_save = 'A' "保存样式
is_layout = gs_layout "对输出样式的设定
is_print = gs_print
it_sort = lt_sort[]"如果有排序和分类汇总,需要该行
TABLES
t_outtab = it_matnr"ALV输出的内表
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " alv_show
*&---------------------------------------------------------------------*
*& Form prepare_alv_field
*&---------------------------------------------------------------------*FORM prepare_alv_field.
DEFINE m_fieldcat.
it_fieldcat-fieldname = &1. "输出字段名,注意一定要是大写
it_fieldcat-reptext_ddic = &2. "输出显示的文字说明
* it_fieldcat-col_pos = &3. "输出的位置,即第几列
* it_fieldcat-outputlen = &4. "该显示文字所占的字长
it_fieldcat-emphasize = &3. "设置输出的颜色
it_fieldcat-edit = &4. "设置为可编辑字段,可进行修改
append it_fieldcat.
END-OF-DEFINITION.
m_fieldcat 'MATKL' '物料群組' 'C110' ''.
m_fieldcat 'MATNR' '物料' 'C210' ''.
m_fieldcat 'MTART' '物料类型' 'C310' ''.
m_fieldcat 'MBRSH' '行业领域' 'C410' ''.
m_fieldcat 'MEINS' '基本计量单位' 'C510' ''.
m_fieldcat 'MENGE' '数量' 'C610' ''.
m_fieldcat 'MAKTX' '物料描述' '' 'X'.
ENDFORM. " prepare_alv_field
*&---------------------------------------------------------------------*
*& Form ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*FORM alv_top_of_page USING cl_dd TYPE REF TO cl_dd_document.
DATA: m_p TYPE i.
DATA: m_buff TYPE string.
*表头其实完全可以是一个html文件,自己使用html语言进行格式控制
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13565884/viewspace-1009982/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13565884/viewspace-1009982/