简体   繁体   中英

Cannot create field catalog with REUSE_ALV_FIELDCATALOG_MERGE

I'm new to ABAP, and I'm trying to build a field catalog using the REUSE_ALV_FIELDCATALOG_MERGE function module. This function module exits with sy-subrc value 1 ("Inconsistent interface") and a message dialog appears saying that the field catalog couldn't be build.

My code is the same as the examples found online. Maybe I missed something.

My program consists of a TOP include, a FORMS include and the main module:

FORMS include:

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 include:

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.

Main module:

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.

I would advise using the "SALV" class. It's pretty straight forward, in your case it would look like this:

    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( ).

If you still insist on using the function module (FM) REUSE_ALV_FIELDCATALOG_MERGE , and generate field catalog from internal table, then these conditions must be observed:

  1. Your internal table with the data to be displayed has to be declared with the word " OCCURS " (not a must to use addition " WITH HEADER LINE ").
  2. Fields of the internal table have to be declared using " LIKE ". It will not work if you use " TYPE " to declare the fields.
  3. No line in your program should exceed 72 characters. Otherwise a short dump will be generated with the exception cx_sy_read_src_line_too_long since the FM has to scan your program code looking for the internal table definition.

In short, it's an old FM with a lot of problems.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM