Exemplo de paginação no browse

Discussão em 'Progress 4GL' iniciado por eduardory, Novembro 16, 2010.

  1. eduardory

    eduardory Sem Pontuação

    E aí pessoal!

    Alguém ai tem um exemplo de paginação em um browse?
    Meu problema é o seguinte: Um browse está com a performance prejudicada por estar trazendo muitos registros em sua consulta, e por isso quero paginar em folders (abas) para que eu possa fazer a consulta somente ao número de registros a serem exibidos naquela aba.

    obrigado!
    Eduardo.
  2. LeandroSantos

    LeandroSantos Membro Participativo

    Reveja seu codigo for each, indices que voce esta usando na query, não acho que o problema seja a quantidade de registros.
    O browse não tras todos os registros de uma vez.
    Poste o seu codigo, assim quem sabe eu ou algum outro colega possa ajudar melhor.
  3. eduardory

    eduardory Sem Pontuação

    Nossa, o código é bem grande. kkkkk
    E não é problema do FOR EACH, estou usando o fields e índices corretos. É que para cada registro criado na TEMP-TABLE o programa faz uma série de validações e cálculos, isso que torna o FOR EACH demorado. Mas esses cáculos e validações são necessárias. Na verdade o que demora é a criação do registro na temp-table. Segue meu código, não colocarei todas as procedures envolvidas pq acho que não tem necessidade.

    Código:
                            FOR EACH renrest FIELDS(renrest.resvecto  renrest.grpcod    renrest.papcod   
                                                    renrest.resnumest renrest.reschar02 renrest.empcod
                                                    renrest.resdata   renrest.siscod    renrest.respti
                                                    renrest.resemiss  renrest.resseq    renrest.resqtbloq
                                                    renrest.resinxpap renrest.restxope  renrest.resperiod
                                                    renrest.resquant  renrest.resvalor  renrest.respu
                                                    renrest.respuvda  renrest.respumerc renrest.reslocal
                                                    renrest.rescarte  renrest.fescod    renrest.strape
                                                    renrest.reschar10 renrest.resqtcup) NO-LOCK 
                                              WHERE renrest.empcod    = m-empresa  AND
                                                    renrest.siscod    = m-codsis   AND 
                                                    renrest.resdata   = m-ropdtope AND
                                                    renrest.resvecto  = m-ropvecto AND
                                                    renrest.grpcod    = m-grpcod   AND
                                                    renrest.papcod    = m-papcod   AND
                                                    renrest.rescarte <> 0:
                                RUN cria-temp.    
                            END.
    
    Código:
    PROCEDURE cria-temp :
    DO WITH FRAME {&FRAME-NAME}:
    
    
        IF CAN-FIND(FIRST tabevflg WHERE tabevflg.siscod  = "SGA" AND
                                         tabevflg.empcod  = 0     AND
                                         tabevflg.flanum  = 144   AND
                                         tabevflg.opfstat = "1")  THEN DO:
    
           FIND FIRST tabcomp WHERE tabcomp.identif     = "ACESSO_USUARIO" AND
                                    tabcomp.empcod      = m-empresa        AND
                                    tabcomp.siscod      = ""               AND
                                    tabcomp.numope      = 0                AND
                                    tabcomp.descricao01 = m-usuario
                              NO-LOCK NO-ERROR.
           IF AVAIL tabcomp THEN DO:
              FIND FIRST renrope WHERE renrope.siscod    = renrest.siscod AND 
                                       renrope.empcod    = renrest.empcod AND 
                                       renrope.resnumest = renrest.resnumest
                                 NO-LOCK NO-ERROR.
              IF AVAIL renrope THEN DO:
                 ASSIGN m-codmens = 0
                        m-descmen = "". 
                  RUN VALUE (m-caminho + "ren\reng026") (INPUT  renrest.grpcod,
                                                         INPUT  renrope.tpocod,    
                                                         INPUT  renrope.concodcrk,
                                                         OUTPUT m-codmens,
                                                         OUTPUT m-descmen).
                  IF m-codmens <> 0 THEN RETURN.
              END.
           END.
        END.
    
        
        IF (renrest.grpcod = 999 OR 
            CAN-FIND(FIRST tabgr3pp WHERE tabgr3pp.grpcod   = renrest.grpcod AND 
                                          tabgr3pp.gr3log06 = YES))          AND 
           (renrest.reschar10 = "*" OR m-flag36 <> "#") THEN RETURN. 
    
        IF  m-flag305 THEN DO:
            ASSIGN  m-descrireal = "(INICIO  : PROCEDURE cria-temp )".
            RUN p-relogio.   
        END.
    
        ASSIGN m-estqmaior   = renrest.resnumest
               m-gr1stsna    = FALSE
               m-gr1stpubase = FALSE
               m-gr1stpuoper = FALSE
               m-gr1multcurv = FALSE.
        RUN VALUE (m-caminho + "tab/tabg005A") (INPUT  renrest.grpcod,
                                                OUTPUT m-gr1stsna,   
                                                OUTPUT m-gr1stpubase,
                                                OUTPUT m-gr1stpuoper,
                                                OUTPUT m-gr1multcurv).
    
        IF m-gr1multcurv = TRUE THEN DO:
            ASSIGN m-estqmaior = 0.
            RUN VALUE (m-caminho + "ren/renb186") (INPUT  renrest.resnumest,
                                                   INPUT  renrest.resdata,
                                                   OUTPUT m-estqmaior).
            IF renrest.resnumest <> m-estqmaior THEN RETURN.
        END.
    
        IF m-flg633    = "1"  AND
           m-reschar02 <> "" AND
           INT(m-reschar02) <> INT(renrest.reschar02) THEN 
            RETURN.
    
        IF m-ropcust <> "" AND
           m-ropcust <> renrest.reslocal THEN 
            RETURN.
        
        FIND FIRST tabfestq WHERE tabfestq.fescod = renrest.fescod NO-LOCK NO-WAIT NO-ERROR.
        IF AVAIL tabfestq  THEN
            m-fesdesc = tabfestq.fesdesc.
        
        FIND FIRST te-estoque WHERE te-estoque.te-resvecto  = renrest.resvecto  AND
                                    te-estoque.te-grpcod    = renrest.grpcod    AND
                                    te-estoque.te-papcod    = renrest.papcod    AND
                                    te-estoque.te-resnumest = renrest.resnumest NO-ERROR.
        
        IF NOT AVAIL te-estoque THEN DO:
           CREATE te-estoque.
           m-contador = m-contador + 1.
           STATUS DEFAULT "Registros lidos: " + STRING(m-contador).
    
        ASSIGN te-estoque.te-empcod    = renrest.empcod
               te-estoque.te-resnumest = renrest.resnumest
               te-estoque.te-resdata   = renrest.resdata
               te-estoque.te-siscod    = renrest.siscod
               te-estoque.te-grpcod    = renrest.grpcod
               te-estoque.te-papcod    = renrest.papcod
               te-estoque.te-respti    = renrest.respti
               te-estoque.te-resvecto  = renrest.resvecto
               te-estoque.te-resemiss  = renrest.resemiss
               te-estoque.te-resseq    = renrest.resseq
               te-estoque.te-recid     = RECID(renrest)
               te-estoque.te-papelndx  = (TRIM(STRING(renrest.grpcod,">99")) + STRING(renrest.papcod,"9999"))
               te-estoque.te-codcateg  = IF te-estoque.te-respti = "Própria" THEN "1" ELSE "2"
               te-estoque.te-fesdesc   = m-fesdesc.
              
           IF m-flg633 = "1" THEN DO:
              te-estoque.te-categoria = IF renrest.reschar02 <> "" THEN 
                                           ENTRY(INT(renrest.reschar02),m-string-categoria)
                                        ELSE "".
           END.
           
           
           IF m-flag838 THEN 
              ASSIGN te-centcust = renrest.fescod / 100.
           
           ASSIGN m-desindex = "".
           IF renrest.resinxpap <> 0 THEN DO:
              FIND FIRST tabindex WHERE tabindex.inxcod = renrest.resinxpap
                                  NO-LOCK NO-ERROR.
              IF AVAILABLE tabindex THEN 
                 ASSIGN m-desindex = tabindex.inxnome.
              ELSE 
                 ASSIGN m-desindex = "".
           END.                                           
           
           ASSIGN te-estoque.te-desindex  = m-desindex                
                  te-estoque.te-restxope  = renrest.restxope                     
                  te-estoque.te-resperiod = renrest.resperiod
                  te-estoque.te-resquant  = renrest.resquant
                  te-estoque.te-resvalor  = renrest.resvalor
                  te-estoque.te-respu     = renrest.respu
                  te-estoque.te-respuvda  = renrest.respuvda                 
                  te-estoque.te-respumerc = renrest.respumerc
                  te-estoque.te-reslocal  = renrest.reslocal
                  te-estoque.te-rescarte  = renrest.rescarte
                  te-estoque.te-resqtbloq = renrest.resqtbloq
                  te-estoque.te-resvecto  = renrest.resvecto.
    
            ASSIGN te-estoque.te-codselic = 0.
            IF m-flag1144 = "1" THEN DO:
                FIND FIRST tabgrpap WHERE tabgrpap.grpcod = renrest.grpcod NO-LOCK NO-ERROR NO-WAIT.
                IF AVAIL tabgrpap AND tabgrpap.grpselic THEN
                    ASSIGN te-estoque.te-codselic = renrest.resqtcup.
            END.
                  
           ASSIGN  m-totcart = m-totcart + te-estoque.te-rescarte
                   m-totqtd  = m-totqtd  + te-estoque.te-resquant
                   m-totval  = m-totval  + te-estoque.te-resvalor.              
                  
           IF  m-flag305 THEN DO:
               ASSIGN  m-descrireal = "(TERMINO : PROCEDURE cria-temp )".
               RUN p-relogio.   
           END.
        END.                          
    END.
    END PROCEDURE.
    
  4. LeandroSantos

    LeandroSantos Membro Participativo

    Não daria pra você usar direto a tabela do banco sem temp-table para popular o browse, criar colunas calculadas e no evento row-display do browse voce faz os calculos?

Compartilhe esta Página