Для настройки колонок в ALV первым делом необходимо получить ссылку на объект класса: CL_SALV_COLUMNS. Данный класс отвечает за общие для всех колонок настройки, такие как: оптимизация ширины, порядок колонок. Получить ссылку на объект можно методом get_columns главного объекта ALV. Для изменения индивидуальных колонок необходимо получить ссылку на объект требуемой колонки. Для этого воспользоваться методом get_column( ‘ИмяКолонки’ ) из объекта отвечающего за все колонки, полученного ранее.
В случае если удалось найти колонку с указанным именем, метод возвращает объект класса CL_SALV_COLUMN, отвечающий за индивидуальные параметры указанной колонки. Обратите внимание что метод get_column в случае не верно указанного имени колонки порождает исключение cx_salv_not_found, которое необходимо обработать.
Пример настройки колонок:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | REPORT ZALV_COLUMNS. DATA:       gt_data      TYPE spfli_tab,  " Таблица с данными       go_columns   TYPE REF TO cl_salv_columns,       go_column    TYPE REF TO cl_salv_column,       go_alv       TYPE REF TO cl_salv_table. START-OF-SELECTION.   SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data.   " Фабричный метод возвращяет экзмепляр ALV объекта   TRY.       cl_salv_table=>factory(          IMPORTING            r_salv_table = go_alv          CHANGING            t_table = gt_data ).     CATCH cx_salv_msg .       MESSAGE 'Ошибка при создании ALV' TYPE 'E'.   ENDTRY.   go_alv->set_screen_status( EXPORTING                               REPORT = 'SAPLSALV_METADATA_STATUS'                               pfstatus = 'SALV_TABLE_STANDARD'                               set_functions = CL_SALV_MODEL_BASE=>C_FUNCTIONS_ALL ).   " Получаем ссылку на объект настройки колонок   go_columns = go_alv->get_columns( ).   " Включаем оптимизацию колонок   go_columns->set_optimize( abap_true ).   " Получаем ссылку на объект настройки колонки отвечающей за город отправления   TRY.     go_column = go_columns->get_column( 'CITYFROM' ).     " настраиваем текст     go_column->set_long_text( 'Long long text' ).     go_column->set_medium_text( 'Medium text' ).     go_column->set_short_text( 'Short' ).   CATCH cx_salv_not_found.   ENDTRY.   " Отобразить ALV представление   go_alv->display( ). | 
Результат работы программы:
Колонки могут иметь разные типы: ссылки, кнопки, символы, иконки. Стандартная программа для демонстрации возможностей колонок: SALV_DEMO_TABLE_COLUMNS. Классы cl_salv_columns и cl_salv_columns являются общими для всех типов ALV объектов. Для настройки индивидуальных особенностей таблиц можно использовать классы: cl_salv_columns_table и cl_salv_column_table соответственно. Все эти классы описаны в пакете SALV_METADATA.
Пример использования Exception поля в SALV Table:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | REPORT ZALV_EXCEPTION_COLUMN. TYPES BEGIN OF ty_spfli.         TYPES exception TYPE char1.         INCLUDE TYPE spfli. TYPES END OF ty_spfli. DATA:       gt_data      TYPE STANDARD TABLE OF ty_spfli,  " Таблица с данными       go_columns   TYPE REF TO cl_salv_columns_table,       go_alv       TYPE REF TO cl_salv_table. FIELD-SYMBOLS: <fs> LIKE LINE OF gt_data. START-OF-SELECTION.   SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data.   " Фабричный метод возвращяет экзмепляр ALV объекта   TRY.       cl_salv_table=>factory(          IMPORTING            r_salv_table = go_alv          CHANGING            t_table = gt_data ).     CATCH cx_salv_msg .       MESSAGE 'Ошибка при создании ALV' TYPE 'E'.   ENDTRY.   LOOP AT gt_data ASSIGNING <fs>.     IF <fs>-CARRID = '003'.       <fs>-exception = '1'.  "red     ELSEIF <fs>-CARRID = '002'.       <fs>-exception = '2'.  "yellow     ELSE.       <fs>-exception = '3'.  "green     ENDIF.   ENDLOOP.   " Подключаем стандартные функции   go_alv->set_screen_status( EXPORTING                               REPORT = 'SAPLSALV_METADATA_STATUS'                               pfstatus = 'SALV_TABLE_STANDARD'                               set_functions = CL_SALV_MODEL_BASE=>C_FUNCTIONS_ALL ).   " Получаем ссылку на объект настройки колонок   go_columns = go_alv->get_columns( ).   " Указываем на поле которое будет счетчиком   go_columns->set_exception_column( 'EXCEPTION' ).   " Отобразить ALV представление   go_alv->display( ). | 
Определение типа для конкретной ячейки:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | REPORT ZALV_CELL_TYPE_COLUMN. TYPES BEGIN OF ty_spfli.         TYPES t_cell_type TYPE SALV_T_INT4_COLUMN.         INCLUDE TYPE spfli. TYPES END OF ty_spfli. DATA:       gt_data      TYPE STANDARD TABLE OF ty_spfli,  " Таблица с данными       go_columns   TYPE REF TO cl_salv_columns_table,       gs_type      TYPE SALV_S_INT4_COLUMN,       go_alv       TYPE REF TO cl_salv_table. FIELD-SYMBOLS: <fs> LIKE LINE OF gt_data. START-OF-SELECTION.   SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data.   " Фабричный метод возвращяет экзмепляр ALV объекта   TRY.       cl_salv_table=>factory(          IMPORTING            r_salv_table = go_alv          CHANGING            t_table = gt_data ).     CATCH cx_salv_msg .       MESSAGE 'Ошибка при создании ALV' TYPE 'E'.   ENDTRY.   LOOP AT gt_data ASSIGNING <fs>.     gs_type-COLUMNNAME = 'CITYFROM'.     IF <fs>-CARRID = '003'.       gs_type-VALUE = IF_SALV_C_CELL_TYPE=>CHECKBOX.     ELSEIF <fs>-CARRID = '002'.       gs_type-VALUE = IF_SALV_C_CELL_TYPE=>HOTSPOT.     ELSE.       gs_type-VALUE = IF_SALV_C_CELL_TYPE=>BUTTON.     ENDIF.     APPEND gs_type TO <fs>-t_cell_type.   ENDLOOP.   " Подключаем стандартные функции   go_alv->set_screen_status( EXPORTING                               REPORT = 'SAPLSALV_METADATA_STATUS'                               pfstatus = 'SALV_TABLE_STANDARD'                               set_functions = CL_SALV_MODEL_BASE=>C_FUNCTIONS_ALL ).   " Получаем ссылку на объект настройки колонок   go_columns = go_alv->get_columns( ).   " Указываем на поле которое будет счетчиком   go_columns->set_cell_type_column( 'T_CELL_TYPE' ).   " Отобразить ALV представление   go_alv->display( ). | 


