Набивший оскомину пример:
п.с. если внутреннюю таблицу определяем копией внешней, то для метода cl_gui_alv_grid ->set_table_for_first_display можно не указывать структуру полей. В противном случае - она обязательна.
А вот так быстрее - http://sapforum.biz/index.php?topic=1401.0
На всякий случай, основное:
CL_SALV_TABLE – Класс для быстрого вывода данных в формате AVL-таблицы. В принципе можно конечно все это сделать, используя или функцию REUSE_ALV_LIST_DISPLAY или как вариант использовать базовый класс для вывода таблицы CL_GUI_ALV_GRID. Однако и в том и в другом случае нужно выполнить определенный объем предварительной работы по подготовке каталога данных описывающих поля выводимой таблицы и т.д. Конечно, есть функциональные модули, которые позволяют это ускорить, например, такой как LVC_FIELDCATALOG_MERGE. Однако SAP позаботился о том, чтобы и тут можно было все сделать намного проще, реализовав упрощение вывода ALV-таблиц через класс CL_SALV_TABLE.
В общем виде для вывода любой таблицы данных, а что самое хорошее, это то что можно для отображения использовать не только таблицы, объявленные в словаре данных, но и объявленные внутри своих программ локальные внутренние таблицы, нужно написать буквально несколько строк кода (примеры будут базироваться на таблице MKPF – Заголовки документов движения материала, единственное что возмжно ограничьте выборку документов хотя бы годом, а то в реальной системе может ну очень долго висеть, все таки в IDES документов значительно меньше будет):
DATA:
g_container TYPE scrfname VALUE 'GRID_CONT_1000_01',
grid TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container,
g_container TYPE scrfname VALUE 'GRID_CONT_1000_01',
grid TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container,
INITIALIZATION.
SELECT *
FROM /bic/azloc_map00
INTO TABLE @DATA(itable) “BW 7.4, когда лень объявлять таблицу
UP TO 10 ROWS.
FROM /bic/azloc_map00
INTO TABLE @DATA(itable) “BW 7.4, когда лень объявлять таблицу
UP TO 10 ROWS.
START-OF-SELECTION.
CALL SCREEN 1000. “Контейнер
CALL SCREEN 1000. “Контейнер
MODULE status_1000 OUTPUT.
SET PF-STATUS 'ZNN_MENU'.
SET TITLEBAR 'ZNN_TBAR'.
IF g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING
container_name = g_container.
CREATE OBJECT grid
EXPORTING
i_parent = g_custom_container.
CALL METHOD grid->set_table_for_first_display
CHANGING
it_outtab = itable.
ENDIF.
ENDMODULE.
SET PF-STATUS 'ZNN_MENU'.
SET TITLEBAR 'ZNN_TBAR'.
IF g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING
container_name = g_container.
CREATE OBJECT grid
EXPORTING
i_parent = g_custom_container.
CALL METHOD grid->set_table_for_first_display
CHANGING
it_outtab = itable.
ENDIF.
ENDMODULE.
п.с. если внутреннюю таблицу определяем копией внешней, то для метода cl_gui_alv_grid ->set_table_for_first_display можно не указывать структуру полей. В противном случае - она обязательна.
А вот так быстрее - http://sapforum.biz/index.php?topic=1401.0
На всякий случай, основное:
CL_SALV_TABLE – Класс для быстрого вывода данных в формате AVL-таблицы. В принципе можно конечно все это сделать, используя или функцию REUSE_ALV_LIST_DISPLAY или как вариант использовать базовый класс для вывода таблицы CL_GUI_ALV_GRID. Однако и в том и в другом случае нужно выполнить определенный объем предварительной работы по подготовке каталога данных описывающих поля выводимой таблицы и т.д. Конечно, есть функциональные модули, которые позволяют это ускорить, например, такой как LVC_FIELDCATALOG_MERGE. Однако SAP позаботился о том, чтобы и тут можно было все сделать намного проще, реализовав упрощение вывода ALV-таблиц через класс CL_SALV_TABLE.
В общем виде для вывода любой таблицы данных, а что самое хорошее, это то что можно для отображения использовать не только таблицы, объявленные в словаре данных, но и объявленные внутри своих программ локальные внутренние таблицы, нужно написать буквально несколько строк кода (примеры будут базироваться на таблице MKPF – Заголовки документов движения материала, единственное что возмжно ограничьте выборку документов хотя бы годом, а то в реальной системе может ну очень долго висеть, все таки в IDES документов значительно меньше будет):
* Объявляем внутреннюю таблицу, со своими полями + поля из таблицы MKPF
DATA: BEGIN OF gt_mkpf OCCURS 10,
sel(1) TYPE c.
INCLUDE STRUCTURE mkpf.
DATA: my_field(5) TYPE c,
END OF gt_mkpf.
* Объявляем объект типа cl_salv_table, который выведет наши данные в виде ALV
DATA: gc_alv_table TYPE REF TO cl_salv_table.
START-OF-SELECTION.
* Выбираем данные из MKPF
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_mkpf FROM mkpf.
* Статический метод класса для создания объекта и связывания с нашей таблицей
cl_salv_table=>factory( IMPORTING r_salv_table = gc_alv_table
CHANGING t_table = gt_mkpf[] ).
* Вывести ALV-таблицу на экран
gc_alv_table->display( ).
Я люблю нефть!
ОтветитьУдалить#metoo
УдалитьА я люблю газ!
УдалитьПока в России есть нефть - в Милане есть я.
УдалитьЕсли в Милане есть я, значит в России есть нефть
УдалитьЕщё проще!
ОтветитьУдалитьSELECT * INTO TABLE @DATA(lt_tcurr) FROM tcurr WHERE FCURR = 'USD'.
cl_salv_table=>factory( Importing = DATA(lo_alv) Changing = lt_tcurr ).
lo_alv->display( ).