Soma de Valores - Duvida

Discussão em 'Progress 4GL' iniciado por turks, Junho 23, 2010.

  1. turks

    turks Membro Participativo

    BOm dia Galera...
    Tudo bem? Tô fazendo um relatório bem simples aqui, porem estou com um pequeno problema.

    Quero que apareça da tabela recebimento, o valor total de cada fornecedor, dentro da seleção informada.
    Não já consegui fazer com que apareça apenas o primeiro registro do fornecedor, porem a soma não me aparece.

    O código está abaixo, caso alguem consiga, ficarei agradecido

    Código:
    FOR EACH recebimento NO-LOCK WHERE recebimento.data-movto   >= tt-param.d-ini-entrada
                                   AND recebimento.data-movto   <= tt-param.d-fim-entrada
                                   AND recebimento.cod-emitente >= tt-param.i-ini-emitente
                                   AND recebimento.cod-emitente <= tt-param.i-fim-emitente
        BREAK BY recebimento.cod-emitente: 
    
        RUN pi-acompanhar IN h-acomp ('Notas Fiscais: ' + STRING(recebimento.numero-nota)).
    
        FIND FIRST emitente NO-LOCK WHERE emitente.cod-emitente = recebimento.cod-emitente NO-ERROR.
    
        ASSIGN total-item = recebimento.preco-unit * recebimento.qtd-rec-forn
               total-fornec = total-fornec + total-item.
    
        IF FIRST-OF (recebimento.cod-emitente) THEN DO:
                PUT STREAM str-rp
    
                    recebimento.cod-emitente SPACE
                    emitente.nome-abrev      SPACE
                    total-fornec             SKIP.
    
    
    
                ASSIGN total-fornec = 0
                       total-item = 0.
    
        END. 
    END. 
    
    run pi-finalizar in h-acomp.
  2. jalegria

    jalegria Membro Participativo

    Saudações...

    Troque o first-of por last-of, que dará certo.

    Se quiser melhorar mais ainda, utilize a função ACCUM e ACCUMULATE, aí nem precisa criar variaveis para totalizar, fazer a soma e ficar zerando a variavel.

    Ficaria +/- assim:

    Código:
    
    FOR EACH ...
    
      ACCUMULATE recebimento.preco-unit * recebimento.qtd-rec-forn (SUB-TOTAL BY recebimento.cod-emitente).
    
      IF LAST-OF(recebimento.cod-emitente)
      THEN DO:
        PUT STREAM str-rp
          .
          .
          ACCUM SUB-TOTAL BY recebimento.cod-emitente recebimento.preco-unit * recebimento.qtd-rec-forn
          SKIP.
      END.
    
    END.
    
  3. turks

    turks Membro Participativo

    Blz, consegui com o last-of.

    Vou fazer o teste da forma como vc disse..

    Obrigado!

Compartilhe esta Página