Barra de Progresso

Discussão em 'Progress 4GL' iniciado por lwazevedo, Outubro 23, 2013.

  1. lwazevedo

    lwazevedo Membro Ativo

    Olá,

    Caros venho aqui perguntar a vocês, se alguém já fez uma barra de progresso no braço para que ficar mostrando em quanto por exemplo cria-se uma temp-table.

    tentei fazer desta forma, mas ficou muito rápido nem da para acompanhar a barra pula de 0 para 100 rapidamente.

    Aqui parte do código do arquivo ut-slide.p.
    Código:
    
    
    
    DEFINE VARIABLE SLIDER-1 AS INTEGER INITIAL 0 
         VIEW-AS SLIDER MIN-VALUE 0 MAX-VALUE 100 HORIZONTAL 
         TIC-MARKS NONE 
         SIZE 45.8 BY 2.95 NO-UNDO.
    
    PROCEDURE enable_UI :
    
      DISPLAY SLIDER-1 
          WITH FRAME fMain IN WINDOW wWin.
      ENABLE SLIDER-1 
          WITH FRAME fMain IN WINDOW wWin.
      {&OPEN-BROWSERS-IN-QUERY-fMain}
      VIEW wWin.
    END PROCEDURE.
    
    PROCEDURE p-acompanha:
    
     DEF INPUT PARAM v-cont AS INT. 
     
     ASSIGN slider-1:SCREEN-VALUE IN FRAME {&FRAME-NAME}  = string(v-cont).
      
     /*slider-1:MAX-VALUE = v-cont.*/
     
           
    
    END PROCEDURE.
    PROCEDURE p-finaliza:
        APPLY "CLOSE":U TO THIS-PROCEDURE.
    
    END PROCEDURE.
    
    PROCEDURE p-titulo:
        DEF INPUT PARAM v-titulo AS CHAR.
        ASSIGN wWin:TITLE = v-titulo.
    END PROCEDURE.
    
    
    programa que executa o .p

    Código:
    
    DEF TEMP-TABLE tt-cc NO-UNDO
        FIELD cod LIKE order.orderNUm
        FIELD CUST LIKE CUSTOMER.CUSTNUM.
        
    
     def var h-acomp as handle.
    
        session:set-wait-state("General").
        run ut-slider.p persistent set h-acomp.
    
        
        run  p-Titulo in h-acomp (input "Efetuando a leitura").
        RUN p-customer.
                   
        run p-finaliza in h-acomp.
        session:set-wait-state("").
    
    
     PROCEDURE p-customer:  
     DEF VAR v-cont AS INT INIT 1.
     FOR EACH order NO-LOCK.
         RUN  p-acompanha IN h-acomp (INPUT v-cont).
         FIND FIRST tt-cc WHERE tt-cc.cod = order.orderNum
                             AND TT-CC.CUST = ORDER.CUSTNUM
                             NO-LOCK NO-ERROR.
         IF NOT AVAIL tt-cc THEN DO:
             CREATE tt-cc.
             ASSIGN tt-cc.cod = order.ordernum
                    TT-CC.CUST = ORDER.CUSTNUM.
                    .
    
         END.
         
         v-cont = v-cont + 1.
     END.
    
    
    
    
    
    se alguém poder ajudar agradeço.
  2. LeandroSantos

    LeandroSantos Membro Participativo

    Da maneira como voce fez, vamos supor que esta sua tabela order tenha 1.000(mil) registros, quando o for each passar pelo registro nº 100 sua barra de progresso estará mostrando 100% quando na verdade foi processado apenas 10%.
    Voce precisa contar quantos registros tem na tabela e passar este valor para o MAX-VALUE
  3. lwazevedo

    lwazevedo Membro Ativo

    certo.

    Mas como passar este valor para max value, pois quando criado o slider ele já pedi obrigatoriamente que se coloque um valor no max-value.
  4. xPaulinhox

    xPaulinhox Membro Participativo

    Eu nunca usei mas acredito que você tenha que passar o percentual e não a quantidade de registros.
    Exemplo:

    Tabela order tem 1000 registros.
    Você terá que passar para a p-acompanha ( (v-cont * 100) / v-total-reg).

    O problema de fazer isso, é que você terá que saber por quantos registros vai passar na query, ou seja, tem que executar a query 2 vezes, uma para saber quantos registros seram usados e outra para fazer a lógica que você quer.

    No exemplo que dei, quando você passar pelo registro de número 200 você vai passar para a p-acompanha (200 * 100 / 1000) = 20, ou seja, 20% concluído.

    Espero que ajude.

    Abraço.
  5. lwazevedo

    lwazevedo Membro Ativo

    Até ai tudo certo, mas e quando a quantidade de registro for menor que 100 por exemplo.
    tipo 37 registro.
  6. xPaulinhox

    xPaulinhox Membro Participativo

    A lógica fica a mesma.

    Por exemplo:
    Total de registros: 37

    Vamos supor que a query ta passando pelo registro 20 então fica assim:
    p-acompanha (v-cont * 100 / v-total-reg).

    ou seja:
    p-acompanha (20 * 100 / 37) = 54.05

    ou seja:

    54.05% concluído.

    Espero que consiga entender, qualquer coisa, pergunte novamente.

    Abraço.

Compartilhe esta Página