Уже несколько раз сталкивался с ситуацией когда разработчик пишет что-то вроде:

Данный код приведёт к исключению CX_SY_ITAB_DUPLICATE_KEY. Все потому, что при определении полей ключа разработчик указал запятую. Запятая в данном случае отделяет определение переменной lt_some_table от переменной b с типом C 🙂

 

Согласно документации если мы выполняем цикл по таблице возвращаемой из функционального метода, конструкторных выражений, или табличных выражений, с последующим присвоением к символьным переменным (ASSIGNING) или ссылочным переменным REFERENCE INTO, среда создаёт временную таблицу для данного цикла.

If the internal table is specified as the return value or result of a functional method, a constructor expression, or a table expression, the value is persisted for the duration of the loop. Afterwards, it is no longer possible to access the internal table.

Пример:

Далее рассмотрим как это выглядит при анализе используемой памяти в отладке.

Читать далее

Виртуальная сортировка внутренних таблиц, добавленная в ABAP 7.52, описана всего одним методом — virtual_sort, класса CL_ABAP_ITAB_UTILITIES

Основная особенность виртуальной сортировки заключается в том, что вы получаете массив индексов относительно сортировки, без необходимости формирования копии таблицы (или её изменения).

Далее разберём особенности работы метода на простых примерах.

Читать далее

Когда внутри цикла по таблице вы попытаетесь передать её с передачей по значению для изменения, сработает неявный выход из цикла после вызова процедуры:

Результат: 1, 1, 2, 3.

Из документации:

The replacement of the entire table body in a LOOP across the same table causes the loop to be exited at the next loop pass in accordance with the rules described above.

Upd Для ABAP версии 7.40, оператор move-corresponding работает с таблицами, см справку по F1.

Когда Вы сталкиваетесь с задачей предоставить пользователю возможность выбирать одно (или несколько) значений из внутренних таблиц на экране выбора (или на экранах) можно воспользоваться удобным классом-оберткой  CL_RECA_GUI_F4_POPUP, вместо написания например средств поиска. С помощью данного класса мы можем определить заголовок всплывающего окна с данными, фильтры, отображаемые поля, сортировки и многое другое.

Существует как минимум 3 способа создания динамических таблиц:

  1. Используется в старых системах, через генерацию программы (GENERATE SUBROUTINE POOL).
  2. Используя класс CL_ALV_TABLE_CREATE.
  3. Используя RTTS (Run Time Type Services).

В данной статье будут рассмотрены все три, примеры максимально упрощены для понимания.

Читать далее