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.