Muitas vezes precisamos criar filtros dinâmicos utilizando Ranges. Mas você ainda programa como se estivesse nos anos 2000?
Esqueça o RANGES obsoleto com Header Line ! Hoje, dominar a evolução da linguagem é sinônimo de código limpo e performance. Se liga nessas 2 formas modernas de resolver o problema:
1 - O Estado da Arte: Moderno (VALUE + FOR)
Ideal para resolver tudo em uma única expressão, mantendo o código limpo e direto.
DATA lt_carr_id_range TYPE RANGE OF spfli-carrid.
lt_carr_id_range = VALUE #( FOR <fs_spfli> IN lt_spfli
( sign = 'I'
option = 'EQ'
low = <fs_spfli>-carrid ) ).
2 - O Híbrido Essencial: Clássico (LOOP + APPEND VALUE)
A velha conhecida estrutura de repetição, mas atualizada: o APPEND VALUE elimina a necessidade de declarar uma Work Area.
DATA lt_carr_id_range TYPE RANGE OF spfli-carrid.
LOOP AT lt_spfli INTO DATA(ls_spfli).
APPEND VALUE #( sign = 'I'
option = 'EQ'
low = ls_spfli-carrid ) TO lt_carr_id_range.
ENDLOOP.
DICA DE OURO: No método 1, se você não quiser declarar a variável do range na linha de cima, você pode usar a declaração em linha criando um tipo local ou global, assim:
DATA(lt_range) = VALUE range_type( ... )
Menos linhas de código, mais produtividade!
E você, qual dessas duas formas mais utiliza no seu dia a dia?