20240106

CORRESPONDING (inline)

** C O R R E S P O N D I N G
** CORRESPONDING()

* Definição básica

" X = CORRESPONDING dtype|#(Y)
*-------------------------------------------

types:
  begin of t1,
    campo1 type i,
    campo2 type char10,
  end of type t1.

data d1 type t1.

data(d2) = CORRESPONDING t1( d1 ).




* Cláusula BASE
* mantém os valores já existentes...
types:
  begin of t1,
    campo1 type i,
    campo2 type char10,
  end of t1,
  begin of t2,
    campo1 type i,
    campo2 type char10,
    campo3 type char20,
  end of t2.


data d1 type t1.
data d2 type t2.

d2-campo3 = 'não apagar'.
d2 = CORRESPONDING #( BASE ( d2 ) d1 ).



* Cláusula MAPPING

* Estruturas são semelhantes, mas não são iguais.
* O nome do campo é diferente
types:
  begin of t1,
    campo1 type i,
    campo2x type char10,
  end of t1,
  begin of t2,
    campo1 type i,
    campo2y type char10,
  end of t2.


data d1 type t1.
data d2 type t2.

d2 = CORRESPONDING #(
           d1
           MAPPING campo2y = campo2x
).






* Cláusula EXCEPT

* Estruturas são iguais, mas não quer levar o
* campo3
types:
  begin of t1,
    campo1 type i,
    campo2 type char10,
    campo3 type char10,
  end of t1,
  begin of t2,
    campo1 type i,
    campo2 type char10,
    campo3 type i,
  end of t2.


data d1 type t1.
data d2 type t2.

d2 = CORRESPONDING #(
           d1
           EXCEPT campo3
).



* Uso de tabela interna
* Mover de uma para outra.
data:
  itab1     type table of kna1,
  itab2     type table of kna1.

***MOVE-CORRESPONDING itab1 to itab2.

itab2 = CORRESPONDING #( itab1 ).



* Movendo dados entre tabeas discartando as duplicidades dos campos chave

data:
  itab1     type table of kna1,
  itab2     type SORTED TABLE OF kna1
               WITH UNIQUE KEY kunnr.

sort itab1 by kunnr.
DELETE ADJACENT DUPLICATES FROM itab1
   COMPARING kunnr.

MOVE-CORRESPONDING itab1 to itab2.

itab2 = CORRESPONDING #(
           itab1 DISCARDING DUPLICATES
).


--
José Nilson de Oliveira