SOMANDO um Campo da tabela

Discussão em 'Progress 4GL' iniciado por AndersonApdo, Janeiro 23, 2013.

  1. AndersonApdo

    AndersonApdo Membro Participativo

    Bom dia, precisava de um help pessoal.

    Estou com o seguinte código:

    Código:
     
    
    DEFINE VAR pPesoNota AS INT INITIAL 0.
    
    FOR EACH sial_embarque WHERE
             sial_embarque.emp_codigo = 1  AND
             sial_embarque.emb_status = "F" and
             sial_embarque.emb_data  >= datetime("23/01/2013 00:00:00") AND
             sial_embarque.emb_data  <= datetime("23/01/2013 23:59:59") NO-LOCK BY sial_embarque.emb_codigo :
            
             FOR EACH SIAL_EMBARQUE_PRODUTO
                WHERE SIAL_EMBARQUE_PRODUTO.EMB_CODIGO = SIAL_EMBARQUE.EMB_CODIGO
                  AND SIAL_EMBARQUE_PRODUTO.EMP_CODIGO =  SIAL_EMBARQUE.EMP_CODIGO NO-LOCK.
            
                      FOR EACH SIAL_PRODUTO
                     
                         WHERE SIAL_PRODUTO.PROD_CODIGO = SIAL_EMBARQUE_PRODUTO.PROD_CODIGO  NO-LOCK.
                                            
                        ASSIGN pPesoNota = (SIAL_EMBARQUE_PRODUTO.EPROD_QUANTIDADE *  SIAL_PRODUTO.PROD_PESO).
                      
                      END.
    
                      DISP sial_embarque.emb_codigo
                           pPesoNota.
                           
             END.     
    END.
    
    
    

    Acontece que, quando eu mostro o peso nota na tela ela mostra da seguinte forma:

    Embarque | Peso nota
    1022 233
    1022 233
    1022 233

    1030 360
    1030 360
    1030 360

    Estes campos que são iguais eu preciso somar eles para adicionar ao Relatório, no caso fazer o seguinte:

    Embarque | Peso nota
    1022 699

    1030 1080


    Quero somar os valores e fazer aparecer só um. Alguém pode me dar uma luz de como faço isso?
  2. lima

    lima Membro Participativo

    Amigo, creio que o código abaixo já resolva seu problema.

    Código:
    
    
    DEFINE VAR pPesoNota AS INT INITIAL 0.
    
    FOR EACH sial_embarque WHERE
             sial_embarque.emp_codigo = 1  AND
             sial_embarque.emb_status = "F" and
             sial_embarque.emb_data  >= datetime("23/01/2013 00:00:00") AND
             sial_embarque.emb_data  <= datetime("23/01/2013 23:59:59") NO-LOCK BY sial_embarque.emb_codigo :
    
             ASSIGN pPesoNota = 0.
            
             FOR EACH SIAL_EMBARQUE_PRODUTO
                WHERE SIAL_EMBARQUE_PRODUTO.EMB_CODIGO = SIAL_EMBARQUE.EMB_CODIGO
                  AND SIAL_EMBARQUE_PRODUTO.EMP_CODIGO =  SIAL_EMBARQUE.EMP_CODIGO NO-LOCK.
                      
                      FOR EACH SIAL_PRODUTO
                         WHERE SIAL_PRODUTO.PROD_CODIGO = SIAL_EMBARQUE_PRODUTO.PROD_CODIGO  NO-LOCK.
    
                          ASSIGN pPesoNota = pPesoNota + (SIAL_EMBARQUE_PRODUTO.EPROD_QUANTIDADE *  SIAL_PRODUTO.PROD_PESO).
                      END.
             END.     
    
             DISP sial_embarque.emb_codigo
                  pPesoNota.
    END.
    
    Espero ter ajudado.

    Abraço.
  3. AndersonApdo

    AndersonApdo Membro Participativo

    Olá Lima, agradeço sua ajuda, mas não resolve. Na verdade eu preciso fazer um SUM no campo, por exemplo, se meu retorno é assim...



    Embarque | Peso Nota
    100 | 200
    100 | 200
    100 | 200
    100 | 200

    Eu preciso que ele fique assim

    Embarque | Peso Nota
    100 | 800
  4. lima

    lima Membro Participativo

    Segue novo código, este tem que funcionar.

    Código:
    DEFINE VAR pPesoNota AS INT INITIAL 0.
    
    DEFINE TEMP-TABLE tt-peso-embarque NO-UNDO
        FIELD emb_codigo LIKE SIAL_EMBARQUE.EMB_CODIGO
        FIELD emp_codigo LIKE SIAL_EMBARQUE.EMP_CODIGO
        FIELD peso       AS DECIMAL.
    
    
    EMPTY TEMP-TABLE tt-peso-embarque.
    
    FOR EACH sial_embarque WHERE
             sial_embarque.emp_codigo = 1  AND
             sial_embarque.emb_status = "F" and
             sial_embarque.emb_data  >= datetime("23/01/2013 00:00:00") AND
             sial_embarque.emb_data  <= datetime("23/01/2013 23:59:59") NO-LOCK BY sial_embarque.emb_codigo :
    
            
            
             FOR EACH SIAL_EMBARQUE_PRODUTO
                WHERE SIAL_EMBARQUE_PRODUTO.EMB_CODIGO = SIAL_EMBARQUE.EMB_CODIGO
                  AND SIAL_EMBARQUE_PRODUTO.EMP_CODIGO = SIAL_EMBARQUE.EMP_CODIGO NO-LOCK.
                      
                      FOR EACH SIAL_PRODUTO
                         WHERE SIAL_PRODUTO.PROD_CODIGO = SIAL_EMBARQUE_PRODUTO.PROD_CODIGO  NO-LOCK.
    
                          ASSIGN pPesoNota = (SIAL_EMBARQUE_PRODUTO.EPROD_QUANTIDADE *  SIAL_PRODUTO.PROD_PESO).
                      END.
    
                      FIND FIRST tt-peso-embarque 
                           WHERE tt-peso-embarque.emb_codigo = SIAL_EMBARQUE.EMB_CODIGO
                             AND tt-peso-embarque.emp_codigo = SIAL_EMBARQUE.EMP_CODIGO NO-ERROR.
                      IF NOT AVAIL tt-peso-embarque THEN DO:
                          CREATE tt-peso-embarque.
                          ASSIGN tt-peso-embarque.emb_codigo = SIAL_EMBARQUE.EMB_CODIGO
                                 tt-peso-embarque.emp_codigo = SIAL_EMBARQUE.EMP_CODIGO.
                      END.
    
                      ASSIGN tt-peso-embarque.peso = tt-peso-embarque.peso + pPesoNota.
             END.     
    END.
    
    FOR EACH tt-peso-embarque:
        DISP tt-peso-embarque.emb_codigo 
             tt-peso-embarque.emp_codigo
             tt-peso-embarque.peso.
    END.
    
    Favor realizar os testes.

    Abraços.
  5. AndersonApdo

    AndersonApdo Membro Participativo

    Opá, perfeito a solução. Muito obrigado.
  6. lima

    lima Membro Participativo

    Show Anderson,

    Fico feliz por ter ajudado.

    Abraços.

Compartilhe esta Página