繁体   English   中英

REUSE_ALV_FIELDCATALOG_MERGE 用于生成 ALV 层次结构列表?

[英]REUSE_ALV_FIELDCATALOG_MERGE for generating ALV hierarchial list?

当我执行此代码时,会发生一些错误。 REUSE_ALV_FIELDCATALOG_MERGE功能模块可以用于在ABAP中生成alv层次报告吗? 有没有最简单的 fieldcatalog 合并的提示?

REPORT ZSAMPLE_ALV_HIERACHIAL.

DATA : IT_VBAK LIKE TABLE OF VBAK,
       WA_VBAK LIKE VBAK,

       IT_VBAP LIKE TABLE OF VBAP,
       WA_VBAP LIKE VBAP,

       IT_MARA LIKE TABLE OF MARA,
       WA_MARA LIKE MARA,

       IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
       WA_FCAT TYPE SLIS_FIELDCAT_ALV,

       IT_FCAT1 TYPE SLIS_T_FIELDCAT_ALV,
       WA_FCAT1 TYPE SLIS_FIELDCAT_ALV,

       IT_EVENT TYPE SLIS_T_EVENT,
       WA_EVENT TYPE SLIS_ALV_EVENT,

       V_VBELN TYPE VBAK-VBELN,

       GS_KEYINFO TYPE SLIS_KEYINFO_ALV,

       WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
       WA_LAYOUT1 TYPE SLIS_LAYOUT_ALV.

WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'C510'.

WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'C510'.

SELECT-OPTIONS S_VBELN FOR V_VBELN.

START-OF-SELECTION.
  PERFORM READ_DATA.
  PERFORM KEY_INFO.
  PERFORM FILL_FIELD_CATALOG USING 'IT_VBAK' 'VBAK'.
  PERFORM FILL_FIELD_CATALOG USING 'IT_VBAP' 'VBAP'.
  PERFORM DISPLAY_HIERACIAL_ALV.

*&---------------------------------------------------------------------*
*&      Form  READ_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM READ_DATA .

  SELECT * FROM VBAK INTO TABLE IT_VBAK WHERE VBELN IN S_VBELN.

  IF NOT IT_VBAK IS INITIAL .

    SELECT * FROM VBAP INTO TABLE IT_VBAP FOR ALL ENTRIES IN IT_VBAK WHERE VBELN = IT_VBAK-VBELN.

  ENDIF.

ENDFORM.                    "READ_DATA

*&---------------------------------------------------------------------*
*&      Form  KEY_INFO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM KEY_INFO .

  CLEAR GS_KEYINFO.
  GS_KEYINFO-HEADER01 = 'VBELN'.
  GS_KEYINFO-ITEM01 = 'VBELN'.
  GS_KEYINFO-HEADER02 = SPACE.
  GS_KEYINFO-ITEM02 = 'VBELP'.

ENDFORM.                    "KEY_INFO

*&---------------------------------------------------------------------*
*&      Form  FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->TNAM       text
*      -->C          text
*----------------------------------------------------------------------*
FORM FILL_FIELD_CATALOG  USING    TNAM TYPE C STRUCTURE TYPE C.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME     = SY-REPID
      I_INTERNAL_TABNAME = TNAM
      I_STRUCTURE_NAME   = STRUCTURE
    CHANGING
      CT_FIELDCAT        = IT_FCAT.
ENDFORM.                    "FILL_FIELD_CATALOG

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_HIERACIAL_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM DISPLAY_HIERACIAL_ALV .

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-CPROG
      IS_LAYOUT               = WA_LAYOUT
      IT_FIELDCAT             = IT_FCAT
      I_TABNAME_HEADER        = 'IT_VBAK'
      I_TABNAME_ITEM          = 'IT_VBAP'
*     I_STRUCTURE_NAME_HEADER = 'VBAK'
*     I_STRUCTURE_NAME_ITEM   = 'VBAP'
      IS_KEYINFO              = GS_KEYINFO
    TABLES
      T_OUTTAB_HEADER         = IT_VBAK
      T_OUTTAB_ITEM           = IT_VBAP.

ENDFORM.

您也绝对可以将它用于分层报告! 但是你应该用另一种方式声明你的 itabs 来实现这一点。

票据夫妇:用下面的声明中,您应检查it_vbak[]it_vbak的read_data形式,否则你it_vbap ITAB将总是空的。 此外,如果它是内部表,您应该仅通过i_internal_tabnam参数将REUSE_ALV_FIELDCATALOG_MERGE传递给REUSE_ALV_FIELDCATALOG_MERGE

最后,您的代码应该看起来像这样:

DATA: BEGIN OF it_vbak OCCURS 0,
        vbeln LIKE vbak-vbeln,
        expand,
      END OF it_vbak.
DATA: BEGIN OF it_vbap OCCURS 0,
        vbeln LIKE vbap-vbeln,
        posnr LIKE vbap-posnr,
        matnr LIKE vbap-matnr,
        netpr LIKE vbap-netpr,
      END OF it_vbap,

v_vbeln TYPE vbak-vbeln,
it_fcat TYPE slis_t_fieldcat_alv,
gs_keyinfo TYPE slis_keyinfo_alv,
wa_layout  TYPE slis_layout_alv.

SELECT-OPTIONS s_vbeln FOR v_vbeln.

START-OF-SELECTION.
  PERFORM read_data.
  PERFORM key_info.
  PERFORM fill_field_catalog USING 'IT_VBAK'.
  PERFORM fill_field_catalog USING 'IT_VBAP'.
  PERFORM display_hieracial_alv.
*&---------------------------------------------------------------------*
*&      Form  READ_DATA
*&---------------------------------------------------------------------*
FORM read_data .
  SELECT * FROM vbak INTO CORRESPONDING FIELDS OF TABLE it_vbak WHERE
  vbeln IN s_vbeln.
  IF NOT it_vbak[] IS INITIAL.
    SELECT * FROM vbap INTO CORRESPONDING FIELDS OF TABLE it_vbap FOR
ALL ENTRIES IN it_vbak
    WHERE vbeln = it_vbak-vbeln.
  ENDIF.
ENDFORM.                    "READ_DATA
*&---------------------------------------------------------------------*
*&      Form  KEY_INFO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM key_info .
  CLEAR gs_keyinfo.
  gs_keyinfo-header01 = 'VBELN'.
  gs_keyinfo-item01 = 'VBELN'.
ENDFORM.                    "KEY_INFO
*&---------------------------------------------------------------------*
*&      Form  FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
FORM fill_field_catalog  USING tnam TYPE c.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = sy-repid
      i_internal_tabname = tnam
      i_inclname         = sy-repid
    CHANGING
      ct_fieldcat        = it_fcat.
ENDFORM.                    "FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_HIERACIAL_ALV
*&---------------------------------------------------------------------*
FORM display_hieracial_alv.
  wa_layout-zebra = 'X'.
  wa_layout-subtotals_text = 'SUBTOTAL TEXT'.
  wa_layout-key_hotspot = 'X'.
  wa_layout-expand_fieldname = 'EXPAND'.
  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      i_callback_program      = sy-cprog
      is_layout               = wa_layout
      it_fieldcat             = it_fcat
      i_tabname_header        = 'IT_VBAK'
      i_tabname_item          = 'IT_VBAP'
      is_keyinfo              = gs_keyinfo
    TABLES
      t_outtab_header         = it_vbak
      t_outtab_item           = it_vbap.
ENDFORM.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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