HMG Browse/Grid lentos

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

HMG Browse/Grid lentos

Mensagem por JAIR RANGEL »

Olá, a todos!

Olha, quero dizer que vocês que desenvolvem a HMG são fantásticos, e demonstram isto a cada versão.
Obrigado a toda essa equipe.

Bem, vamos lá:
Após baixar a hmg 3.3.0, compilei um projeto e iniciei alguns testes.
Percebi que quando abro uma tabela via browse (IDE Ansi) a operação fica muito lenta.
Então, fiz alguns testes com um grid (IDE Ansi) e utilizei as cores nas linhas do grid, tal qual os exemplos, utilizando a propriedade DynamicBackColor.
Ficou muito legal ver as informações intercalando as cores por linhas do grid. No entanto, ficou extremamente lento. As informações, ou seja, os registros, demoram muito para serem apresentados na tela.

Será que está faltando algum comando novo ou mesmo uma nova configuração do tipo SET no inicio do fonte principal?

Se alguém souber ou tiver uma ideia do que pode estar acontecendo seria legal.

Um forte abraço a todo,
E parabéns pelas novidades,

JAIR RANGEL
Editado pela última vez por Toledo em 16 Jul 2014 17:32, em um total de 1 vez.
Razão: Esta mensagem foi dividida de um outro tópico cujo conteúdo tratava de um outro assunto.
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

HMG Browse/Grid lentos

Mensagem por Toledo »

JAIR RANGEL escreveu:Percebi que quando abro uma tabela via browse (IDE Ansi) a operação fica muito lenta.
Jair, este seu código você já usava em versões anteriores e era mais rápido ou é um código novo que você testou apenas nesta versão 3.3.0 da HMG?

Tem algum exemplo deste seu código, que dê para fazer um teste?

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

HMG Browse/Grid lentos

Mensagem por JAIR RANGEL »

Olá, Toledo!

Obrigado por responder!

Este projeto já está em operação a muito tempo compilado com versões anteriores e funciona perfeitamente nos Clientes.
É um módulo do Financeiro: Contas á Pagar.
Estou testando ele na hmg 3.3.0 por considerar um módulo pequeno. Porém, é um módulo com vários programas e funções.

Este é o trecho inicial do programa principal: ADMPAG.PRG

****************************************************************************
* ADMPAG - MODULO DE ADMINISTRACAO DO CONTAS A PAGAR. *
****************************************************************************
* Modulo : MENU PRINCIPAL *
* Programa : ADMPAG.PRG - Programa Main do Modulo de Contas Pagar. *
* Descricao : Menu Principal do modulo de C.PAGAR. *
* Codificado em : 19.11.1997 Por: Jair rangel. *
* Alterado em : 12.07.2014 Por: Jair Rangel. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
#include "minigui.ch"

Function Main()
//-------------------------------------------------------------------------
REQUEST DBFCDX // RDD DBFCDX.
RDDSETDEFAULT("DBFCDX")
DBSETDRIVER("DBFCDX")
Set(_SET_DBFLOCKSCHEME,2)

HMG_GETLANGUAGE('PT') // Seta Idioma do HB.

set scoreboard off
set wrap on
set message to 24
SET DELETED ON
SET BELL OFF
SET SAFETY OFF
SET EXACT OFF
SET EXCLUSIVE OFF
Set escape on
set date brit
SET CENTURY ON
SET EPOCH TO 2000
SET MULTIPLE OFF WARNING // Evita Executar Mais de Uma Vez.
//SET INTERACTIVECLOSE OFF


Este é o programa onde abre a tabela de Títulos via Browse() pela IDE Ansi:
Note que eu testei a propriedade DynamicBackColor no Browse(), mas não funcionou.
Quando fiz o mesmo teste no GRID, no programa de Baixa de Títulos: Funcionou OK, no entanto, muito lento.

****************************************************************************
* ADMEVV - SISTEMA DE CONTROLE DE ESTOQUE/VENDAS NO VAREJO. *
* *
* Modulo : CONTAS A PAGAR *
* Programa : PPAG100.PRG - Manutencao do CADASTRO DE TÍTULOS. *
* Codificado em: 07.04.1998 Por: jfr. *
* Modificado em: 11.11.2013 Por: jfr. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
#include "minigui.ch"
#define WM_USER 0x400 // Definicoes Para Quebar as Linhas do TOOLTIP.
#define TTM_SETMAXTIPWIDTH (WM_USER + 24)
// =============================================================================
Function PPAG100()
// =============================================================================
If (Substr(Se->PAGCon_seg,1,1)<>'S')
MsgExclamation('Acesso NEGADO! ')
Return Nil
EndIf

