Acumular quantidade Por Item

Discussão em 'Progress 4GL' iniciado por diego.neves, Março 6, 2014.

  1. diego.neves

    diego.neves Membro Participativo

    Boa tarde Pessoal.

    Estou com dificuldade em acumular os valores de um for each por item.
    Na imagem alguns registros se repetem, preciso somar a quantidade destes registros.
    E mostra-lo item por item sem repetição.

    saldo.jpg
  2. Agnaldo

    Agnaldo Membro Ativo

    Um exemplo baseado no banco Sports.
    Voce pode usar ACCUMULATE também (vide help do Progress)
    Código:
    
    DEFINE VARIABLE valor AS DECIMAL.
    
    FOR EACH Order-Line BREAK BY Order-Line.Order-Num:
    
        FIND Item OF Order-Line NO-LOCK NO-ERROR.
    
        IF FIRST-OF(Order-Line.Order-Num)
           THEN
               DISPLAY Order-Line.Order-Num.
    
        ASSIGN valor = valor + Order-Line.Price.
    
        DISPLAY Order-Line.Line-num
                Order-Line.Item-Num
                Item.Item-Name  WHEN AVAILABLE Item
                Order-Line.Price.
    
        IF LAST-OF(Order-Line.Order-Num)
           THEN
               DO:
                  DOWN 1.
                  DISPLAY "--------------" @ Order-Line.Price.
                  DOWN 1.
                  DISPLAY valor @ Order-Line.Price.
                  DOWN 1.
    
                  ASSIGN valor = 0.
               END.
    END.
    
    
  3. don.junior

    don.junior Membro Participativo

    Boa noite Diego, não tenho acesso a base no momento, mas pelo que lembro, acho que é isso:

    DEFINE VARIABLE vl-tot-item LIKE item-doc-est.preco-total[1] NO-UNDO.

    FOR EACH docum-est WHERE docum-est.dt-emis = DATE(01/01/2014) NO-LOCK:

    ASSIGN vl-tot-item = 0.​

    FOR EACH item-doc-est OF docum-est NO-LOCK:
    ASSIGN vl-tot-item = vl-tot-item + item-doc-est.preco-total[1].​
    END.

    DISPLAY
    docum-est.serie-docto
    docum-est.cod-emitente
    docum-est.nro-docto
    docum-est.esp-docto
    docum-est.cod-estabel
    docum-est.dt-emis
    docum-est.tot-valor
    vl-tot-item.​
    END.

    Caso algum campo esteja errado é só ajustar...
  4. jeffyssantos

    jeffyssantos Membro Participativo

    Olá Diego boa tarde!
    Estava de férias, estou voltando ao fórum...é, claro que já resolveu esta questão mas, gostaria de reforaçar a dica do "accumulate" do amigo Agnaldo.
    Uusar o "accumalate" é muito útil em relatórios, depois que aprendi a usá-lo recomendo sempre que possível.

    Abaixo um breve exemplo do uso do accumulate.

    for each "sua-tt"
    no-lock
    break by sua-tt.it-codigo:

    accumulate sua-tt.qtde (total by sua-tt.it-codigo) .

    if last-of (sua-tt.it-codigo) then do:
    disp
    sua-tt.it-codigo column-label "Item"
    accum total by sua-tt.it-codigo sua-tt.qtde column-label "Total"
    with stream-io width 200.

    end.

    end.

    É possível assim, ter várias visões sobre o mesmo relatório, se tu quiseres ver o total do item por data de transação, por exemplo, apenas acrescentaria no break "by sua-tt.dt-trans" e, criaria outro accumulate. Enfim...só gostaria de compartilhar como o amigo este comando que acho muito útil.

    Abraço,
    Jefferson

Compartilhe esta Página