SAP ABAP - Копирование внутренних таблиц
Когда мы читаем запись из внутренней таблицы со строкой заголовка, эта запись перемещается из самой таблицы в строку заголовка. Это строка заголовка, с которой работает наша программа. То же самое применяется при создании новой записи. Это строка заголовка, с которой вы работаете и из которой новая запись отправляется в тело таблицы.
Чтобы скопировать записи, мы можем использовать оператор SELECT для выбора всех записей из таблицы, а затем использовать оператор MOVE, который переместит записи из исходной таблицы в новую внутреннюю таблицу в поля, где соответствуют имена.
Ниже приводится синтаксис оператора MOVE -
MOVE <table_field> TO <internal_tab_field>.
пример
REPORT ZCUSLIST1.
TABLES: ZCUSTOMERS1.
DATA: BEGIN OF itab01 Occurs 0,
name LIKE ZCUSTOMERS1-name,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
Select * FROM ZCUSTOMERS1.
MOVE ZCUSTOMERS1-name TO itab01-name.
MOVE ZCUSTOMERS1-dob TO itab01-dob.
ENDSELECT.
Write: / itab01-name, itab01-dob.
Приведенный выше код дает следующий вывод -
MARGARET 02.11.1994
Цикл выбора заполняет каждое поле по одному, используя оператор MOVE для перемещения данных из поля одной таблицы в другое. В приведенном выше примере операторы MOVE использовались для перемещения содержимого таблицы ZCUSTOMERS1 в соответствующие поля внутренней таблицы. Вы можете выполнить это действие с помощью всего одной строчки кода. Вы можете использовать оператор MOVECORRESPONDING.
Ниже приведен синтаксис оператора MOVE-CORRESPONDING:
MOVE-CORRESPONDING <table_name> TO <internal_tab>.
Он сообщает системе, что нужно переместить данные из полей ZCUSTOMERS1 в соответствующие поля в itab01.
пример
REPORT ZCUSTOMERLIST.
TABLES: ZCUSTOMERS1.
DATA: Begin of itab01 occurs 0,
customer LIKE ZCUSTOMERS1-customer,
name LIKE ZCUSTOMERS1-name,
title LIKE ZCUSTOMERS1-title,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
SELECT * from ZCUSTOMERS1.
MOVE-Corresponding ZCUSTOMERS1 TO itab01.
APPEND itab01.
ENDSELECT.
LOOP AT itab01.
Write: / itab01-name, itab01-dob.
ENDLOOP.
Приведенный выше код дает следующий вывод -
MARK 21.05.1981
JAMES 14.08.1977
AURIELE 19.06.1990
STEPHEN 22.07.1985
MARGARET 02.11.1994
Это стало возможным благодаря тому, что оба имеют совпадающие имена полей. При использовании этого оператора вы должны убедиться, что оба поля имеют совпадающие типы данных и длину. Это было сделано здесь ранее с помощью оператора LIKE.