ALV功能总结

ALV 功能总结

. 关于 FUNCTION'REUSE_ALV_GRID_DISPLAY' 常用参数说明及用法
REPORT Z_ALV_TEST01
NO STANDARD PAGE HEADING
MESSAGE -ID ZX.
***GlobalDatadeclear
INCLUDE Z_ALV_TEST01TOP.
INCLUDE Z_ALV_TEST01F01.
***initialdata
INITIALIZATION .
***preparereportdata
START-OF -SELECTION.
perform get_data.
perform alv_show.
***outputreport
END -OF -SELECTION.

*&---------------------------------------------------------------------*
*&IncludeZ_ALV_TEST01TOP
*&---------------------------------------------------------------------*
TABLES :MARA,MBEW,EKPO,MAKT.
SELECT -OPTIONS:S_MATNRFOR MARA-MATNR.
DATA :BEGIN OF IT_MATNROCCURS 0 ,

BOX TYPE C," 用来控制输出画面左测的可选择该行,如果选中某行,则该栏位值为‘ X
MATKLLIKE MARA-MATKL,
MATNRLIKE MARA-MATNR,
MTARTLIKE MARA-MTART,
MAKTXLIKE MAKT-MAKTX,
MEINSLIKE MARA-MEINS,
MBRSHLIKE MARA-MBRSH,
MENGELIKE EKPO-MENGE,
END OF IT_MATNR.
TYPES :BEGIN OF WA_MATNR,
MATKLLIKE MARA-MATKL,
MATNRLIKE MARA-MATNR,
MTARTLIKE MARA-MTART,
MAKTXLIKE MAKT-MAKTX,
MEINSLIKE MARA-MEINS,
MBRSHLIKE MARA-MBRSH,
MENGELIKE EKPO-MENGE,
END OF WA_MATNR.
DATA :IT_MATNR_OLDLIKE IT_MATNROCCURS 0 WITH HEADER LINE .
FIELD -SYMBOLS<MATNR>TYPE WA_MATNR.
TYPE -POOLS:slis.
DATA :it_fieldcatTYPE slis_t_fieldcat_alvWITH HEADER LINE ,
lt_sortTYPE slis_t_sortinfo_alvWITH HEADER LINE ,
it_eventsTYPE slis_t_event,
lt_event_exitTYPE slis_t_event_exit,
ls_event_exitTYPE slis_event_exit,
pt_top_of_pageTYPE slis_t_listheader,
gs_printTYPE slis_print_alv,
gs_layoutTYPE slis_layout_alv.

*&-------------------------------------------------------------------
*&IncludeZ_ALV_TEST01F01
*&-------------------------------------------------------------------
*&Formget_data
*&-------------------------------------------------------------------
FORM get_data.
SELECT *
INTO CORRESPONDINGFIELDS OF TABLE IT_MATNR
FROM MARA
WHERE MATNRIN 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
*&-------------------------------------------------------------------
*&Formset_pf_status
*&-------------------------------------------------------------------
FORM set_pf_statusUSING rt_extabTYPE 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:SAPLKKBLGUI Status:STANDARD_FULLSCREEN 标准的 ALV 工具栏名称 , F8 运行 , 选择菜单栏 GUI Status---COPY, 最后输入你的程序名以及你自定义的 GUI Status, 此例即为 ALV_PF_STATUS , 再添加按钮 .


*&-------------------------------------------------------------------
*&FormALV_USER_COMMAND
*&-------------------------------------------------------------------
*-->R_UCOMMtext
*-->RS_SELFIELDtext
*----------------------------------------------------------------------*
form ALV_USER_COMMANDusing r_ucommlike sy-ucomm
rs_selfieldtype slis_selfield."
响应 ALV 点击自定义按钮之后的事件
case r_ucomm.
when 'EXIT2' ."
setpf-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_OLDASSIGNING <MATNR>

WITH KEY MATNR=IT_MATNR-MATNR.
CHECK IT_MATNR-MAKTX<><matnr>-MAKTX.
UPDATE MAKTSET MAKTX=IT_MATNR-MAKTXWHERE MATNR=IT_MATNR-MATNR
AND SPRAS='M' .
ENDLOOP .
WHEN '&IC1' .
" 表示双击
CHECK rs_selfield-tabindex>0 .
READ TABLE IT_MATNRINDEX 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
*&---------------------------------------------------------------------*
*&Formalv_show
*&---------------------------------------------------------------------*
FORM alv_show.
PERFORM prepare_alv_field. " 设置屏幕输出拦位的描述和格式
PERFORM eventtab_buildUSING 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 语言中能实现的在这里都能实现 . 具体实现见 FORMALV_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

*&---------------------------------------------------------------------*
*&Formprepare_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