Sele LX // Parametro UTILIZAR LANÇAMENTO PARA O PLANO DE CONTAS INTEGRADO.
dbSetOrder(1)
dbGoTop()
dbSeek('PLACONINT')
pPLACONINT:=If( Found(), ALLTRIM(lx->x_texto),space(1) )

Sele LX // Parametro CONTA DE LANÇAMENTO AUTOMÁTICO NO PLANO DE CONTAS: DESCONTOS OBTIDOS.
dbSetOrder(1)
dbGoTop()
dbSeek('CONDESOBT')
pCONDESOBT:=If( Found(), SUBS(lx->x_texto,1,14),space(1) )

Sele LX // Parametro CONTA DE LANÇAMENTO AUTOMÁTICO NO PLANO DE CONTAS: PAGAM.JUROS E MORA.
dbSetOrder(1)
dbGoTop()
dbSeek('CONJURMOR')
pCONJURMOR:=If( Found(), SUBS(lx->x_texto,1,14),space(1) )

aNATUREZA:={} // Filtra NATUREZA DO TITULO na Tabela P/Montar Itens no ComboBox.
Sele f02
dbSetFilter({|| f02->TipTab_f02='05'})
dbGoTop()
While ! Eof()
AADD(aNATUREZA,{f02->CODTAB_F02,f02->DesTab_f02})
dbSkip()
EndDo
Set Filter TO

aNomFor:={} // Filtra Nome Fornecedor P/Montar Itens no ComboBox.
Sele f05
dbSetOrder(2)
dbGoTop()
While ! Eof()
AADD( aNomFor,f05->NomFor_f05 )
dbSkip()
EndDo

Sele 0 // PLANO DE CONTAS.
ARQ:=cDirTrab+'PC'+STRZERO(YEAR(ArqData),4,0)
ARQ1:=cDirTrab+'PC'+STRZERO(YEAR(ArqData),4,0)+'.CDX'
ARQALIAS:='f64'
ARQNIND:=1
RDUSE()
IF ARQLOCOK = 'F' ; dbCloseAll() ; RETURN ; ENDIF

Sele 0 // LANÇAMENTOS ANALÍTICO DE CUSTOS/DESPESAS NO PLANO DE CONTAS.
ARQ:=cDirTrab+'Evvf37'
ARQ1:=cDirTrab+'Evvf37.CDX'
ARQALIAS:='f37'
ARQNIND:=1
RDUSE()
IF ARQLOCOK = 'F' ; dbCloseAll() ; RETURN ; ENDIF

Private bColor := { || if ( This.CellRowIndex/2 == int(This.CellRowIndex/2) , { 221,238,255 } , { 255,255,255 } ) }

