SAP Внутренняя таблица ABAP: создание, чтение, заполнение, копирование и удаление
Что такое внутренняя таблица?
ВНУТРЕННЯЯ ТАБЛИЦА используются для получения данных из фиксированной структуры для динамического использования в ABAP. Каждая строка внутренней таблицы имеет одинаковую структуру полей. Основное использование внутренних таблиц — хранение и форматирование данных из таблицы базы данных внутри программы.
Что такое рабочая зона?
Рабочие области представляют собой отдельные строки данных. Они должны иметь тот же формат, что и любые внутренние таблицы. Он используется для обработки данных во внутренней таблице по одной строке за раз.
Разница между внутренним столом и рабочей областью?
Картинка говорит тысячу слов
Типы внутренних таблиц
Существует два типа внутренних таблиц.
- Внутренние таблицы со строкой HEADER
- Внутренние таблицы без строки HEADER.
Внутренние таблицы со строкой заголовка
- Здесь система автоматически создает рабочую область.
- Рабочая область имеет тот же тип данных, что и внутренняя таблица.
- Эта рабочая область называется строкой ЗАГОЛОВКА.
- Именно здесь выполняются все изменения или любые действия над содержимым таблицы. В результате записи можно напрямую вставлять в таблицу или обращаться к ней напрямую из внутренней таблицы.
Внутренние таблицы без строки заголовка :
- Здесь нет рабочей области, связанной со столом.
- Рабочая область должна быть явно указана, когда нам нужно получить доступ к таким таблицам.
- Следовательно, к этим таблицам нельзя получить прямой доступ.
Создание внутренних таблиц
Существует множество способов создания внутренней таблицы. Давайте посмотрим на них один за другим-
1. С помощью оператора типа
Давайте теперь создадим внутреннюю таблицу itab, используя ТИП заявление.
Синтаксис -
Types : begin of line, column1 type I, column2 type I, end of line.
Пример:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
Оператор TYPES создает структурную строку, как определено.
Чтобы создать вкладку «Внутренняя таблица», используйте следующую команду:
Data itab type line occurs 10.
Itab внутренней таблицы создается со структурой line. Помимо объявления структуры внутренней таблицы, предложение OCCURS также определяет, сколько записей таблицы хранится в основной памяти (в данном случае 10). Дополнительные записи записываются в область подкачки и могут повлиять на производительность.
2. Ссылаясь на другую таблицу
Вы можете создать внутреннюю таблицу, обратившись к существующей таблице. Существующая таблица может быть стандартной SAP таблица, таблица Z или другая внутренняя таблица.
Синтаксис-
Data <f> <type> [with header line].
Пример-
DATA itab TYPE line OCCURS 10 with header line.
Здесь создается внутренняя таблица itab типа строка со строкой заголовка. Обратите внимание: «со строкой заголовка» не является обязательным.
3.Ссылаясь на существующую структуру
Синтаксис-
Data <f> LIKE <struct> occurs n [with header line].
Пример-
DATA itab LIKE sline OCCURS 10.
Здесь создается таблица itab, имеющая такую же структуру, как и у sline.
4. Путем создания новой структуры
Давайте теперь создадим внутреннюю таблицу с собственной структурой. Здесь таблица создается со строкой заголовка, по умолчанию.
Синтаксис -
Data : Begin of <f> occurs <n>, <component declaration>, ................................., End of <f>.
Пример -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Создана внутренняя таблица itab.
Заполнение внутренних таблиц
Теперь, когда мы успешно создали несколько внутренних таблиц, давайте посмотрим, как заполнить их некоторыми записями. Существуют различные методы заполнения таблиц.
1.Добавьте данные построчно.
Первый доступный метод — использование оператора APPEND.
Используя оператор APPEND, мы можем либо добавить одну строку из другой рабочей области во внутреннюю таблицу, либо добавить одну начальную строку во внутреннюю таблицу.
Синтаксис -
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Здесь рабочая зона или начальная строка добавляется во внутреннюю таблицу .
Системная переменная SY-TABIX содержит индекс добавляемой строки.
Пример:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Результаты: ' ' '0'
Начальные строки добавляет в таблицу строку, инициализированную правильным значением для ее типа. Здесь col1 — символ, а col2 — целое число. Затем ДОБАВИТЬ начальную строку, добавляет строку, инициализированную в соответствии с типом данных столбцов, т. е. пространство для столбца 1 и 0 для столбца 2.
2. Использование оператора COLLECT.
COLLECT — это еще одна форма оператора, используемая для заполнения внутренних таблиц. Обычно COLLECT используется при вставке строк во внутреннюю таблицу с уникальным стандартным ключом.
Синтаксис-
COLLECT [<wa> INTO] <itable>.
В случае таблиц со строкой заголовка опция INTO опускается. Предположим, что уже существует запись, имеющая тот же ключ, что и тот, который вы пытаетесь добавить, тогда в таблицу не добавляется новая строка, но добавляются числовые поля обеих записей и присутствует только одна запись, соответствующая ключу. . Значение SY-TABIX заменяется на строку исходной записи. В противном случае COLLECT действует аналогично APPEND, а SY-TABIX содержит индекс обработанной строки.
3.Использование оператора INSERT
Инструкция INSERT добавляет строку/рабочую область во внутреннюю таблицу. Вы можете указать позицию, в которую должна быть добавлена новая строка, используя предложение INDEX с оператором INSERT.
Синтаксис
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Здесь рабочая зона или INITIAL LINE вставлена во внутреннюю таблицу по индексу .
Копирование внутренних таблиц
Содержимое одной внутренней таблицы можно скопировать в другую с помощью оператора APPEND LINES или INSERT LINES. Более простой способ — использовать любой из следующих синтаксисов.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Они копируют содержимое ITAB1 в ITAB2. В случае внутренних таблиц со строкой заголовка мы должны использовать [], чтобы отличить их от рабочей области. Итак, чтобы скопировать содержимое внутренних таблиц со строкой заголовка, синтаксис будет следующим:
itab1[] = itab2[].
Чтение внутренних таблиц
Теперь мы знакомы с созданием внутренних таблиц и заполнением их данными. Теперь мы увидим, как на самом деле использовать данные или получать данные из внутренних таблиц.
1. Использование цикла-Endloop
Одним из способов доступа к внутренней таблице или чтения ее является использование LOOP-ENDLOOP.
Синтаксис
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Вот когда вы говорите LOOP AT ITABLE, то внутренняя таблица ITABLE читается построчно. Вы можете получить доступ к значениям столбцов этой строки в любой части структуры LOOP-ENDLOOP. Значение SY-SUBRC установлено на 0, даже если читается только одна запись.
2. Использование ЧТЕНИЯ
Другой метод чтения внутренней таблицы — использование оператора READ.
Синтаксис-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Этот оператор читает текущую строку или строку, указанную индексом. . Значение SY-TABIX — это индекс прочитанной строки. Если найдена запись с указанным индексом, то SY-SUBRC устанавливается в 0. Если указанный индекс меньше 0, возникает ошибка времени выполнения. Если указанный индекс превышает размер таблицы, то SY-SUBRC устанавливается равным 4.
Удаление внутренних таблиц
Существует множество способов удаления строк из внутренней таблицы.
1.Удаление строк в цикле.
Это самый простой способ удаления строк.
Синтаксис
DELETE <ITABLE>.
Этот оператор работает только внутри цикла. Удаляет текущую строку. Вы можете удалить строки в цикле условно, добавив Предложение WHERE.
2.Удаление строк по индексу.
Используется для удаления строки из внутренней таблицы по любому известному индексу.
Синтаксис
DELETE <ITABLE> INDEX <IDX>.
Строка с индексом удаляется. Индекс следующей строки уменьшается на 1.