SAP ALV 详细使用方法.docx
《SAP ALV 详细使用方法.docx》由会员分享,可在线阅读,更多相关《SAP ALV 详细使用方法.docx(22页珍藏版)》请在冰豆网上搜索。
![SAP ALV 详细使用方法.docx](https://file1.bdocx.com/fileroot1/2022-12/1/668549ef-7685-4372-a639-779e9b2f7384/668549ef-7685-4372-a639-779e9b2f73841.gif)
SAPALV详细使用方法
ALV学习资料
SAP提供一组ALV(ABAPLISTVIEWER)功能模块,这些功能模块可以修饰报表输出。
这些设置的ALV功能可以提高报表的可读性。
首先呢,我先跟大家说一下ALV是什么东西?
ALV=SAPLISTVIEWER,SAP列表显示器。
就目前ALV技术主要分ALVGRID和ALVTREE。
先跟大家说一下目前本人用的比较多的ALVGRID技术,ALVGRID的效果见图()。
图()
第一步
在使用ALV时,需要定义一个SAP标准TYPE-POOLS,具体语法为:
TYPE-POOLS:
SLIS.
然后需要定义一个LAYOUT式样,和一个FIELDCAT字段格式,具体语法为:
DATA:
LIT_FCATTYPESLIS_T_FIELDCAT_ALV,
LT_LAYOTYPESLIS_LAYOUT_ALV,
GIT_EVENTSTYPESLIS_T_EVENT,
GIT_LISTHEADERTYPESLIS_T_LISTHEADER.,
LIT_EXTABTYPESLIS_T_EXTAB.
第二步(可选)
可以为需要为最初的目录显示选择参数。
在这里需要使用函数‘'REUSE_ALV_VARIANT_DEFAULT_GET’
Samplecode:
CALLFUNCTION'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save=variantsavecondition(A=all,U=user-specific)
CHANGING
cs_variant=internaltablecontainingtheprogramname(andthedefaultvariant---optional)
EXCEPTIONS
not_found=2.
使用者也可以使用现有的变量中选择,使用函数‘REUSE_ALV_VARIANT_F4’。
第三步
调用函数‘REUSE_ALV_EVENTS_GET’达到分屏显示的效果
Samplecode:
CALLFUNCTION'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE=0
IMPORTING
ET_EVENTS=GIT_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG=1
OTHERS=2.
具体效果见图()
图
也可以为GIT_EVENTS添加许多参数也可以插入图片,需要使用函数‘REUSE_ALV_COMMENTARY_WRITE’
Samplecode:
CALLFUNCTION'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY=GIT_LISTHEADER✍文本抬头
I_LOGO='ENJOYSAP_LOGO'.✍图片
L_LISTHEADER-TYP='H'.
L_LISTHEADER-INFO='TESTALV'.✍文本抬头内容
APPENDL_LISTHEADERTOGIT_LISTHEADER.
具体效果见图()
图()
第四步
调用函数‘REUSE_ALV_FIELDCATALOG_MERGE’获得标准字段
Samplecode:
CALLFUNCTION'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME=SY-REPID
I_STRUCTURE_NAME='MSEG'✍表名
CHANGING
CT_FIELDCAT=LIT_FCAT[]✍字段格式
EXCEPTIONS
INCONSISTENT_INTERFACE=1
PROGRAM_ERROR=2
OTHERS=3
CLEARPS_FCAT.
PS_FCAT-FIELDNAME='MATNR'.✍表中字段名
PS_FCAT-REF_TABNAME='MSEG'.✍表名
PS_FCAT-KEY='X'✍水平移动时固定该列
PS_FCAT-COL_POS='1'.✍列的位数
APPENDPS_FCATTOLIT_FCAT.
具体效果见图()
图()
在这里我们也可以使用自定义字段
Samplecode:
PS_FCAT-FIELDNAME='TEXT'."✍字段名,一定要大写
PS_FCAT-INTTYPE='P'.✍字段类型
PS_FCAT-OUTPUTLEN=20.✍输出长度
PS_FCAT-COL_POS='7'.✍列的位数
PS_FCAT-SELTEXT_L='ADDBYJacky_L'.✍列的抬头文本
PS_FCAT-SELTEXT_M='ADDBYJacky_M'.✍列的抬头文本
PS_FCAT-SELTEXT_S='ADDBYJacky_S'.✍列的抬头文本
PS_FCAT-DDICTXT='M'.✍选择‘M’抬头
PS_FCAT-EDIT='X'.✍该列可编辑
APPENDPS_FCATTOLIT_FCAT.
具体效果见图()
图()
在这里我们也可以自己设定输出的格式
Samplecode:
CLEARPS_FCAT.
PS_FCAT-FIELDNAME='BWART'.✍字段名,一定要大写
PS_FCAT-REF_TABNAME='MSEG'✍表名.
PS_FCAT-OUTPUTLEN=20.✍字段输出长度
PS_FCAT-JUST='C'.✍字段输出居中
PS_FCAT-COL_POS='9'.✍列的位置
PS_FCAT-EMPHASIZE='X'."✍颜色,也可以是‘CXYZ’如'C501'.
PS_FCAT-HOTSPOT='X'.✍激活热点
APPENDPS_FCATTOLIT_FCAT.
具体效果见图()
图()
还可以把输出的字段变成图标:
首先呢,在数据取入内表之后,循环这个内表,把要改变的那个字段进行操作
Samplecode:
LOOPATLIT_OUTTAB.
LIT_OUTTAB-WERKS='@06@'.✍图标的名字
MODIFYLIT_OUTTAB.
ENDLOOP.
然后在定义字段格式的时候
PS_FCAT-FIELDNAME='WERKS'.
PS_FCAT-REF_TABNAME='MSEG'.
PS_FCAT-COL_POS='10'.
PS_FCAT-ICON='X'.✍激活图标
APPENDPS_FCATTOLIT_FCAT.
具体效果见图()
图()
第五步
当你把字段格式都设定完了之后,那么接下来你就需要设定LAYOUT输出的格式了。
在LAYOUT中有几个参数是比较重要和比较常用到的:
LAYOUT-COLWIDTH_OPTIMIZE:
当你把这个参数的值设为‘X’时,ALV中的字段就会自动缩近,也就是说当你把一个字段设为100位长时,而你输入的那个值只有10位长,这个参数就会把字段的长度自动缩进为10位长:
Samplecode:
LT_LAYO-COLWIDTH_OPTIMIZE='X'.✍自动缩进
效果见图()。
图()
LAYOUT-ZEBRA:
当你把这个参数的值设为‘X’时,ALV显示时会隔行颜色相同,
Samplecode:
LT_LAYO-COLWIDTH_OPTIMIZE='X'.✍自动缩进
效果见图()。
图()
LAYOUT-F2CODE:
当你把这个参数设为‘&ETA’时,你双击字段时会触发FUNCTIONCODE
Samplecode:
LT_LAYO-F2CODE='&ETA'✍双击触发
效果见图()。
图()
LAYOUT-EDIT:
当你把这个参数的值设定为‘X’之后,就表示输出的时候ALV所有的列都可以修改,
Samplecode:
LT_LAYO-EDIT='X'✍所有列都可以修改
效果见图()。
图()
第六步
当你把字段格式和LAYOUT格式都设置的差不多了,那么接下来就需要把你要显示的字段和内容取入你的内表,这个我就不多说了,每个人都每个人的需求。
第七步
那么在你做好以上那6个步骤之后,就可以把ALV显示出来了,这里需要调用函数‘REUSE_ALV_GRID_DISPLAY’
Samplecode:
CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM=L_REPID✍返回程序
IS_LAYOUT=LT_LAYO✍输出格式
IT_FIELDCAT=LIT_FCAT[]✍字段输出格式
IT_EVENTS=GIT_EVENTS[]✍分屏显示
I_GRID_TITLE='物料凭证'✍ALV抬头
I_CALLBACK_USER_COMMAND='FRM_UCOMM'
TABLES
T_OUTTAB=LIT_OUTTAB✍输出的内表
EXCEPTIONS
PROGRAM_ERROR=1
OTHERS=2.
例子程序:
*&---------------------------------------------------------------------*
*&ReportZ_TEST_ALV_ZJY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORTZ_TEST_ALV_ZJY.
TABLES:
MSEG.
TYPE-POOLS:
SLIS.
DATA:
LIT_FCATTYPESLIS_T_FIELDCAT_ALV,
LT_LAYOTYPESLIS_LAYOUT_ALV.
DATABEGINOFLIT_OUTTABOCCURS0.
INCLUDESTRUCTUREMSEG.
DATA:
TEXTTYPEPDECIMALS2,
ROW_COLOR(4),
ENDOFLIT_OUTTAB.
DATA:
GIT_EVENTSTYPESLIS_T_EVENT,",RUNTIME
"ERROR
GIT_LISTHEADERTYPESLIS_T_LISTHEADER.",RUNTIME
"ERROR
DATALIT_EXTABTYPESLIS_T_EXTAB.
*&---------------------------------------------------------------------*
**StartofSelection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORMFRM_GET_EVENTS.
PERFORMFRM_COMMENT_BUILD.
PERFORMFRM_FLDCAT.
PERFORMFRM_LAYOUT.
PERFORMFRM_ADD_DATA.
PERFORMFRM_EXCLUDING.
PERFORMFRM_OUTPUT.
*&---------------------------------------------------------------------*
*&FormFRM_FLDCAT
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
FORMFRM_FLDCAT.
DATALS_FCATTYPESLIS_FIELDCAT_ALV.
*
CLEARLIT_FCAT.
PERFORMFRM_GET_ALL_FIELDUSINGLS_FCAT.
*REF
PERFORMFRM_REF_FIELDUSINGLS_FCAT.
*
PERFORMFRM_REDEFINE_FIELDUSINGLS_FCAT.
*
*PERFORMFRM_SUM_FIELDUSINGLS_FCAT.
*HOTSPOT
PERFORMFRM_COLOR_HOTSPOTUSINGLS_FCAT.
*
PERFORMFRM_FORMAT_FIELDUSINGLS_FCAT.
ENDFORM."FRM_FLDCAT
*&---------------------------------------------------------------------*
*&FormFRM_ADD_DATA
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
FORMFRM_ADD_DATA.
SELECT*UPTO10ROWS
INTOCORRESPONDINGFIELDSOFTABLELIT_OUTTAB
FROMMSEG.
*ICON
LOOPATLIT_OUTTAB.
LIT_OUTTAB-WERKS='@06@'.
LIT_OUTTAB-TEXT=''.
LIT_OUTTAB-ROW_COLOR='5'.
MODIFYLIT_OUTTAB.
ENDLOOP.
ENDFORM."FRM_ADD_DATA
*&---------------------------------------------------------------------*
*&FormFRM_LAYOUT
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
FORMFRM_LAYOUT.
LT_LAYO-COLWIDTH_OPTIMIZE='X'.
LT_LAYO-ZEBRA='X'."
*LT_LAYO-EDIT='X'."ALV,,
*"
LT_LAYO-INFO_FIELDNAME='ROW_COLOR'."OUTTAB
LT_LAYO-F2CODE='&ETA'."FUNCTIONCODE
*LT_LAYO-TOTALS_ONLY='X'.
*LT_LAYO-DETAIL_POPUP='X'.
ENDFORM."FRM_LAYOUT
*&---------------------------------------------------------------------*
*&FormFRM_OUTPUT
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
FORMFRM_OUTPUT.
DATAL_REPIDLIKESY-REPIDVALUESY-REPID.
CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM=L_REPID"SAPSY-REPID
IS_LAYOUT=LT_LAYO
IT_FIELDCAT=LIT_FCAT[]
IT_EVENTS=GIT_EVENTS[]
I_SAVE='X'
I_GRID_TITLE=''
I_CALLBACK_USER_COMMAND='FRM_UCOMM'
IT_EXCLUDING=LIT_EXTAB""SHIFT+F3"
"SAPALVSTATUS
"SAPLSALV
*I_STRUCTURE_NAME='MSEG'"MSEG
TABLES
T_OUTTAB=LIT_OUTTAB
EXCEPTIONS
PROGRAM_ERROR=1
OTHERS=2.
IFSY-SUBRC<>0.
MESSAGEIDSY-MSGIDTYPESY-MSGTYNUMBERSY-MSGNO
WITHSY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.
ENDIF.
ENDFORM."FRM_OUTPUT
*&---------------------------------------------------------------------*
*&FormFRM_GET_ALL_FIELD
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->p1text
*<--p2text
*----------------------------------------------------------------------*
FORMFRM_GET_ALL_FIELDUSINGPS_FCATTYPESLIS_FIELDCAT_ALV.
CALLFUNCTION'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME=SY-REPID
*I_INTERNAL_TABNAME=
I_STRUCTURE_NAME='MSEG'
*I_CLIENT_NEVER_DISPLAY='X'
*I_INCLNAME=
*I_BYPASSING_BUFFER=
*I_BUFFER_ACTIVE=
CHANGING
CT_FIELDCAT=LIT_FCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE=1
PROGRAM_ERROR=2
OTHERS=3
.
IFSY-SUBRC<>0.
MESSAGEIDSY-MSGIDTYPESY-MSGTYNUMBERSY-MSGNO
WITHSY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.
ENDIF.
LOOPATLIT_FCATINTOPS_FCAT.
IFSY-TABIX>4.
DELETELIT_FCAT.
ENDIF.
ENDLOOP.
ENDFORM."FRM_GET_ALL_FIELD
*&---------------------------------------------------------------------*
*&FormFRM_REF_FIELD
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
FORMFRM_REF_FIELDUSINGPS_FCATTYPESLIS_FIELDCAT_ALV.
CLEARPS_FCAT.
PS_FCAT-FIELDNAME='MATNR'.
PS_FCAT-REF_TABNAME='MSEG'.
PS_FCAT-COL_POS='1'.
PS_FCAT-KEY='X'."
APPENDPS_FCATTOLIT_FCAT.
ENDFORM."FRM_REF_FIELD
*&---------------------------------------------------------------------*
*&FormFRM_REDEFINE_FIELD
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
FORMFRM_REDEFINE_FIELDUSINGPS_FCATTYPESLIS_FIELDCAT_ALV.
*
CLEARPS_FCAT.
PS_FCAT-FIELDNAME='TEXT'."
PS_FCAT-INTTYPE='P'.
"PS_FCAT-DATATYPE='P'.
PS_FCAT-OUTPUTLEN=20.
PS_FCAT-COL_POS='7'.
*LIT_FCAT-CHECKBOX='X'.
PS_FCAT-SELTEXT_L='ADDBYJacky_L'.
PS_FCAT-SELTEXT_M='ADDBYJacky_M'.
PS_FCAT-SELTEXT_S='ADDBYJacky_S'.