Declare Vetor1[40] // Propriedade FIELDS na MiniGUI. Browse da MiniGUI.
vetor1[01]:='F21->IDEHTC_F21' // Identifica se Existe Historico no Título.
vetor1[02]:='F21->NumTit_F21'
vetor1[03]:='F21->CodFor_F21'
vetor1[04]:='F21->ParTit_F21'
vetor1[05]:='F21->DatEmi_F21'
vetor1[06]:='F21->TipTit_F21'
vetor1[07]:='F21->NomFor_F21'
vetor1[08]:='F21->DatVen_F21'
vetor1[09]:='F21->DatPar_F21'
vetor1[10]:='F21->DatBai_F21'
vetor1[11]:='F21->VlrPri_F21'
vetor1[12]:='F21->VlrDes_F21'
vetor1[13]:='F21->VlrJur_F21'
vetor1[14]:='F21->VlrTot_F21'
vetor1[15]:='F21->VlrRec_F21'
vetor1[16]:='F21->SalTit_F21'
vetor1[17]:='F21->CodBan_f21'
vetor1[18]:='F21->ConCor_f21'
vetor1[19]:='F21->NumChe_f21'
vetor1[20]:='F21->DatChe_f21'
vetor1[21]:='F21->CodNat_f21'
vetor1[22]:='F21->HouEst_f21'
vetor1[23]:='F21->DatEst_f21'
vetor1[24]:='F21->NomDes_f21'
vetor1[25]:='F21->CodDes_f21'
vetor1[26]:='F21->CodCon_f21' // Código da Conta no Plano de Contas.
vetor1[27]:='F21->DesObt_f21' // Conta de Descontos Obtidos no Plano de Contas.
vetor1[28]:='F21->JurMor_f21' // Conta de Juros e Mora no Plano de Contas.
vetor1[29]:='F21->SCHDIA_F21' // Total Pagamento CHEQUE DIA.
vetor1[30]:='F21->SCHPRE_F21' // Total Pagamento CHEQUE PRE.
vetor1[31]:='F21->TOTDIN_F21' // Total Pagamento DINHEIRO.
vetor1[32]:='F21->TOTTCK_F21' // Total Pagamento TICKT.
vetor1[33]:='F21->TOTVTR_F21' // Total Pagamento VALE TRANSP.
vetor1[34]:='F21->TOTCRT_F21' // Total Pagamento CARTÃO.
vetor1[35]:='F21->TOTMBA_F21' // Total Pagamento MOVIM.BANCÁRIA (Depósito/Transf./DOC).
vetor1[36]:='F21->TOTDEB_F21' // Total Pagamento DÉBITO AUTOMÁTICO.
vetor1[37]:='F21->TOTENC_F21' // Total Pagamento ENCONTRO DE CONTAS.
vetor1[38]:='F21->TOTONL_F21' // Total Pagamento ON-LINE.
vetor1[39]:='F21->TOTCTE_F21' // Total Pagamento CHEQUE TERCEIROS.
vetor1[40]:='F21->NUMMAL_F21' // Número Malote.

Declare Vetor3[40] // Propriedade HEADERS na MiniGUI.
vetor3[01]:=''
vetor3[02]:='TÍTULO'
vetor3[03]:='FORNECEDOR'
vetor3[04]:='PC'
vetor3[05]:='EMISSÃO'
vetor3[06]:='TIPO'
vetor3[07]:='NOME FORNECEDOR'
vetor3[08]:='VENCIMENTO'
vetor3[09]:='PARCIAL'
vetor3[10]:='BAIXADO'
vetor3[11]:='PRINCIPAL'
vetor3[12]:='DESCONTO'
vetor3[13]:='JUROS'
vetor3[14]:='TOTAL'
vetor3[15]:='CRÉDITO'
vetor3[16]:='DÉBITO'
vetor3[17]:='BANCO DE PAGAMENTO'
vetor3[18]:='C.CORRENTE DE PAGAMENTO'
vetor3[19]:='CHEQUE/DOCUMENTO'
vetor3[20]:='DATA CHEQUE/DOCUMENTO'
vetor3[21]:='NATUREZA DO TÍTULO'
vetor3[22]:='ESTORNO'
vetor3[23]:='DATA ESTORNO'
vetor3[24]:='EMPRESA/FILIAL COMPRADORA'
vetor3[25]:='CÓDIGO EMPRESA/FILIAL COMPRADORA'
vetor3[26]:='CONTA DE DESPESAS'
vetor3[27]:='CONTA DE DESCONTOS OBTIDOS'
vetor3[28]:='CONTA DE JUROS/MORA'
vetor3[29]:='CHEQUE-DIA'
vetor3[30]:='CHEQUE-PRE'
vetor3[31]:='DINHEIRO'
vetor3[32]:='TICKT'
vetor3[33]:='VALE TRANSPORTE'
vetor3[34]:='CARTÃO'
vetor3[35]:='MOVIM.BANCÁRIA'
vetor3[36]:='DÉBITO AUTOMÁTICO'
vetor3[37]:='ENCONTRO DE CONTAS'
vetor3[38]:='ON-LINE'
vetor3[39]:='CHEQUE TERCEIROS'
vetor3[40]:='MALOTE'

