SAP ABAP - Copiando tabelas internas
Quando lemos um registro de uma tabela interna com uma linha de cabeçalho, esse registro é movido da própria tabela para a linha de cabeçalho. É então a linha de cabeçalho com a qual nosso programa trabalha. O mesmo se aplica ao criar um novo registro. É a linha de cabeçalho com a qual você trabalha e a partir da qual o novo registro é enviado para o próprio corpo da tabela.
Para copiar os registros, podemos usar uma instrução SELECT para selecionar todos os registros da tabela e então usar a instrução MOVE que moverá os registros da tabela original para a nova tabela interna nos campos onde os nomes correspondem.
A seguir está a sintaxe para a instrução MOVE -
MOVE <table_field> TO <internal_tab_field>.
Exemplo
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.
O código acima produz a seguinte saída -
MARGARET 02.11.1994
O loop de seleção preenche cada campo, um por vez, usando a instrução MOVE para mover os dados de um campo da tabela para o outro. No exemplo acima, as instruções MOVE foram usadas para mover o conteúdo da tabela ZCUSTOMERS1 para os campos correspondentes na tabela interna. Você pode realizar essa ação com apenas uma linha de código. Você pode usar a instrução MOVECORRESPONDING.
A seguir está a sintaxe para a instrução MOVE-CORRESPONDING -
MOVE-CORRESPONDING <table_name> TO <internal_tab>.
Diz ao sistema para mover os dados dos campos de ZCUSTOMERS1 para seus campos correspondentes em itab01.
Exemplo
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.
O código acima produz a seguinte saída -
MARK 21.05.1981
JAMES 14.08.1977
AURIELE 19.06.1990
STEPHEN 22.07.1985
MARGARET 02.11.1994
Isso é possível pelo fato de que ambos têm nomes de campo correspondentes. Ao fazer uso dessa instrução, você precisa se certificar de que ambos os campos possuem tipos e comprimentos de dados correspondentes. Isso foi feito aqui com a instrução LIKE anteriormente.