【SAP ABAP】动态显示ALV

来源:互联网 发布:sketch mac 激活码 编辑:程序博客网 时间:2024/05/16 08:04

动态显示ALV分为以下几步:

一、创建动态的fieldcat:和普通创建fieldcat的方法相同,不过通过循环去创建实现动态的列;

二、根据上一步骤创建的fieldcat创建动态的内表,使用cl_alv_table_create=>create_dynamic_table;

三、指针为动态表赋值;

四、显示ALV。

本人将以上步骤精简,做了一个小程序(画面参数p_col是将要显示的alv列数)总结,如下:

* test:动态alv
REPORT ztest_02.
* definition for data get
TYPES:BEGIN OF typ_vbap,
        vbeln TYPE vbap-vbeln,
        posnr TYPE vbap-posnr,
      END OF typ_vbap.
DATA:
  gt_vbap TYPE TABLE OF typ_vbap,
  st_vbap TYPE typ_vbap.
* definition for dynamic table
DATA:
      t_dyntab TYPE REF TO data,
      s_dyntab TYPE REF TO data.
FIELD-SYMBOLS:
  <dyntab> TYPE STANDARD TABLE,
  <fs_val> TYPE any ,
  <fs_wa>  TYPE any .

* definition for alv
DATA:
  t_fcat TYPE lvc_t_fcat,
  s_fcat TYPE lvc_s_fcat.
DATA:
      g_fname TYPE char2.
DEFINE fcat.
  s_fcat-FIELDNAME &1.
  s_fcat-SCRTEXT_L &2.
  APPEND s_fcat to t_fcat.
  CLEAR s_fcat.
END-OF-DEFINITION.

PARAMETERS p_col TYPE i.

START-OF-SELECTION.
* 取数
  SELECT vbeln posnr
    INTO TABLE gt_vbap
    FROM vbap
    UP TO p_col ROWS.

* fcat set
  fcat 'VBELN' 'SO'.
  fcat 'POSNR' 'SOITEM'.
  DO p_col TIMES.
    g_fname sy-index.
    CONCATENATE 'F' g_fname INTO g_fname.
    fcat g_fname g_fname.
  ENDDO.

* dynamic table create
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           t_fcat
    IMPORTING
      ep_table                  t_dyntab
    EXCEPTIONS
      generate_subpool_dir_full 1
      OTHERS                    2.
  IF sy-subrc <> 0.
    MESSAGE 'create dynamic table error' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

* dynamic table data fill
  ASSIGN t_dyntab->TO <dyntab>.
  CREATE DATA s_dyntab LIKE LINE OF <dyntab>.
  ASSIGN s_dyntab->to <fs_wa>.
  LOOP AT gt_vbap INTO st_vbap.
    ASSIGN COMPONENT 'VBELN' OF STRUCTURE <fs_wa> TO <fs_val>.
    <fs_val> st_vbap-vbeln.
    ASSIGN COMPONENT 'POSNR' OF STRUCTURE <fs_wa> TO <fs_val>.
    <fs_val> st_vbap-posnr.
    APPEND <fs_wa> TO <dyntab>.
  ENDLOOP.
* alv display
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
   EXPORTING
     I_CALLBACK_PROGRAM                sy-repid
     IT_FIELDCAT_LVC                   t_fcat
    TABLES
      t_outtab                          <dyntab>
   EXCEPTIONS
     PROGRAM_ERROR                     1
     OTHERS                            2
            .
  IF sy-subrc <> 0.
    MESSAGE 'alv display error' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

0 0