Velocidade com dbedit filtrado no Harbour
Enviado: 08 Dez 2009 08:57
Estou com um grande problema, pois no meu sistema compilado em harbour, os DBedits que são filtrados, alguns usam filtros de data + filial + cancelado <> 'S' eles ficam extremamente lentos.
A lentidão ocorre quando o usuário pressiona as setas pra BAIXO ou pra CIMA, ou PAGEDOWN ou PAGEUP após o limite do filtro, daí o sistema fica "pensando" e demora pra caramba. Isto ocorreu também quando tentei migrar meu sistema de CLIPPER 53B/cdx para CLIPER 5.2/SIXCDX por isso que voltei, pois a reclamação dos usuários que usam o sistema foi muita.
Alguns podem me dizer para usar SET SCOPE, mas este comando pelo que sei abrange somente uma condição do filtro.
A impressão que tenho é que o Harbour fica procurando outros registros fora do filtro, por isso a lentidão quando tenta movimentar com setas ou teclas de paginação.
Gostaria de saber se existe a possibilidade de aumentar esta velocidade, e deixar equivalente ao programa compilado em CLIPPER 5.3b / CDX.
Estou usando harbour 2.0 com CDX compilando via linha de comando.
Abaixo está um exemplo do código com o dbedit lento nas extremidades:
A lentidão ocorre quando o usuário pressiona as setas pra BAIXO ou pra CIMA, ou PAGEDOWN ou PAGEUP após o limite do filtro, daí o sistema fica "pensando" e demora pra caramba. Isto ocorreu também quando tentei migrar meu sistema de CLIPPER 53B/cdx para CLIPER 5.2/SIXCDX por isso que voltei, pois a reclamação dos usuários que usam o sistema foi muita.
Alguns podem me dizer para usar SET SCOPE, mas este comando pelo que sei abrange somente uma condição do filtro.
A impressão que tenho é que o Harbour fica procurando outros registros fora do filtro, por isso a lentidão quando tenta movimentar com setas ou teclas de paginação.
Gostaria de saber se existe a possibilidade de aumentar esta velocidade, e deixar equivalente ao programa compilado em CLIPPER 5.3b / CDX.
Estou usando harbour 2.0 com CDX compilando via linha de comando.
Abaixo está um exemplo do código com o dbedit lento nas extremidades:
Código: Selecionar todos
FUNCTION FISCALC4()
// 04/12/2003
if PARAMETRO->numercli!=8 // DIFRENTE DE rodofly
mCAMPO1='Outr/MObra'
mCAMPO2='Tarifa '
else
mCAMPO1='Tx.Entrega'
mCAMPO2='Descarg'
endif
mECODIGO=SPACE(18)
mDATINI:=mDATFIM:=CTOD(SPACE(8))
mECODIGO=SPACE(18)
DO WHILE .T.
SELE NOTA
SET ORDER TO 2
GO TOP
t='Consulta de Nota Fiscal Especial'
r=''
a='Consulta'
CLEARTELA2(t,r,a)
private v1[05]
v1[1]:= "NOTA->CONHEC"
v1[2]:= "NOTA->CDATA"
v1[3]:= "NOTA->CNF1"
v1[4]:= "NOTA->CNF2"
v1[5]:= "NOTA->CNF3"
private v2[05]
v2[1]:= "9999999"
v2[2]:= "99/99/99"
v2[3]:= "@!"
v2[4]:= "@!"
v2[5]:= "@!"
private v3[05]
v3[1]:= "Conhec"
v3[2]:= "Data"
v3[3]:= "Nota Fiscal 1"
v3[4]:= "Nota Fiscal 2"
v3[5]:= "Nota Fiscal 3"
M1:='[F2] Consulta [F5] Filtra p/ remetente [F6] Filra p/ Veiculo '
M2:='[F7] Procura P/ NF '
mOLDCOLOR:=SETCOLOR()
SET COLOR TO
@ 23,0 SAY SPACE(80)
@ 24,0 SAY SPACE(80)
@ 23,40-int(len(trim(m1))/2) say m1
@ 24,40-int(len(trim(m2))/2) say m2
SETCOLOR(mCORSEGUNDA)
@ 03,0 CLEAR TO 18,79
@ 03,0 TO 18,79 DOUB
dbedit(04,01,17,78,V1,'DBFISC3',v2,v3)
EXIT
ENDDO
SELE NOTA2
set relation to
SET FILTER TO
SET ORDER TO 1
GO TOP
RETURN
* ===================================================================== = *
FUNCTION DBFISC4
PARAmETERS mODO, pVETOR
mTELAMOV1 = SAVESCREEN(04,01,22,79)
// Mostra registro na tela -----------------------------------------------
SETCOLOR(mCORSEGUNDA)
@ 19,0 CLEAR TO 22,79
mCONHEC:=NOTA->CONHEC
mCCLIENTE1:=NOTA->CCLIENTE1
mCCLIENTE2:=NOTA->CCLIENTE2
SELE EMPRESA
SET ORDER TO 1
SEEK mCCLIENTE1
IF EOF()
mREMETENTE:=' '
ELSE
mREMETENTE:=EMPRESA->ENOME
ENDIF
SEEK mCCLIENTE2
IF EOF()
mDESTINATARIO:=' '
ELSE
mDESTINATARIO:=EMPRESA->ENOME
ENDIF
@ 19,12 SAY 'Conhecimento -> '+NOTA->CONHEC
@ 20,12 SAY 'Remetente -> '+mREMETENTE
@ 21,12 SAY 'Destinatario -> '+mDESTINATARIO
SETCOLOR(mCORPRIMEIRA)
// ---------------------------------------------------------
IF LASTKEY () = -1 // Consulta
SAVE SCREEN TO mTELA11
CLEARTELA2(t,R,A)
sele nota2
mFILTRO=DBFILTER()
SELE NOTA
NOTVARIA()
NOTGETA()
SELE EMPRESA
SEEK mCCLIENTE1
IF !EOF()
@ 4,2 SAY LEFT(EMPRESA->ENOME,30)
ENDIF
SELE EMPRESA
SEEK mCCLIENTE2
IF !EOF()
@ 4,44 SAY LEFT(EMPRESA->ENOME,30)
ENDIF
SELE EMPRESA
SEEK mCCLIENTE3
IF !EOF()
@ 7,2 SAY LEFT(EMPRESA->ENOME,30)
ENDIF
SELE EMPRESA
SEEK mCCLIENTE4
IF !EOF()
@ 7,44 SAY LEFT(EMPRESA->ENOME,30)
ENDIF
@ 23,0 SAY 'Baixado dia '+dtoc(nota->canhoto)
SELE NOTA
if nota->cancelado='S'
@ 23,25 SAY 'CANCELADO'
PARA()
ENDIF
if !empty(fatura)
@ 23,30 say 'Fatura : ' +nota->fatura
endif
@ 23,60 say 'Hora.. '+nota->hora
PARA()
Mconhec=nota->conhec
sele nota2
SET FILTER TO CONHEC=mCONHEC
GO TOP
set ORDER to 2
declare v1[5]
v1[1] = "NOTA2"
v1[2] = "DATA2"
V1[3] = "VALOR2"
V1[4] = "QTD2"
v1[5] = "PESO2"
declare v2[5]
v2[1] = "@!"
v2[2] = "99/99/99"
V2[3] = "99,999,999.99"
V2[4] = "99999"
V2[5] = "99999.999"
declare v3[5]
v3[1] = "Nota"
v3[2] = "Data"
V3[3] = "Valor"
V3[4] = "Qtd"
V3[5] = "Peso"
show('1 Inc 2 Alt 3 Exc [ESC] Finaliza')
SAVE SCREEN TO mTELANOTA
SETCOLOR(mCORSEGUNDA)
@ 11,0 CLEAR TO 22,79
@ 11,0 TO 22,79 DOUB
@ 21,05 GET mCNF1
@ 21,30 GET mCNF2
@ 21,55 GET mCNF3
CLEAR GETS
dbedit(12,02,20,78,V1,.T.,v2,v3)
SAVE SCREEN TO mTELA10
SETCOLOR(mCORSEGUNDA)
if parametro->recibocon='S' // se imprimir contrato de terceiro no conhecimento
Mirfonte=0
GETFRTA()
SELE CONTRAT
SEEK mCCODIGO
IF !EOF()
@ 10,23 SAY LEFT(CONTRAT->NOME,30)
ENDIF
SELE NOTA
SETCOLOR(mCORPRIMEIRA)
PARA()
RESTORE SCREEN FROM MTELA10
ENDIF
IF PARAMETRO->NUMERCLI=11 // Rodoback
mTELARODO:=SAVESCREEN(10,20,16,60)
SETCOLOR(mCORSEGUNDA)
@ 10,20 clear to 16,60
@ 10,20 to 17,60 doub
@ 11,22 SAY 'Expedido..... ' GET mEXPEDIDO PICT '@!'
@ 12,22 SAY 'Destino...... ' get mXDESTINO PICT '@S20'
@ 13,22 SAY 'Comprovante.. ' get mCOMPROVANT PICT '@S20'
@ 14,22 SAY 'Nota Fiscal.. ' get mNFISCAL PICT '@S20'
@ 15,22 SAY 'N§ de cheques ' get mCHEQUES
CLEAR GETS
SETCOLOR(mCORPRIMEIRA)
ENDIF
IF PARAMETRO->NUMERCLI=10 // RNF
mTELARODO:=SAVESCREEN(10,20,14,60)
SETCOLOR(mCORSEGUNDA)
@ 10,20 clear to 14,60
@ 10,20 to 14,60 doub
@ 11,22 SAY 'Cia Seguradora' GET mCIASEG PICT '@S20'
@ 12,22 SAY 'Ap¢lice numero' get mAPOLICE PICT '@!'
@ 13,22 SAY 'Vr. p/ seguro ' get mVRSEGURO PICT '9,999,999.99'
CLEAR GETS
SETCOLOR(mCORPRIMEIRA)
ENDIF
sele nota2
SET FILTER TO &mFILTRO
para()
RESTORE SCREEN FROM mTELA11
RETURN (1)
ENDIF
if lastkey() = - 4 // Filtra
mCOLOROLD := setcolor()
setcolor('W/N')
@ 23,0 say space(80)
mDATINI:=mDATFIM:=DATE()
mECODIGO:=SPACE(18)
@ 23,0 say 'Inicial' get mDATINI valid mDATINI != ctod(space(08))
@ 23,20 say 'Final' get mDATFIM valid mDATFIM != ctod(space(08))
@ 23,50 SAY 'Remetente ' get mECODIGO PICT '99.999.999/9999-99' VALID VERECODIGO(@mECODIGO,3,35)
read
setcolor(mCOLOROLD)
if lastkey() = 27
if confirma('Desfiltra os lan‡amentos ? ')
SETCOLOR(mCORSEGUNDA)
@ 03,0 CLEAR TO 18,79
@ 03,0 TO 18,79 DOUB
mCLIFILTRO=SPACE(18)
SELE NOTA2
SET FILTER TO
endif
return (2)
endif
show('Aguarde, filtrando registros . . . ')
SELE EMPRESA
SEEK mECODIGO
SELE NOTA2
SETCOLOR('WB/G+')
@ 03,0 SAY 'Aguarde, filtrando registros . . .'
mCLIFILTRO=mECODIGO
set filter to DATA2 >= mDATINI .and. DATA2 <= mDATFIM .AND. NOTA->CCLIENTE1=MECODIGO
GO TOP
@ 03,0 say 'Cliente '+LEFT(empresa->enome,39)+' De '+dtoc(Mdatini)+' ate '+dtoc(Mdatfim)
setcolor(Mcorsegunda)
return (2)
endif
if lastkey() = -5 // Filtra 2
mCOLOROLD := setcolor()
setcolor('W/N')
@ 23,0 say space(80)
mDATINI:=mDATFIM:=DATE()
mVCODIGO=SPACE(8)
@ 23,0 say 'Inicial' get mDATINI valid mDATINI != ctod(space(08))
@ 23,20 say 'Final' get mDATFIM valid mDATFIM != ctod(space(08))
@ 23,50 SAY 'Placa ' get mVCODIGO PICT 'AAA-9999'
read
setcolor(mCOLOROLD)
if lastkey() = 27
if confirma('Desfiltra os lan‡amentos ? ')
SETCOLOR(mCORSEGUNDA)
@ 03,0 CLEAR TO 18,79
@ 03,0 TO 18,79 DOUB
mCLIFILTRO=SPACE(18)
SELE NOTA2
SET FILTER TO
endif
return (2)
endif
SELE NOTA2
@ 03,0 say 'Placa '+LEFT(VEICULO->MOTORISTA,40)+' Inicio '+dtoc(Mdatini)+' Final '+dtoc(Mdatfim) COLOR ('WB/G+')
setcolor(Mcorsegunda)
SHOW('Aguarde, filtrando registros . . .')
set filter to DATA2 >= mDATINI .and. DATA2 <= mDATFIM .AND. NOTA->VCODIGO=mVCODIGO
GO TOP
show(' ')
return (2)
endif
if lastkey() = - 6 // F7 PROCURA
DO WHILE .T.
mNOTA2=SPACE(10)
@ 23,0 say space(80)
@ 23,0 say 'Consultar nota fiscal n£mero [Enter para voltar]' get mNOTA2 PICT '9999999999' VALID MOSTRAZERO(@mNOTA2,0)
read
if val(mnota2)=0
exit
ENDIF
SELE NOTA2
SET ORDER TO 2
SEEK mNOTA2
IF EOF()
SET FILTER TO
ALERT('Nota fiscal nÆo foi encontrada !!!')
SELE NOTA2
LOOP
ENDIF
EXIT
ENDDO
return (2)
endif
// monta tela de informacoes
M1:='[F2] Consulta [F5] Filtra p/ remetente [F6] Filra p/ Veiculo '
M2:='[F7] Procura P/ NF '
mOLDCOLOR:=SETCOLOR()
SET COLOR TO
@ 23,0 SAY SPACE(80)
@ 24,0 SAY SPACE(80)
@ 23,40-int(len(trim(m1))/2) say m1
@ 24,40-int(len(trim(m2))/2) say m2
SETCOLOR(mCORSEGUNDA)
IF LASTKEY()=27
RETURN (0)
ENDIF
RETURN (1)
RETURN .T.