Substitui valor de campo numa tabela interna
2026-07-13
Agora que o ABAP tem compreensions há uma série de super poderes que nem sempre são evidentes. Aqui vou ensinar-te a mudar o valor de um único campo em todos, vários ou um registos de uma tabela interna.
Imagina que tens uma tabela interna:
SELECT * FROM t001 INTO TABLE @DATA(companies).
Antes, fazias assim de forma imperativa:
LOOP AT companies INTO FIELD-SYMBOL(<company>).
<company>-butxt = 'Abapinho'.
ENDLOOP.
Agora, usando a sintaxe funcional fazes assim:
FINAL(hacked_companies) = VALUE t_t001(
FOR company IN companies
( VALUE #( BASE company
butxt = 'Abapinho' ) ) ).
Se só quiseres alterar o campo em alguns ou mesmo apenas um registo adicionas um WHERE:
FINAL(hacked_companies) = VALUE t_t001(
FOR company IN companies
WHERE ( bukrs = 'SAP' )
( VALUE #( BASE company
butxt = 'Abapinho' ) ) ).
O truque é usar o BASE com o company para definir o ponto de partida e depois alterar só os campos que quiseres. Neste caso alterei só o BUTXT.
O Abapinho saúda-vos.