*&---------------------------------------------------------------------*
*&FormALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM alv_top_of_pageUSING cl_ddTYPE REF TO cl_dd_document.
DATA :m_pTYPE i .
DATA :m_buffTYPE string.
*
表头其实完全可以是一个 html 文件,自己使用 html 语言进行格式控制
m_buff='<html>' .
CALL METHOD cl_dd->html_insert
EXPORTING
contents=m_buff
CHANGING
position =m_p.
*m_buff='<left><H2>
配件报废品种汇总表 </H2></left>'.
m_buff='<H4>
配件报废品种汇总 </H4>' .
CALL METHOD CL_DD->HTML_INSERT
EXPORTING
CONTENTS=m_buff
CHANGING
POSITION =m_p.

m_buff=sy-datum.
CALL METHOD CL_DD->HTML_INSERT
EXPORTING
CONTENTS=m_buff
CHANGING
POSITION =m_p.

m_buff='</html>' .
CALL METHOD cl_dd->html_insert
EXPORTING
contents=m_buff
CHANGING
position =m_p.
ENDFORM .

*&---------------------------------------------------------------------*
*&Formbuild_sortcat
*&---------------------------------------------------------------------*
FORM build_sortcat.

CLEAR lt_sort. " 此部分用于排序和 分类汇总
MOVE 1 TO lt_sort-spos.

lt_sort-fieldname='MATKL' .
" 表示按照该栏位名来汇总
lt_sort-up ='X' . " 表示按照上面栏位升序排列
lt_sort-subtot='X' .
APPEND lt_sort.


CLEAR lt_sort.
lt_sort-spos=1 .
lt_sort-fieldname='MATNR' .
lt_sort-down='X' .
lt_sort-subtot='X' .
APPEND lt_sort.
ENDFORM ."build_sortcat

*&---------------------------------------------------------------------*
*&Formbuild_layout
*&---------------------------------------------------------------------*
FORM build_layout.
gs_layout-totals_text='totals' .
gs_layout-zebra='X' .
gs_layout-no_vline='X' .
gs_layout-colwidth_optimize='X' .
" 自动设置宽度
gs_layout-detail_popup='X' .
gs_layout-detail_initial_lines='X' .
gs_layout-detail_titlebar='DetailTitleBar' .

gs_layout-box_fieldname='BOX' . " 用来控制输出画面左测的可选择该行,如果选中某行,

则该栏位值为‘ X
ENDFORM .
"build_layout

*&---------------------------------------------------------------------*
*&FormTOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
DATA :ls_lineTYPE slis_listheader.
CLEAR pt_top_of_page[].
CLEAR ls_line.
ls_line-typ='H' .
SELECT SINGLE butxtINTO ls_line-info
FROM t001
WHERE bukrs='3000' .
APPEND ls_lineTO pt_top_of_page.

CLEAR ls_line.
ls_line-typ='S' .
ls_line-key ='TITLE' .
ls_line-info=sy-title .
APPEND ls_lineTO pt_top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary=pt_top_of_page.
ENDFORM .

*---------------------------------------------------------------------*
*FORMalv_end_of_list*
*---------------------------------------------------------------------*
form alv_end_of_list.
data :i_list_commentsTYPE slis_t_listheader.
data :w_list_commentsTYPE slis_listheader.
clear :i_list_comments.
w_list_comments-typ='H' ."H=Header,S=Selection,A=Action
w_list_comments-key ='TITLE' .
w_list_comments-info='Endoflist' .
append w_list_commentsto i_list_comments.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary=i_list_comments.
endform .
*---------------------------------------------------------------------*
*FORMALV_END_OF_PAGE*
*---------------------------------------------------------------------*
FORM ALV_END_OF_PAGE.

ENDFORM .
*&---------------------------------------------------------------------*
*&Formbuild_eventexit
*&---------------------------------------------------------------------*
FORM build_eventexit.
DATA c_refreshTYPE syucommVALUE '&REFRESH' .
CLEAR ls_event_exit.
ls_event_exit-ucomm=c_refresh."Refresh
ls_event_exit-after='X' .
APPEND ls_event_exitTO lt_event_exit.
ENDFORM ."build_eventexit

. 关于 FUNCTION' REUSE_ALV_HIERSEQ_LIST_DISPLAY ' 分层显示 常用参数说明及用法
REPORT Z_DAVID_ALVTEST.
TABLES :ekko,
ekpo.

SELECT -OPTIONS:s_ebelnFOR ekko-ebeln.

TYPE -POOLS:slis.

DATA :BEGIN OF headertabOCCURS 0 ,
ebelnLIKE ekko-ebeln,
bstypLIKE ekko-bstyp,
bsartLIKE ekko-bsart,
statuLIKE ekko-statu,
expandTYPE xfeld,
" 用于设置是否可扩展 , 在这里必须要定义此字段
END OF headertab.

