无法使用 REUSE_ALV_FIELDCATALOG_MERGE 创建字段目录

Cannot create field catalog with REUSE_ALV_FIELDCATALOG_MERGE

我是 ABAP 新手,我正在尝试使用 REUSE_ALV_FIELDCATALOG_MERGE 功能模块构建字段目录。此功能模块以 sy-subrc1 ("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,那么必须遵守这些条件:

  1. 你的内部 table 和要显示的数据必须用单词“OCCURS”声明(不是必须使用加法“WITH HEADER LINE”)。
  2. 必须使用“LIKE”声明内部 table 的字段。如果您使用“TYPE”来声明字段,它将不起作用。
  3. 程序中的每一行都不应超过 72 个字符。否则将生成一个带有异常 cx_sy_read_src_line_too_long 的简短转储,因为 FM 必须扫描您的程序代码以查找内部 table 定义。

总之,老FM,问题多多