Modificar uma campo em todas as linhas de tabela interna
2015-08-31

O que vos vou mostrar não é propriamente uma novidade. Até já foi usado antes no Abapinho. Mas como se continua a ver por aí muita gente a fazer LOOPs a tabelas internas para alterar um campo, achei que valia a pena recordar.
Tens uma tabela com um milhão e duzentas mil linhas e queres que o campo ICON tenha sempre o valor ‘@FM@’.
Em vez de fazeres isto:
LOOP AT lt_data ASSIGNING <data>.
<data>-icon = '@FM@'.
ENDLOOP.
Experimenta fazer antes isto:
ls_data-icon = '@FM@'.
MODIFY lt_data FROM ls_data TRANSPORTING icon WHERE icon <> 'PATO DONALD'.
Como é óbvio, na condição podes escolher outra personagem qualquer dos Tio Patinhas.
Obrigado Sérgio Serra por sugerires que poderia ser interessante ensinar isto.
Obrigado Andrew Becraft pela foto.
O Abapinho saúda-vos.
4 de setembro de 2015 às 14:34
Muito boa essa dica. Uma outra dica boa que poderia dar é do uso do comando CONCATENATE LINES OF pois ainda vejo muitos abaps usando da maneira antiga, criei um exemplo se quiser publicar fique a vontade:
*&———————————————————————*
*& Report ZTESTE_GAMBIM_LINES
*&
*&———————————————————————*
*& Programa exemplo do CONCATENATE LINES OF
*& Autor: Leandro Gambim
*&———————————————————————*
REPORT zteste_gambim_lines NO STANDARD PAGE HEADING.
TYPES: BEGIN OF ty_output,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
END OF ty_output.
DATA: gt_output_1 TYPE TABLE OF ty_output,
gt_output_2 TYPE TABLE OF ty_output,
lw_output_1 TYPE ty_output,
lv_output_1 TYPE string,
lv_output_2 TYPE string.
START-OF-SELECTION.
” preenche a primeira tabela
DO 5 TIMES.
CLEAR lw_output_1.
lw_output_1-field1 = ‘- Campo 01’.
lw_output_1-field2 = ‘- Campo 02’.
lw_output_1-field3 = ‘- Campo 03′.
APPEND lw_output_1 TO gt_output_1.
ENDDO.
” equaliza as duas tabelas
gt_output_2 = gt_output_1.
” opção 1, ler a tabela e ir concatenando
LOOP AT gt_output_1 INTO lw_output_1.
CONCATENATE lv_output_1 lw_output_1-field1 lw_output_1-field2 lw_output_1-field3
INTO lv_output_1 SEPARATED BY space.
ENDLOOP.
” opção 2, concatenar diretamente
CONCATENATE LINES OF gt_output_2 INTO lv_output_2 SEPARATED BY space.
” Exibe os dados em tela
ULINE.
WRITE: /’Opção 1:’, lv_output_1.
ULINE.
WRITE: /’Opção 2:’, lv_output_2.
ULINE.