ALV Grid для встроенной декларации

Как вы отображаете встроенный объявленный тип данных в сетке ALV?

например:

SELECT *
INTO TABLE @DATA(lt_result)
FROM table.

Как можно lt_result отображаться в сетке ALV?

2 ответа

Решение

Вот основной пример:

DATA: alv TYPE REF TO cl_salv_table.   

SELECT *
INTO TABLE @DATA(lt_result)
FROM table.

cl_salv_table=>factory( IMPORTING r_salv_table = alv
                        CHANGING  t_table      = lt_result ).

alv->display( ).

Вы можете найти другие примеры, используя объектную модель SALV в пакете SALV_OM_OBJECTS.

Это более современный подход, чем использование REUSE_ALV_GRID_DISPLAY, и вам не нужно определять каталог полей.

Вы должны сделать то же самое, независимо от того, как вы создали lt_result. select * как в вашем примере приведет к тому, что lt_result будет равен, если вы сделали DATA lt_result type table of tablename

В этом случае вы можете отправить имя структуры. Но это работает, только если тип структуры определен в SE11, т.е. если вы делаете select * без каких-либо соединений или псевдонимов.

В противном случае вам нужно создать и отправить в каталог полей все поля в lt_result, которые вы хотите отобразить.

Пример:

SELECT * FROM mara
UP TO 10 ROWS
INTO TABLE @DATA(lt_mara).

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program = sy-repid
    i_structure_name   = 'MARA'
*    it_fieldcat  => use this if i_structure_name is not sufficient
  TABLES
    t_outtab           = lt_mara
  EXCEPTIONS
    OTHERS             = 1.

То же самое относится, если вы используете cl_gui_alv_grid.

Изменить: Вы можете заполнить поле каталога динамически, как это:

DATA:
  lo_t_struct TYPE REF TO cl_abap_tabledescr,
  lo_struct   TYPE REF TO cl_abap_structdescr.

lo_t_struct ?= cl_abap_tabledescr=>describe_by_data( lt_result ).
lo_struct ?= lo_t_struct->get_table_line_type( ).

LOOP AT lo_struct->components ASSIGNING FIELD-SYMBOL(<comp>).
  "Fill a range-table with <comp>-name
ENDLOOP.

Используйте таблицу диапазонов, чтобы получить описания полей из таблицы dd04t.

Затем цикл в lo_struct->components снова, и заполните поле каталога именем поля и описанием. Здесь вы также можете добавить специальную логику для любых полей.

Другие вопросы по тегам