1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Duvida Calculando o menor valor dentro de um for each.

Discussão em 'Progress 4GL' iniciado por MatheusHLX, Dezembro 19, 2013.

  1. MatheusHLX

    MatheusHLX Sem Pontuação

    Olá galera, estou com um problema aqui, porque tenho um for each, que busca os valores de alguns salários em um banco de dados, e eu preciso mostra o maior salário e o menor salário, bom para mim definir qual foi o maior salário foi mais simples, eu apenas utilizei esse código:

    IF (d-sal-maximo < d-sal) THEN d-sal-maximo = d-sal.

    Mas para o meu salário minimo eu não posso usar um código como esse:

    IF (d-sal-minimo > d-sal) THEN d-sal-minimo = d-sal.

    Porque já que o meu d-sal-minimo tem valor nulo, nenhum valor será meno que ele, então no final ficaria zero o resultado, e também não posso dizer para ele, por exemplo que:

    ASSIGN d-sal-minimo = d-sal.

    Porque como estou dentro de um for each ele iria mudar toda hora e o valor do salário minimo seria o ultimo valor mostrado.


    Obrigado.
  2. elmo

    elmo Membro Ativo

    Bom dia,
    Não sou expert em programação, fiz um teste veja se funciona pra você.
    Na definição das variaveis d-sal-maximo e d-sal -minimo eu inicializei com valores conforme exemplo abaixo.
    Código:
    def var d-sal-maximo as decimal format ">>>,>>>,>>9.99" initial 0.
    def var d-sal-minimo as decimal format ">>>,>>>,>>9.99" initial 999999999.99.
    
    def temp-table sal no-undo
        field d-sal as decimal format ">>>,>>>,>>9.99".
    
    create sal.
        assign sal.d-sal = 4552.30.
    create sal.
        assign sal.d-sal = 3025.50.
    create sal.
        assign sal.d-sal = 5064.69.
    create sal.
        assign sal.d-sal = 1200.21.
    create sal.
        assign sal.d-sal = 2370.90.
       
       
    for each sal:
      disp sal.
    end.
    for each sal:
        IF (d-sal-maximo < sal.d-sal) THEN d-sal-maximo = d-sal.
        IF (d-sal-minimo > sal.d-sal) THEN d-sal-minimo = d-sal.
    end.
    
    disp d-sal-maximo d-sal-minimo.
  3. MatheusHLX

    MatheusHLX Sem Pontuação

    Elmo obrigado pela resposta, mas eu acabei fazendo assim


    IF FIRST-OF (cargo.cdn_cargo_basic) THEN DO:
    ASSIGN d-sal-minimo = funcionario.val_salario_atual.
    END.

    IF (d-sal-minimo > funcionario.val_salario_atual) THEN d-sal-minimo = d-sal.
  4. LFBuozi

    LFBuozi Membro Participativo

    A forma que eu usaria seria a seguinte:
    Código:
    for each funcionario no-lock:
        accumulate funcionario.val_salario_atual (min max).
    end.
    disp accum min funcionario.val_salario_atual column-label "Menor"
        accum max funcionario.val_salario_atual column-label "Maior".
    Outras possibilidades, por exemplo, maior e menor salário por por cargo:
    Código:
    for each funcionario no-lock break by funcionario.cdn_cargo_basic:
        accumulate funcionario.val_salario_atual (min max break by funcionario.cdn_cargo_basic).
        if last-of(funcionario.cdn_cargo_basic) then
            disp funcionario.cdn_cargo_basic
                 accum min by funcionario.cdn_cargo_basic funcionario.val_salario_atual column-label "Menor"
                 accum max by funcionario.cdn_cargo_basic funcionario.val_salario_atual column-label "Maior".
    end.
    
  5. Agnaldo

    Agnaldo Membro Ativo

    PHP:
    FOR EACH Tabela BREAK BY campoValorSalario:
        IF 
    FIRST(campoValorSalario)
           
    THEN
               ASSIGN menorSalario 
    campoValorSalario.
        IF 
    LAST(campoValorSalario)
           
    THEN
               ASSIGN maiorSalario 
    campoValorSalario.      
    END.
    elmo curtiu isso.
  6. MatheusHLX

    MatheusHLX Sem Pontuação

    Sim, eu utilizei essa forma que o Agnaldo mostrou.

Compartilhe esta Página