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.