1、SAP ALV 详细使用方法ALV学习资料SAP提供一组ALV(ABAP LIST VIEWER)功能模块,这些功能模块可以修饰报表输出。这些设置的ALV功能可以提高报表的可读性。首先呢,我先跟大家说一下ALV是什么东西?ALV=SAP LIST VIEWER,SAP列表显示器。就目前ALV技术主要分ALV GRID 和 ALV TREE。先跟大家说一下目前本人用的比较多的ALV GRID技术,ALV GRID 的效果见图()。图()第一步在使用ALV时,需要定义一个SAP标准TYPE-POOLS,具体语法为:TYPE-POOLS: SLIS.然后需要定义一个LAYOUT式样,和一个FIELD
2、CAT字段格式,具体语法为:DATA: LIT_FCAT TYPE SLIS_T_FIELDCAT_ALV, LT_LAYO TYPE SLIS_LAYOUT_ALV,GIT_EVENTS TYPE SLIS_T_EVENT, GIT_LISTHEADER TYPE SLIS_T_LISTHEADER., LIT_EXTAB TYPE SLIS_T_EXTAB.第二步(可选)可以为需要为最初的目录显示选择参数。在这里需要使用函数REUSE_ALV_VARIANT_DEFAULT_GETSample code: CALL FUNCTION REUSE_ALV_VARIANT_DEFAULT_GE
3、T EXPORTING i_save = variant save condition ( A=all, U = user-specific ) CHANGING cs_variant = internal table containing the program name (and the default variant-optional ) EXCEPTIONS not_found = 2.使用者也可以使用现有的变量中选择,使用函数REUSE_ALV_VARIANT_F4。第三步调用函数REUSE_ALV_EVENTS_GET达到分屏显示的效果Sample code: CALL FUNCT
4、ION 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_WRITESample code:CALL FUNCTION REUSE_ALV_COMMENTARY_WRITE EXPORTING IT_LIST_COMMENTARY = GIT_LISTHEADER 文本抬头 I
5、_LOGO = ENJOYSAP_LOGO. 图片 L_LISTHEADER-TYP = H. L_LISTHEADER-INFO = TEST ALV. 文本抬头内容APPEND L_LISTHEADER TO GIT_LISTHEADER.具体效果见图()图()第四步调用函数REUSE_ALV_FIELDCATALOG_MERGE获得标准字段Sample code:CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGE EXPORTING I_PROGRAM_NAME = SY-REPID I_STRUCTURE_NAME = MSEG 表名 CHANGING
6、 CT_FIELDCAT = LIT_FCAT 字段格式 EXCEPTIONS INCONSISTENT_INTERFACE = 1 PROGRAM_ERROR = 2 OTHERS = 3 CLEAR PS_FCAT. PS_FCAT-FIELDNAME = MATNR. 表中字段名PS_FCAT-REF_TABNAME = MSEG. 表名PS_FCAT-KEY = X 水平移动时固定该列PS_FCAT-COL_POS = 1. 列的位数 APPEND PS_FCAT TO LIT_FCAT.具体效果见图()图()在这里我们也可以使用自定义字段Sample code: PS_FCAT-FI
7、ELDNAME = TEXT. 字段名,一定要大写PS_FCAT-INTTYPE = P. 字段类型PS_FCAT-OUTPUTLEN = 20 . 输出长度 PS_FCAT-COL_POS = 7. 列的位数 PS_FCAT-SELTEXT_L = ADD BY Jacky_L. 列的抬头文本 PS_FCAT-SELTEXT_M = ADD BY Jacky_M. 列的抬头文本 PS_FCAT-SELTEXT_S = ADD BY Jacky_S. 列的抬头文本 PS_FCAT-DDICTXT = M. 选择M抬头 PS_FCAT-EDIT = X. 该列可编辑 APPEND PS_FCAT
8、 TO LIT_FCAT.具体效果见图()图()在这里我们也可以自己设定输出的格式Sample code: CLEAR PS_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. 激活热点 APPEND PS_FCAT
9、 TO LIT_FCAT.具体效果见图()图()还可以把输出的字段变成图标:首先呢,在数据取入内表之后,循环这个内表,把要改变的那个字段进行操作Sample code: LOOP AT LIT_OUTTAB. LIT_OUTTAB-WERKS = 06. 图标的名字 MODIFY LIT_OUTTAB.ENDLOOP.然后在定义字段格式的时候 PS_FCAT-FIELDNAME = WERKS. PS_FCAT-REF_TABNAME = MSEG. PS_FCAT-COL_POS = 10. PS_FCAT-ICON = X. 激活图标 APPEND PS_FCAT TO LIT_FCAT.
10、具体效果见图()图()第五步当你把字段格式都设定完了之后,那么接下来你就需要设定LAYOUT输出的格式了。在LAYOUT中有几个参数是比较重要和比较常用到的:LAYOUT-COLWIDTH_OPTIMIZE:当你把这个参数的值设为X时,ALV中的字段就会自动缩近,也就是说当你把一个字段设为100位长时,而你输入的那个值只有10位长,这个参数就会把字段的长度自动缩进为10位长:Sample code:LT_LAYO-COLWIDTH_OPTIMIZE = X. 自动缩进效果见图()。图()LAYOUT-ZEBRA:当你把这个参数的值设为X时,ALV显示时会隔行颜色相同,Sample code:L
11、T_LAYO-COLWIDTH_OPTIMIZE = X. 自动缩进效果见图()。图()LAYOUT-F2CODE :当你把这个参数设为&ETA时,你双击字段时会触发FUNCTION CODESample code:LT_LAYO-F2CODE = &ETA 双击触发效果见图()。图()LAYOUT-EDIT:当你把这个参数的值设定为X之后,就表示输出的时候ALV所有的列都可以修改,Sample code:LT_LAYO-EDIT = X 所有列都可以修改效果见图()。图()第六步当你把字段格式和LAYOUT格式都设置的差不多了,那么接下来就需要把你要显示的字段和内容取入你的内表,这个我就不多
12、说了,每个人都每个人的需求。第七步那么在你做好以上那6个步骤之后,就可以把ALV显示出来了,这里需要调用函数REUSE_ALV_GRID_DISPLAYSample code: CALL FUNCTION 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_COMMA
13、ND = FRM_UCOMM TABLES T_OUTTAB = LIT_OUTTAB 输出的内表 EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2.例子程序:*&-*& Report Z_TEST_ALV_ZJY *& *&-*& *& *&-*REPORT Z_TEST_ALV_ZJY .TABLES: MSEG.TYPE-POOLS: SLIS.DATA: LIT_FCAT TYPE SLIS_T_FIELDCAT_ALV, LT_LAYO TYPE SLIS_LAYOUT_ALV.DATA BEGIN OF LIT_OUTTAB OCCURS 0. INC
14、LUDE STRUCTURE MSEG.DATA: TEXT TYPE P DECIMALS 2, ROW_COLOR(4), END OF LIT_OUTTAB.DATA: GIT_EVENTS TYPE SLIS_T_EVENT, ,RUNTIME ERROR GIT_LISTHEADER TYPE SLIS_T_LISTHEADER.,RUNTIME ERRORDATA LIT_EXTAB TYPE SLIS_T_EXTAB.*&-* Start of Selection*&-*START-OF-SELECTION. PERFORM FRM_GET_EVENTS. PERFORM FRM
15、_COMMENT_BUILD. PERFORM FRM_FLDCAT. PERFORM FRM_LAYOUT. PERFORM FRM_ADD_DATA. PERFORM FRM_EXCLUDING. PERFORM FRM_OUTPUT.*&-*& Form FRM_FLDCAT*&-* text*-*FORM FRM_FLDCAT .DATA LS_FCAT TYPE SLIS_FIELDCAT_ALV.* CLEAR LIT_FCAT. PERFORM FRM_GET_ALL_FIELD USING LS_FCAT.* REF PERFORM FRM_REF_FIELD USING LS
16、_FCAT.* PERFORM FRM_REDEFINE_FIELD USING LS_FCAT.* PERFORM FRM_SUM_FIELD USING LS_FCAT.* HOTSPOT PERFORM FRM_COLOR_HOTSPOT USING LS_FCAT.* PERFORM FRM_FORMAT_FIELD USING LS_FCAT.ENDFORM. FRM_FLDCAT*&-*& Form FRM_ADD_DATA*&-* text*-*FORM FRM_ADD_DATA . SELECT * UP TO 10 ROWS INTO CORRESPONDING FIELDS
17、 OF TABLE LIT_OUTTAB FROM MSEG.* ICON LOOP AT LIT_OUTTAB. LIT_OUTTAB-WERKS = 06. LIT_OUTTAB-TEXT = . LIT_OUTTAB-ROW_COLOR = 5. MODIFY LIT_OUTTAB. ENDLOOP.ENDFORM. FRM_ADD_DATA*&-*& Form FRM_LAYOUT*&-* text*-*FORM FRM_LAYOUT . LT_LAYO-COLWIDTH_OPTIMIZE = X. LT_LAYO-ZEBRA = X. *LT_LAYO-EDIT = X. ALV,*
18、 LT_LAYO-INFO_FIELDNAME = ROW_COLOR. OUTTAB LT_LAYO-F2CODE = &ETA. FUNCTION CODE* LT_LAYO-TOTALS_ONLY = X.* LT_LAYO-DETAIL_POPUP = X.ENDFORM. FRM_LAYOUT*&-*& Form FRM_OUTPUT*&-* text*-*FORM FRM_OUTPUT .DATA L_REPID LIKE SY-REPID VALUE SY-REPID. CALL FUNCTION REUSE_ALV_GRID_DISPLAY EXPORTING I_CALLBA
19、CK_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 SAPALV STATUS SAPLSALV* I_STRUCTURE_NAME = MSEG MSEG TABLES T_OUTTAB = LIT_OUTTAB EXCEPTIONS PROGRAM_ERRO
20、R = 1 OTHERS = 2. IF SY-SUBRC 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.ENDFORM. FRM_OUTPUT*&-*& Form FRM_GET_ALL_FIELD*&-* text*-* - p1 text* - p2 text*-*FORM FRM_GET_ALL_FIELD USING PS_FCAT TYPE SLIS_FIELDCAT_ALV. CALL FUNCTION REUSE_ALV_F
21、IELDCATALOG_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 . IF SY-SUBRC 0. M
22、ESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. LOOP AT LIT_FCAT INTO PS_FCAT. IF SY-TABIX 4. DELETE LIT_FCAT. ENDIF. ENDLOOP.ENDFORM. FRM_GET_ALL_FIELD*&-*& Form FRM_REF_FIELD*&-* text*-*FORM FRM_REF_FIELD USING PS_FCAT TYPE SLIS_FIELDCAT_ALV. CLEAR
23、 PS_FCAT. PS_FCAT-FIELDNAME = MATNR. PS_FCAT-REF_TABNAME = MSEG. PS_FCAT-COL_POS = 1. PS_FCAT-KEY = X. APPEND PS_FCAT TO LIT_FCAT.ENDFORM. FRM_REF_FIELD*&-*& Form FRM_REDEFINE_FIELD*&-* text*-*FORM FRM_REDEFINE_FIELD USING PS_FCAT TYPE SLIS_FIELDCAT_ALV.* CLEAR PS_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 = ADD BY Jacky_L. PS_FCAT-SELTEXT_M = ADD BY Jacky_M. PS_FCAT-SELTEXT_S = ADD BY Jacky_S.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1