无法使用 REUSE_ALV_FIELDCATALOG_MERGE 创建字段目录
Cannot create field catalog with REUSE_ALV_FIELDCATALOG_MERGE
我是 ABAP 新手,我正在尝试使用 REUSE_ALV_FIELDCATALOG_MERGE
功能模块构建字段目录。此功能模块以 sy-subrc
值 1
("Inconsistent interface") 退出,并出现一个消息对话框,提示无法构建字段目录。
我的代码和网上找的例子是一样的。也许我错过了什么。
我的程序由一个 TOP 包含、一个 FORMS 包含和主模块组成:
表格包括:
FORM DISPLAY_WITH_ALV_LIST.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = sy-repid
I_INTERNAL_TABNAME = 'it_report'
I_INCLNAME = sy-repid
CHANGING
CT_FIELDCAT = it_fldcat.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
IT_FIELDCAT = it_fldcat
TABLES
T_OUTTAB = it_report.
ENDFORM.
FORM ZSELECT.
SELECT VBELN ERDAT ERNAM
FROM VBAK
INTO CORRESPONDING FIELDS OF TABLE it_report
WHERE ERDAT IN S_ERDAT
AND ERNAM IN S_ERNAM.
ENDFORM.
TOP包括:
TYPE-POOLS: slis.
TABLES VBAK.
DATA: BEGIN OF it_report OCCURS 0,
VBELN LIKE VBAK-VBELN,
ERDAT LIKE VBAK-ERDAT,
ERNAM LIKE VBAK-ERNAM,
END OF it_report.
DATA it_fldcat TYPE slis_t_fieldcat_alv.
主模块:
REPORT ZMLA_EXO1.
INCLUDE ZMLA_EXO1_TOP.
INCLUDE ZMLA_EXO1_SCREEN.
INCLUDE ZMLA_EXO1_FORM.
INITIALIZATION.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM ZSELECT.
PERFORM DISPLAY_WITH_ALV_LIST.
END-OF-SELECTION.
我建议使用 "SALV" class。它非常简单,在您的情况下它看起来像这样:
DATA: go_salv_table TYPE REF TO cl_salv_table.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_salv_table
CHANGING
t_table = it_report.
go_salv_table->display( ).
如果你仍然坚持使用功能模块(FM)REUSE_ALV_FIELDCATALOG_MERGE
,并从内部生成字段目录table,那么必须遵守这些条件:
- 你的内部 table 和要显示的数据必须用单词“
OCCURS
”声明(不是必须使用加法“WITH HEADER LINE
”)。
- 必须使用“
LIKE
”声明内部 table 的字段。如果您使用“TYPE
”来声明字段,它将不起作用。
- 程序中的每一行都不应超过 72 个字符。否则将生成一个带有异常
cx_sy_read_src_line_too_long
的简短转储,因为 FM 必须扫描您的程序代码以查找内部 table 定义。
总之,老FM,问题多多
我是 ABAP 新手,我正在尝试使用 REUSE_ALV_FIELDCATALOG_MERGE
功能模块构建字段目录。此功能模块以 sy-subrc
值 1
("Inconsistent interface") 退出,并出现一个消息对话框,提示无法构建字段目录。
我的代码和网上找的例子是一样的。也许我错过了什么。
我的程序由一个 TOP 包含、一个 FORMS 包含和主模块组成:
表格包括:
FORM DISPLAY_WITH_ALV_LIST.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = sy-repid
I_INTERNAL_TABNAME = 'it_report'
I_INCLNAME = sy-repid
CHANGING
CT_FIELDCAT = it_fldcat.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
IT_FIELDCAT = it_fldcat
TABLES
T_OUTTAB = it_report.
ENDFORM.
FORM ZSELECT.
SELECT VBELN ERDAT ERNAM
FROM VBAK
INTO CORRESPONDING FIELDS OF TABLE it_report
WHERE ERDAT IN S_ERDAT
AND ERNAM IN S_ERNAM.
ENDFORM.
TOP包括:
TYPE-POOLS: slis.
TABLES VBAK.
DATA: BEGIN OF it_report OCCURS 0,
VBELN LIKE VBAK-VBELN,
ERDAT LIKE VBAK-ERDAT,
ERNAM LIKE VBAK-ERNAM,
END OF it_report.
DATA it_fldcat TYPE slis_t_fieldcat_alv.
主模块:
REPORT ZMLA_EXO1.
INCLUDE ZMLA_EXO1_TOP.
INCLUDE ZMLA_EXO1_SCREEN.
INCLUDE ZMLA_EXO1_FORM.
INITIALIZATION.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM ZSELECT.
PERFORM DISPLAY_WITH_ALV_LIST.
END-OF-SELECTION.
我建议使用 "SALV" class。它非常简单,在您的情况下它看起来像这样:
DATA: go_salv_table TYPE REF TO cl_salv_table.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_salv_table
CHANGING
t_table = it_report.
go_salv_table->display( ).
如果你仍然坚持使用功能模块(FM)REUSE_ALV_FIELDCATALOG_MERGE
,并从内部生成字段目录table,那么必须遵守这些条件:
- 你的内部 table 和要显示的数据必须用单词“
OCCURS
”声明(不是必须使用加法“WITH HEADER LINE
”)。 - 必须使用“
LIKE
”声明内部 table 的字段。如果您使用“TYPE
”来声明字段,它将不起作用。 - 程序中的每一行都不应超过 72 个字符。否则将生成一个带有异常
cx_sy_read_src_line_too_long
的简短转储,因为 FM 必须扫描您的程序代码以查找内部 table 定义。
总之,老FM,问题多多