SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE LSPFLI.
ENDFORM. "GETDATA
*FORM CATALOG 根据结构体获取FIELDCAT
FORM CATALOG.
W_REPID = SY-REPID.
CLEAR FIELDCAT.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = W_REPID
*I_INTERNAL_TABNAME =
I_STRUCTURE_NAME = 'SPFLI'
*I_CLIENT_NEVER_DISPLAY = 'X'
*I_INCLNAME =
*I_BYPASSING_BUFFER =
*I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = FIELDCAT[] "导出FIELDCAT内表数据
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
"对fieldcat属性的修改
*READ TABLE fieldCat INDEX 2. "将第二列设为热点显示
*fieldCat-HOTSPOT = 'X'.
*MODIFY fieldCat INDEX 2.
*
*READ TABLE fieldCat INDEX 4. "将第四列设为KEY值字段
*fieldCat-KEY = 'X'.
*MODIFY fieldCat INDEX 4.
*
*READ TABLE fieldCat INDEX 5. "将第五列设为CHECKBOX
*fieldCat-CHECKBOX = 'X'.
*MODIFY fieldCat INDEX 5.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "设置LAYOUT输出格式最优化
ENDFORM. "CATALOG
*The Function Of Show ALV
FORM ALVSHOW.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = W_REPID
I_GRID_TITLE = 'ALV REPORT TEST'"ALV显示标题
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FIELDCAT[]
TABLES
T_OUTTAB = LSPFLI
EXCEPTIONS
PROGRAM_ERROR = 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. "ALVSHOW
复制代码
错误排查:
有的时候写好代码调用 REUSE_ALV_FIELDCATALOG_MERGE 时会莫名的出错提示为 READ_REPORT_LINE_TOO_LONG 下面列出的错误信息有这么一句.
The internal table "/FUNCTION=K_KKB_FIELDCAT_MERGE/DATA=L_ABAP_SOURCE[]" is 72
characters wide. The program line is 99 characters wide.
该FM会把整个程序代码拷贝至其内表中,如果程序的行超过72个字符,即报如上错误。可以做以下设置。
REUSE_ALV_FIENDCATALOG_MERGE:根据内表结构返回FIELDCAT字段结构信息,其常用输入输出参数如下:
EXPORTING项:
1.I_PROGRAM_NAME:程序名称。
2.I_INTERNAL_TABNAME:内表名称,必须为输出内表所自定义的STRUCTURE名。
3.I_STRUCTURE_NAME:直接参考数据字典中所定义的透明表名或STRUCTURE名。
函数定义时I_INTERNAL_TABNAME或I_STRUCTURE_NAME参数只需一项。
CHANGING项:
CT_FIELDCAT:导出FIELDCAT内表数据。
注意:REUSE_ALV_FIENDCATALOG_MERGE函数不能与REUSE_ALV_GRID_DISPLAY_LVC连用,因为IT_FIELDCAT的类型不一样,能与REUSE_ALV_GRID_DISPLAY连用
最终运行结果如下:
主程序代码:
错误排查:
有的时候写好代码调用 REUSE_ALV_FIELDCATALOG_MERGE 时会莫名的出错提示为 READ_REPORT_LINE_TOO_LONG 下面列出的错误信息有这么一句.
The internal table "/FUNCTION=K_KKB_FIELDCAT_MERGE/DATA=L_ABAP_SOURCE[]" is 72
characters wide. The program line is 99 characters wide.
该FM会把整个程序代码拷贝至其内表中,如果程序的行超过72个字符,即报如上错误。可以做以下设置。