Guias

Published on February 15th, 2011 | by Mauricio Cruz

4

ABAPZombie Guide to ABAP – Parte 10 – AT (NEW, FIRST, LAST)

O Comando AT (loops de tabelas internas) é um comando divertido e útil em diversos casos. Ele pode ser colocado dentro de LOOPs, e ele direciona a execução de acordo com algumas restrições:

AT FIRST… ENDAT: Entra no bloco para executar algum processo no primeiro registro do LOOP.

AT LAST… ENDAT: Entra no bloco para executar algum processo no último registro do LOOP.

AT NEW (campo)… ENDAT: Entra no bloco sempre que o valor de (campo) mudar. (campo) deve ser um campo existente na estrutura usada no LOOP.

Porém, nem tudo é simples na vida do ABAPer. Vejamos o código:

Pelo exemplo deu para ver que existem algumas restrições:

Os comandos AT LAST e AT FIRST sempre irão “sumir” com os valores da WORK AREA. Isso é um restrição do sistema, e você pode usar o mesmo esquema que eu fiz no código acima para pegar os valores da Work Area (atribuir os valores em variáveis locais).

O comando AT NEW sempre verifica se o campo utilizado no AT NEW muda de acordo com a sequência da tabela do LOOP. Mas aqui tem um pequeno gato: ele também verifica se os campos à esquerda mudaram de valor. Se eles mudarem, ele também irá entrar no laço! Veja:

O AT é legal, se usado com cuidado. É muito fácil se perder com o AT NEW por causa do gato que eu citei. Você pode destruir um programa que já funciona só por colocar um campo novo à esquerda do campo usado no AT NEW, por exemplo. Portanto, use com “carinho” 😀

Abraços!

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePrint this page

Tags: , , , ,


About the Author

é pasteleiro há alguns anos e criou o ABAPZombie junto com o Mauro em 2010. Gosta de filosofar sobre fundamentos básicos da programação e assuntos polêmicos. Músicas estranhas, artes marciais e games indies são legais. Zumbis não. Converse comigo no twitter e conheça o meu livro de ABAP!



4 Responses to ABAPZombie Guide to ABAP – Parte 10 – AT (NEW, FIRST, LAST)

  1. Felipe Tieppo says:

    Uma outra forma contornar o “problema” do AT LAST e AT FIRST é usar um field symbol.

  2. Marcelo says:

    Valeu pelo post,
    Mas uma duvida, alguém entende pq o programa se perde quando usamos AT NEW em um LOOP contendo WHERE ??

    Marcelo

    • Paolo says:

      Olá Marcelo, eu não cheguei a testar um LOOP WHERE para este caso, mas, se o problema for o WHERE, acredito que um LOOP BINÁRIO resolveria este problema.

      atte.

  3. Carlos says:

    Boa tarde, pessoal,

    No exemplo acima, mostra o loop com esse comando que funciona assim LOOP AT it_spfli INTO wa_spfli.

    Mas eu vi comando onde o loop está assim LOOP AT t_sairport. A diferença é que eu não consegui fazer funcionar. Alguém tem o exemplo desse comando LOOP AT t_sairport.?

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top ↑