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( ).
И все, список документов материала будет выведен на экран в виде таблицы ALV, пример на рисунке ALV-1.png ниже.
Думаю вещь неплохая и главное что работает с минимальными затратами на написание кода. Стандартно поля были выведены в порядке следования их объявления в структуре, последнее поле я просто перетащи в начало. Система сама отметила поля, которые были ключевыми в таблице. И как видим пока эти поля без заголовка, так как при их объявлении я не сослался ни на какой тип словаря данных. Для полей, которые объявлены в таблице или же буду объявлены через ссылку на тип словаря данных, система корректно выполнит объявление заголовков, например если добавить объявление поля материала, то заголовок будет представлен в корректном виде, пример на рисунке ALV-2.png ниже.
В принципе класс имеет все параметры для более точной настройки данных вывода, поэтому пойдем по шагам, сначала добавим для полей, которые созданы без ссылки на элементы словаря данных корректные заголовки. Для этого воспользуемся методом GET_COLUMNS, который является объектом, через который можно работать колонками таблицы, а так же нужно объявить объект колонка таблицы, так как работы идет следующим образом, сначала получаем данные колонок и затем получаем данные конкретной колонки.
DATA: gc_columns TYPE REF TO cl_salv_columns_table,
gc_colwork TYPE REF TO cl_salv_column_table.
* Получим каталог полей таблицы
gc_columns = gc_alv_table->get_columns( ).
* Получим поле по имени
gc_colwork ?= gc_columns->get_column( 'SEL' ).
* Зададим заголовок колонки обработанных документов
gc_colwork->set_long_text( 'Обработанные строки в таблице' ).
gc_colwork->set_medium_text( 'ОбрабСтроки' ).
gc_colwork->set_short_text( 'ОбрСтр' ).
* Задать центрирование для вывода поля, тип словаря SALV_DO_ALIGNMENT
gc_colwork->set_alignment( '3' ).
* Получим поле по имени
gc_colwork ?= gc_columns->get_column( 'MY_DATA' ).
* Задать выравнивание по левому краю для вывода поля, тип словаря SALV_DO_ALIGNMENT
gc_colwork->set_alignment( '1' ).
В принципе переменные список колонок и колонка являются, как уже было сказано, классами и имеют кучу методов для более точной настройки своего вывода, заканчивая средствами поиска к колонке. Детальную информацию можно просмотреть для каждого из классов в транзакции SE24. Теперь если запустить отчет, колонка SEL будет иметь наш текст, рисунок ALV-3.png ниже.
PS: Данный пост, так же будет содержать все одним файлом, как обычно условия такие - актуальность данного файла будет приводится в порядок, по мере наличия времени.