[RESOLVIDO] For Last x For Each

Discussão em 'EMS , HCM e Totvs 11' iniciado por fco_sobrinho, Novembro 21, 2016.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. fco_sobrinho

    fco_sobrinho Membro Participativo

    Gostaria de uma ajuda para entende o porque o for each mostra um resultado e o for last mostra outro.
    o objetivo do script abaixo é trazer o preço e a nota da ultima entrada, porem fiz um for last, e em alguns casos ele não traz o ultimo registro.
    porem quando faço o for each o sistema faz correto.
    onde estou errando?

    OUTPUT TO c:\temp\ForLast.txt.
    FOR Last item-doc-est
    WHERE item-doc-est.num-pedido <> 0
    AND item-doc-est.it-codigo = '4300006' no-lock
    BY item-doc-est.data:

    DISP item-doc-est.data
    item-doc-est.num-pedido
    item-doc-est.serie-docto
    item-doc-est.nro-docto
    item-doc-est.numero-ordem
    item-doc-est.preco-unit[1]
    item-doc-est.aliquota-ipi
    with width 300 STREAM-IO.

    end.

    OUTPUT TO c:\temp\ForEACH.txt.
    FOR EACH item-doc-est
    WHERE item-doc-est.num-pedido <> 0
    AND item-doc-est.it-codigo = '4300006' no-lock
    BY item-doc-est.data:

    DISP item-doc-est.data
    item-doc-est.num-pedido
    item-doc-est.serie-docto
    item-doc-est.nro-docto
    item-doc-est.numero-ordem
    item-doc-est.preco-unit[1]
    item-doc-est.aliquota-ipi
    with width 300 STREAM-IO.

    end.

    segue exemplos no anexo.

    Obrigado.

    Arquivos Anexados:

  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    o FOR LAST só traz apenas o último registro, é semelhante ao FIND LAST porém permite o BY e outras coisas mais do FOR.
    o FOR EACH traz todos.

    De acordo com seu código, se houver pelo menos 1 registro deve exibir o DISP nos 2 modos, porém no FOR LAST vai passar apenas uma vez.

    Não está fazendo isso?
  3. af.dums

    af.dums Membro Ativo

    Olá, já tive problemas com o FOR LAST .... BY, acredito que seja algo com relação a forma do LAST indexar (não encontrei uma solução e nem uma explicação), o que fiz para tratar é um for each com um LEAVE no final, ai passa apenas pelo primeiro registro.
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    na verdade é que o BY não tem efeito no for last, ele ira ler o ultimo registro atendendo a clausulas where, porem, como vc não especificou uma chave a ser seguida, ele esta usando a que ele bem entende, sendo assim, a ultima ocorrencia com a clausula where não vai te atender, coloque na clausula where a data também .....
    Código:
    for last item-doc-est no-lock
        where item-doc-est.num-pedido <> 0
          and item-doc-est.it-codigo = '4300006'
          and item-doc-est.data <= today:
    
    end.
    elmo e af.dums curtiram isso.
  5. fco_sobrinho

    fco_sobrinho Membro Participativo

    opa!
    obrigado pela a ajuda.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página