"
Apoiado por

MOVE-CORRESPONDING entre duas tabelas respeitando a chave

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.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).