Предположим есть некоторая таблица БД, назовем ее в рамках примера ZT_SORT_FIELDS, в ней в определенном порядке указаны поля по котором нужно сортировать внутреннюю таблицу zlt_sorted_table, с учетом направления сортировки. Например:
Воспользуемся системным типом abap_sortorder_tab для решения задачи.
1 |
DATA lt_sort_fields TYPE abap_sortorder_tab. |
Берем записи из таблицы:
1 2 3 4 |
SELECT * INTO TABLE @DATA(lt_sort_fields) FROM zt_sort_fields. SORT lt_sort_fields BY seq. |
Сформируем записи в lt_sort_fields для передачи в аргумент оператора SORT
1 2 3 4 5 6 7 8 |
LOOP AT lt_sort_fields ASSIGNING FIELD-SYMBOL(<fs_sort>). CASE <fs_sort>-sort. WHEN 'ASC'. APPEND VALUE #( name = <fs_sort>-name descending = '' ) TO lt_sort_fields. WHEN 'DESC'. APPEND VALUE #( name = <fs_sort>-name descending = 'X' ) TO lt_sort_fields. ENDCASE. ENDLOOP. |
И выполним сортировку:
1 |
SORT zlt_sorted_table BY (lt_sort_fields). |
Код полностью:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
DATA lt_sort_fields TYPE abap_sortorder_tab. SELECT * INTO TABLE @DATA(lt_sort_fields) FROM zt_sort_fields. SORT lt_sort_fields BY seq. LOOP AT lt_sort_fields ASSIGNING FIELD-SYMBOL(<fs_sort>). CASE <fs_sort>-sort. WHEN 'ASC'. APPEND VALUE #( name = <fs_sort>-name descending = '' ) TO lt_sort_fields. WHEN 'DESC'. APPEND VALUE #( name = <fs_sort>-name descending = 'X' ) TO lt_sort_fields. ENDCASE. ENDLOOP. SORT zlt_sorted_table BY (lt_sort_fields). |
Таким образом, добавляя в будущем поля в таблицу zt_sort_fields можно не беспокоиться о
последующей динамической сортировке выходных данных. Дальнейшие действия зависят только от ваших требований.
Спасибо за внимание.