Declare Vetor2[40] // Propriedade JUSTIFY na MiniGUI.
vetor2[01]:=BROWSE_JTFY_LEFT
vetor2[02]:=BROWSE_JTFY_LEFT
vetor2[03]:=BROWSE_JTFY_LEFT
vetor2[04]:=BROWSE_JTFY_LEFT
vetor2[05]:=BROWSE_JTFY_LEFT
vetor2[06]:=BROWSE_JTFY_LEFT
vetor2[07]:=BROWSE_JTFY_LEFT
vetor2[08]:=BROWSE_JTFY_LEFT
vetor2[09]:=BROWSE_JTFY_LEFT
vetor2[10]:=BROWSE_JTFY_LEFT
vetor2[11]:=BROWSE_JTFY_RIGHT
vetor2[12]:=BROWSE_JTFY_RIGHT
vetor2[13]:=BROWSE_JTFY_RIGHT
vetor2[14]:=BROWSE_JTFY_RIGHT
vetor2[15]:=BROWSE_JTFY_RIGHT
vetor2[16]:=BROWSE_JTFY_RIGHT
vetor2[17]:=BROWSE_JTFY_LEFT
vetor2[18]:=BROWSE_JTFY_LEFT
vetor2[19]:=BROWSE_JTFY_LEFT
vetor2[20]:=BROWSE_JTFY_LEFT
vetor2[21]:=BROWSE_JTFY_LEFT
vetor2[22]:=BROWSE_JTFY_LEFT
vetor2[23]:=BROWSE_JTFY_LEFT
vetor2[24]:=BROWSE_JTFY_LEFT
vetor2[25]:=BROWSE_JTFY_LEFT
vetor2[26]:=BROWSE_JTFY_LEFT
vetor2[27]:=BROWSE_JTFY_LEFT
vetor2[28]:=BROWSE_JTFY_LEFT
vetor2[29]:=BROWSE_JTFY_RIGHT
vetor2[30]:=BROWSE_JTFY_RIGHT
vetor2[31]:=BROWSE_JTFY_RIGHT
vetor2[32]:=BROWSE_JTFY_RIGHT
vetor2[33]:=BROWSE_JTFY_RIGHT
vetor2[34]:=BROWSE_JTFY_RIGHT
vetor2[35]:=BROWSE_JTFY_RIGHT
vetor2[36]:=BROWSE_JTFY_RIGHT
vetor2[37]:=BROWSE_JTFY_RIGHT
vetor2[38]:=BROWSE_JTFY_RIGHT
vetor2[39]:=BROWSE_JTFY_RIGHT
vetor2[40]:=BROWSE_JTFY_LEFT

Declare Vetor4[40] // Propriedade WIDTHS na MiniGUI.
vetor4[01]:=30
vetor4[02]:=70
vetor4[03]:=70
vetor4[04]:=40
vetor4[05]:=80
vetor4[06]:=50
vetor4[07]:=250
vetor4[08]:=80
vetor4[09]:=80
vetor4[10]:=80
vetor4[11]:=100
vetor4[12]:=100
vetor4[13]:=100
vetor4[14]:=100
vetor4[15]:=100
vetor4[16]:=100
vetor4[17]:=100
vetor4[18]:=100
vetor4[19]:=100
vetor4[20]:=100
vetor4[21]:=100
vetor4[22]:=100
vetor4[23]:=100
vetor4[24]:=250
vetor4[25]:=100
vetor4[26]:=100
vetor4[27]:=100
vetor4[28]:=100
vetor4[29]:=100
vetor4[30]:=100
vetor4[31]:=100
vetor4[32]:=100
vetor4[33]:=100
vetor4[34]:=100
vetor4[35]:=100
vetor4[36]:=100
vetor4[37]:=100
vetor4[38]:=100
vetor4[39]:=100
vetor4[40]:=100

Declare Vetor5[2] // Propriedade IMAGE na MiniGUI.
vetor5[01]:='SEMHISTORICO16' // Definir Imagem de Apresentação.
vetor5[02]:='HISTORICO16'

Declare Vetor6[40] // Propriedade DYNAMICBACKCOLOR na MiniGUI.
For i:=1 to 40
Vetor6:=bColor
Next

// PROPRIEDADES do Componente GRID_2. Este Se Encontra no FormCadaTitulo.
Declare VetGRIDCada3[4] // Propriedade HEADERS na MiniGUI.
vetGRIDCada3[01]:='CONTA'
vetGRIDCada3[02]:='DESCRIÇÃO'
vetGRIDCada3[03]:='% RATEIO'
vetGRIDCada3[04]:='VALOR'

