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.
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.
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.
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?