xBrowser parando aplicação após um número x de registros

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

João Eduardo
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 28 Jul 2021 18:25
Localização: Paracatu/MG

xBrowser parando aplicação após um número x de registros

Mensagem por João Eduardo »

Bom dia pessoal, estou com um problema que gostaria de um auxílio, estou usando o Xbrowser para apresentar uma listagem de itens, e até então não tive nenhum problema, foi só após testes que foi identificado que caso seja incluida uma quantidade "x" de itens de ocupe toda a lista e de modo que precise scrolar para baixo, para acessar os demais registros, a aplicação simplesmente não permite a inclusão de nenhum item, travando e só resolvendo ao fechar ela no gerenciador de tarefas, olhei e reolhei o código, e está me parecendo que seja alguma configuração do xBrowser que possa ser a causa, alguém já encontrou um problema parecido?
(Irei deixar abaixo o trecho de código responsável pela config do xBrowser.

Código: Selecionar todos

Redefine xBrowse oBrwIce Array aTmpIce AUTOCOLS AUTOSORT;
            Columns 24,02,03,11,04,05,06,09,12,13,10,14,15,16,25,26,28;
            Headers "S",;
                    "Item",;
                    "Produto",;
                    "Cód.Auxiliar",;
                    "Descrição",;
                    "Marca",;
                    "Un.[E]",;
                    "Quantidade [E]",;
                    "Saldo",;
                    "Minimo",;
                    "Status Item",;
                    "Mel.Cot.1",;
                    "Mel.Cot.2",;
                    "Mel.Cot.3",;
                    "Últ. Compra",;
                    "Últ. Venda",;
                    "Observação";
            FieldSizes 20,30,60,80,225,60,45,82,45,45,100,58,58,58,72,70,300;
            ID 202 Of oFldCot:aDialogs[2] UpDate
   oBrwIce:aJustify         :={.F.,.F.,.F.,.F.,.F.,.F.,.F.,.T.,.T.,.T.,.F.,.F.,.F.,.F.,.F.,.F.,.F.}
   oBrwIce:lFastEdit        :=.T.
   oBrwIce:l2007            :=.F.
   oBrwIce:lAllowColSwapping:=.F.
   oBrwIce:lAllowColHiding  :=.F.
   oBrwIce:SetColor(CLR_BLACK,CLR_WHITE)
   oBrwIce:nColDividerStyle :=LINESTYLE_BLACK
   oBrwIce:nRowDividerStyle :=LINESTYLE_BLACK
   oBrwIce:bKeyChar         :={|nKey|If(nKey=13,IncCot(Empty(aTmpIce[oBrwIce:nRowSel(),02]),Left(vStaSin,1)="A",aTmpCot[oBrwCot:nAt,23],vObsGer,oBrwIce,@lExiCot,vTipCot,aFiltro,aTmpIce,oBrwIce,;
                                                       oBtnLfi,dValEma,lBloCot,lEfeCot,@lIncFvi),Nil)}
   oBrwIce:bClrStd          :={||{If(Left(aTmpIce[oBrwIce:Keyno(),10],1)="X",CLR_HBLUE,If(Left(aTmpIce[oBrwIce:Keyno(),10],1)$"BC",CLR_HRED,If(Left(aTmpIce[oBrwIce:Keyno(),10],1)$"PWE",CLR_GREEN,CLR_BLACK))),If(oBrwIce:Keyno()%2=0,CLR_WHITE,CLR_AZUL3)}}
For nForBrw := 1 to Len(oBrwIce:aCols)
      oColBrw:=oBrwIce:aCols[nForBrw]
      oColBrw:bLDClickData  :={||IncCot(Empty(aTmpIce[oBrwIce:nRowSel(),02]),Left(vStaSin,1)="A",aTmpCot[oBrwCot:nAt,23],vObsGer,oBrwIce,@lExiCot,vTipCot,aFiltro,aTmpIce,oBrwIce,;
                                        oBtnLfi,dValEma,lBloCot,lEfeCot,@lIncFvi)}
      If nForBrw==7
         oColBrw:nEditType     :=EDIT_LISTBOX
         oColBrw:aEditListTxt  :=aTipUni
         oColBrw:aEditListBound:=aTipUni
         oColBrw:bOnPostEdit   :={|o,x,n|If(n!=VK_ESCAPE,GraAltCam("U",@oBrwIce,@aTmpIce,x,lBloCot,lEfeCot),Nil)}
      ElseIf nForBrw==8
         oColBrw:nEditType     :=EDIT_GET
         oColBrw:cEditPicture  :="@e 999999.999"
         oColBrw:bOnPostEdit   :={|o,x,n|If(n!=VK_ESCAPE,GraAltCam("Q",@oBrwIce,@aTmpIce,x,lBloCot,lEfeCot),Nil)}
      ElseIf nForBrw==9.Or.;
             nForBrw==10
         oColBrw:cEditPicture  :="@e 999999.999"
      EndIf
  Next
Obs: Essa função "IncCot" é de uso interno aqui na empresa, mas é a função responsável pela inclusão.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

xBrowser parando aplicação após um número x de registros

Mensagem por rochinha »

Amiguinhos,

Joao Eduardo

O scroll leva em consideração o numero de registros sendo visualizados no frame da tela. Supondo que você tenha 520 registros e sua tela comporte 50 na visão ao fazer scroll é muito provável que após 10 pressionadas em sequencia na décima primeira possa acontecer um estouro pelo fato de tentar apresentar mais 50 tendo apenas 20 reais.

Seria necessário verificar a classe, e fazer ajustes no método ScrollDown para verificar este problema. Talvez fosse interessante que ao acionar os métodos scroll e lFastEdit fosse desligado e religado a cada pedido de movimento.

O método de edição automático deve trabalhar por lock no registro posicionado e quando acionado o scroll este deve prever a liberação do registro podendo ocorrer a movimentção do ponteiro da tabela mas não do indice fazendo o aplicativo se perder.

Outra possibilidade para este problema possa ser que ao ligar o lFastEdit este passe a usar vetores em memória para manipular o registro e o scroll possa falhar já que repetidos movimentos podem estourar pelos tantos criar/eliminar vetores.

Eu uso a TWBrowse, muito antiga e já tive problemas no scroll com ela e precisei intervir nos métodos de salto.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xBrowser parando aplicação após um número x de registros

Mensagem por Kapiaba »

Qual a versão do seu FIVEWIN e está usando um ARRAY()? É isso? E outra, você deveria ter postado o código completo, pedaços de código não dizem nada.

Regards, saludos.
João Eduardo
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 28 Jul 2021 18:25
Localização: Paracatu/MG

xBrowser parando aplicação após um número x de registros

Mensagem por João Eduardo »

Bom Dia pessoal, consegui identificar o problema no código, mandei apenas código de abertura do xBrowser pois tinha certeza que o problema era ali, e acontece que era mesmo,no uso do xBrowser, eu estava utilizando o "oBrwIce:nRowSel()" para identificar o item ao qual estava focado na lista, pegando sua posição e por ai vai, contudo, pelo que verifiquei esse valor, retorna apenas o valor da posição 1 até a posição visivel da lista, ou seja, por mais que tivesse vamos supor 12 registros visíveis na lista, independente se eu estevesse no 31º posição do array ele teoricamente retornaria 12, pois esse era o registro máximo visível na lista, neste caso, como ele pegava a posição 12, criava 12 registros nos arrays e tentava colocar mais, ocasionando no estouro do array e travamento geral, após quebrar a cabeça eu troquei pelo "KeyNo()" e ele apontou o valor correto e por consequência resolveu o problema, agradeço a atenção!
Responder