MOVE-CORRESPONDING entre duas tabelas respeitando a chave

Com muita alegria publico um artigo de Nuno Godinho, autor do site Abapinho, escrito a convite do UI5Brasil. Neste post será mostrado uma forma nova de se utilizar o comando MOVE-CORRESPONDING.


por: Nuno Godinho

O Abapinho não tem falado muito sobre o 7.40 porque as suas novidades têm já sido amplamente descritas em vários sites. Tentamos não inventar a roda.

Mas há pequenas pérolas úteis que ainda são pouco conhecidas. Esta é sobre uma delas.

Tens como objectivo preencher esta tabela T_DATA com itens de documentos financeiros:

BSEG-BUKRS
BSEG-BELNR
BSEG-GJAHR
BSEG-BUZEI
BSEG-LIFNR
LFA1-NAME1
Imagina a tabela já está preenchida com dados da BSEG, faltando preencher a coluna NAME1 que tem de ser obtida na LFA1. E que tens já outra tabela interna T_LFA1 preenchida com os dados da LFA1:

LFA1-LIFNR
LFA1-NAME1
Até à 7.40 terias de fazer algo neste género:

LOOP AT t_data ASSIGNING <s_data>.
  READ TABLE t_lfa1 ASSIGNING <s_lfa1> WITH KEY lifnr = <s_data>-lifnr.
  IF sy-subrc = 0.
    <s_data>-name1 = <s_lfa1>-name1.
  ENDIF.
ENDLOOP.
Agora olha só esta maravilha na 7.40:

t_data = CORRESPONDING #( t_data FROM t_lfa1 USING lifnr = lifnr ).
Coisa mais linda! Num único comando, a coluna NAME1 da T_DATA fica preenchida a partir das tabela T_LFA1, respeitando a chave LIFNR. E podes adicionar-lhe um MAPPING caso alguns dos campos não sejam iguais nas duas estruturas. O que até aqui dava um trabalhão porque obrigava a LOOP, READ TABLE, variáveis auxiliares e atribuições manuais, reduz-se agora a uma única operação de uma linha, que ainda por cima é mais legível e fácil de compreender! 

O Abapinho saúda-vos.

Comentários