DATA :BEGIN OF itemtabOCCURS 0 ,
ebelnLIKE ekpo-ebeln,
ebelpLIKE ekpo-ebelp,
matnrLIKE ekpo-matnr,
werksLIKE ekpo-werks,
mengeLIKE ekpo-menge,
netprLIKE ekpo-netpr,
peinhLIKE ekpo-peinh,
netwrLIKE ekpo-netwr,
END OF itemtab.

DATA :ls_fieldcatTYPE slis_t_fieldcat_alvWITH HEADER LINE ,
ls_sortTYPE slis_t_sortinfo_alvWITH HEADER LINE ,
ls_keyinfoTYPE slis_keyinfo_alv,
ls_layoutTYPE slis_layout_alv.

START-OF -SELECTION.

PERFORM readdata.
PERFORM build_fieldcat.
PERFORM build_sortcat.
PERFORM build_layout.
PERFORM build_keyinfo.
PERFORM display_alv.
*&---------------------------------------------------------------------*
*&Formreaddata
*&---------------------------------------------------------------------*
FORM readdata.
SELECT ebelnbstypbsartstatu
INTO TABLE headertab
FROM ekko
WHERE ebelnIN s_ebeln.

IF NOT headertab[]IS INITIAL .
SELECT ebelnebelpmatnrwerksmengenetprpeinhnetwr
INTO TABLE itemtab
FROM ekpo
FOR ALL ENTRIESIN headertab
WHERE ebeln=headertab-ebeln.
ENDIF .
ENDFORM ."readdata
*&---------------------------------------------------------------------*
*&Formbuild_fieldcat
*&---------------------------------------------------------------------*
FORM build_fieldcat.
DEFINE alv_fieldcat.
ls_fieldcat-tabname=&1 .
ls_fieldcat-fieldname=&2 .
ls_fieldcat-ref_tabname=&3 .
append ls_fieldcat.
END -OF -DEFINITION .
alv_fieldcat'headertab' 'EBELN' 'EKKO' .
alv_fieldcat'headertab' 'BSTYP' 'EKKO' .
alv_fieldcat'headertab' 'BSART' 'EKKO' .
alv_fieldcat'headertab' 'STATU' 'EKKO' .

alv_fieldcat'itemtab' 'EBELN' 'EKPO' .
alv_fieldcat'itemtab' 'EBELP' 'EKPO' .
alv_fieldcat'itemtab' 'MATNR' 'EKPO' .
alv_fieldcat'itemtab' 'WERKS' 'EKPO' .
alv_fieldcat'itemtab' 'MENGE' 'EKPO' .
alv_fieldcat'itemtab' 'NETPR' 'EKPO' .
alv_fieldcat'itemtab' 'PEINH' 'EKPO' .
alv_fieldcat'itemtab' 'NETWR' 'EKPO' .
ENDFORM ."build_fieldcat
*&---------------------------------------------------------------------*
*&Formbuild_sortcat
*&---------------------------------------------------------------------*
FORM build_sortcat.
DEFINE m_sort.
ls_sort-tabname=&1 .
ls_sort-fieldname=&2 .
ls_sort-up =&3 .
append ls_sort.
END -OF -DEFINITION .
m_sort'headertab' 'EBELN' 'X' .
m_sort'itemtab' 'EBELP' 'X' .
ENDFORM ."build_sortcat
*&---------------------------------------------------------------------*
*&Formbuild_keyinfo
*&---------------------------------------------------------------------*
FORM build_keyinfo.
ls_keyinfo-header01='EBELN' .
ls_keyinfo-item01='EBELN' .
ls_keyinfo-item02='EBELP' .
ENDFORM ."build_keyinfo
*&---------------------------------------------------------------------*
*&Formbuild_layout
*&---------------------------------------------------------------------*
FORM build_layout.
ls_layout-group_change_edit='X' .
ls_layout-colwidth_optimize='X' .
ls_layout-zebra='X' .
ls_layout-detail_popup='X' .
ls_layout-get_selinfos='X' .
ls_layout-expand_fieldname='EXPAND' .
ENDFORM ."build_layout
*&---------------------------------------------------------------------*
*&Formdisplay_alv
*&---------------------------------------------------------------------*
FORM display_alv.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program=sy-cprog
*i_callback_user_command='USER_COMMAND'
is_layout=ls_layout
it_fieldcat=ls_fieldcat[]
it_sort=ls_sort[]
i_tabname_header='headertab'
i_tabname_item='itemtab'
is_keyinfo=ls_keyinfo
i_save='A'
TABLES
t_outtab_header=headertab
t_outtab_item=itemtab
EXCEPTIONS
program_error=1
OTHERS =2 .
IF sy-subrc<>0 .
MESSAGE ID sy-msgidTYPE sy-msgtyNUMBER sy-msgno
WITH sy-msgv1sy-msgv2sy-msgv3sy-msgv4.
ENDIF .

ENDFORM ."display_alv

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值