Учебники

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 ранее.