SAP Внутрішня таблиця ABAP: створення, читання, заповнення, копіювання та видалення
Що таке внутрішня таблиця?
ВНУТРІШНЯ ТАБЛИЦЯ використовуються для отримання даних із фіксованої структури для динамічного використання в ABAP. Кожен рядок внутрішньої таблиці має однакову структуру полів. Основне використання внутрішніх таблиць — це зберігання та форматування даних із таблиці бази даних у програмі.
Що таке робоча зона?
Робочі області — це окремі рядки даних. Вони повинні мати той самий формат, що й будь-яка з внутрішніх таблиць. Він використовується для обробки даних у внутрішній таблиці один рядок за раз.
Різниця між внутрішньою таблицею та робочою областю?
Малюнок говорить тисячу слів
Типи внутрішніх таблиць
Існує два види внутрішніх таблиць.
- Внутрішні таблиці з рядком HEADER
- Внутрішні таблиці без рядка HEADER.
Внутрішні таблиці з рядком заголовка
- Тут система автоматично створює робочу зону.
- Робоча область має той самий тип даних, що й внутрішня таблиця.
- Ця робоча область називається HEADER line.
- Саме тут виконуються всі зміни або будь-які дії з вмістом таблиці. У результаті цього записи можна безпосередньо вставляти в таблицю або безпосередньо отримувати доступ із внутрішньої таблиці.
Внутрішні таблиці без рядка заголовка :
- Тут немає робочої області, пов'язаної зі столом.
- Робоча область повинна бути явно вказана, коли нам потрібно отримати доступ до таких таблиць.
- Тому до цих таблиць неможливо отримати прямий доступ.
Створення внутрішніх таблиць
Існує багато способів створення внутрішньої таблиці. Давайте подивимося на них один за одним -
1. За допомогою оператора типу
Давайте тепер створимо внутрішню таблицю itab за допомогою TYPE оператор.
Синтаксис -
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 створює лінію структури, як визначено.
Щоб фактично створити внутрішню таблицю itab, використовуйте таку команду-
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 типу line з рядком заголовка. Зауважте, що «з рядком заголовка» необов’язковий.
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 — ціле число. Потім початковий рядок APPEND додає рядок, ініціалізований щодо типу даних стовпців, тобто місця для col1 і 0 для col2.
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>].
Ось робоча зона або ПОЧАТКОВИЙ РЯДОК вставляється у внутрішню таблицю за індексом .
Копіювання внутрішніх таблиць
Вміст однієї внутрішньої таблиці можна скопіювати в іншу за допомогою оператора APPEND LINES або INSERT LINES. Простішим способом є використання будь-якого з наступних синтаксисів.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Вони копіюють вміст ITAB1 до ITAB2. У випадку внутрішніх таблиць із заголовком ми повинні використовувати [], щоб відрізнити їх від робочої області. Отже, щоб скопіювати вміст внутрішніх таблиць із заголовком, синтаксис виглядає так:
itab1[] = itab2[].
Читайте внутрішні таблиці
Тепер ми знайомі зі створенням внутрішніх таблиць і заповненням їх даними. Тепер ми побачимо, як ми фактично використовуємо дані або отримуємо дані з внутрішніх таблиць.
1. Використання Loop -Endloop
Одним із способів доступу або читання внутрішньої таблиці є використання LOOP-ENDLOOP.
синтаксис
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Тут, коли ви кажете LOOP AT ITABLE, внутрішня таблиця ITABLE читається рядок за рядком. Ви можете отримати доступ до значень стовпців для цього рядка під час будь-якої частини структури LOOP-ENDLOOP. Значення SY-SUBRC встановлено на 0, навіть якщо прочитано лише один запис.
2. Використання READ
Іншим способом читання внутрішньої таблиці є використання оператора READ.
Синтаксис-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Цей оператор читає поточний рядок або рядок відповідно до індексу . Значення SY-TABIX є індексом прочитаного рядка. Якщо знайдено запис із вказаним індексом, тоді для SY-SUBRC встановлюється значення 0. Якщо вказаний індекс менше 0, виникає помилка під час виконання. Якщо вказаний індекс перевищує розмір таблиці, тоді для SY-SUBRC встановлюється значення 4.
Видалення внутрішніх таблиць
Існує багато способів видалення рядків із внутрішньої таблиці.
1. Видалення рядків у циклі.
Це найпростіший спосіб видалення ліній.
синтаксис
DELETE <ITABLE>.
Цей оператор працює лише в межах циклу. Він видаляє поточний рядок. Ви можете умовно видалити рядки в циклі, додавши ДЕ ЗАКЛАД.
2. Видалення рядків за допомогою індексу.
Це використовується для видалення рядка з внутрішньої таблиці за будь-яким відомим індексом.
синтаксис
DELETE <ITABLE> INDEX <IDX>.
Рядок з індексом видаляється. Індекс наступного рядка зменшено на 1.