Declare VetGRIDCada2[4] // Propriedade JUSTIFY na MiniGUI.
vetGRIDCada2[01]:=BROWSE_JTFY_LEFT
vetGRIDCada2[02]:=BROWSE_JTFY_LEFT
vetGRIDCada2[03]:=BROWSE_JTFY_RIGHT
vetGRIDCada2[04]:=BROWSE_JTFY_RIGHT

Declare VetGRIDCada4[4] // Propriedade WIDTHS na MiniGUI.
vetGRIDCada4[01]:=100
vetGRIDCada4[02]:=280
vetGRIDCada4[03]:=70
vetGRIDCada4[04]:=90

Sele F21
dbSetOrder(1)
dbGoTop()

Load Window FormTitulos
FormTitulos.Browse_1.Value:=F21->(RecNo())
SendMessage( GetFormToolTipHandle ("FormTitulos"), TTM_SETMAXTIPWIDTH, 0, 250)

FormTitulos.Row:=0
FormTitulos.Col:=0
FormTitulos.HEIGHT:=(GetDeskTopHeight()-45) // Redefine Altura.
FormTitulos.WIDTH:=GetDeskTopWidth() // Redefine Largura.

FormTitulos.Browse_1.HEIGHT:=(FormTitulos.HEIGHT-200)
FormTitulos.Browse_1.WIDTH:= (FormTitulos.WIDTH-30)

FormTitulos.Combo_1.Value:=1 // Seta Pesquisa Por No.Título.
FormTitulos.Text_1.Value:='000001'
FormTitulos.Text_1.SetFocus
FormTitulos.Activate
Sele f64 ; dbCloseArea() ; Sele f37 ; dbCloseArea()
Return Nil

Um forte abraço,

JAIR RANGEL
legnarinfo@hotmail.com
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

HMG Browse/Grid lentos

Mensagem por Toledo »

JAIR RANGEL escreveu:Este projeto já está em operação a muito tempo compilado com versões anteriores e funciona perfeitamente nos Clientes.
Você quer dizer que este mesmo código era compilado com versões anteriores da HMG e não apresentava lentidão? Se for isto, é muito estranho.

No seu código, notei que você usa em uma base de dados o dbSetFilter(), então se no arquivo F21 também existir algum filtro, com certeza o Browse vai ficar lento.

Bom, como você usa DBFCDX, seria interessante ver alguma coisa sobre o OrdScope(), é bem mais rápido que dbSetFilter().

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

HMG Browse/Grid lentos

Mensagem por JAIR RANGEL »

Olá, Toledo!

O dbSetFilter() apenas é usado em uma Tabela muito pequena. Apenas carrego alguns registros para compor um vetor do combobox. Em seguida, desfaço o dbSetFilter().

O Browse() está abrindo o F21, que é a Tabela de Títulos a Pagar. Ele está com 5.693 Kb, e o cdx correspondente com 496 Kb. Não utilizo dbSetFilter() nesta tabela. O mais interessante é que estou abrindo aqui, o F21, na minha máquina local, de desenvolvimento. E, nos testes com a hmg 3.3.0 fica muito lento. Tenho Clientes operando em rede com mais de 40 máquinas, servidor Linux, e a rotina voa, compilada com versões anteriores.

Como disse, estou compilando o projeto a nível de teste na hmg 3.3.0, compilando através da IDE Ansi.

Abraço,

JAIR RANGEL
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

HMG Browse/Grid lentos

Mensagem por JAIR RANGEL »

Olá!

Só para ilustrar as ideias:
Na IDE Ansi, a guia configuração está assim:

incpaths=c:\hmg.3.3.0\include
libpaths=
libs=
gt=
mt=no
instpaths=

Estou compilando pela IDE.
Será que faltando alguma coisa?

Até mais,

JAIR RANGEL
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

HMG Browse/Grid lentos

Mensagem por JAIR RANGEL »

Olá, Pessoal!

Será que ninguém mais teve problemas com lentidão no Browse ou Grid?
Ou mais ninguém está tentando compilar com a versão Hmg 3.3.0?

JAIR RANGEL

:%
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Responder