Rotina em Rede TS Rápida em Rede Mapeada Lenta? Será Código?
Enviado: 04 Mai 2010 16:34
Amigos e colegas do Fórum eu tenho o codigo abaixo pra pegar do DBF Debitos (Contas Recebidas e a Receber) e fazer uma analise geral por periodo de um determinado cliente mostrando todas a compras deles, em aberto, pagas, canceladas e dando um resumo no rodapé da tela com um Semáforo: Verde para médias de atraso menores q 10 dias Amarelo para 11 a 20 dias e acima disto vermelho.
Bom esta rodando bem, mas alguns clientes reclamam de lentidao da rotina qdo não é executado no Servidor.
Uma solução para tal foi em alguns clientes usarmos TS Ok sem problemas, mas tem clientes q não usam TS devido outros fatores e a rotina ao ser usada em Rede mapeada fica lenta, menos no servidor.
Algum colega poderia analisar o codigo e ver se tem algo q possa melhorado para agilizar o processo na rede...
Código: Selecionar todos
#include "inkey.ch"
#include "proprio.ch"
#include "common.ch"
*******************************************************************************
FUNCTION AnalizFin(cCliente)
* Mostra tela com Analize Financeira do Cliente
********************************************************************************
Local cTela:=SaveScreen(s_geral)
LOCAL nQtdCompG := nQtdCompP := nQtdCompN := nQtdCompC := 0
LOCAL nQtdCompGP := nQtdCompPP := nQtdCompNP := nQtdCompCP := 0
LOCAL nTotCompG := nTotCompP := nTotCompN := nTotCompC := 0
LOCAL nPontual := 0, nMediaPont := 0, nJurosP := 0
LOCAL aCampo:={}, aMask:={}, aTitulo:={}
LOCAL cTitulo, aCoordenadas:={}, aMensagem:={}
LOCAL area:=SELECT(), cOldColor := SetColor()
SETKEY( K_ALT_C, NIL )
SHOWTIME()
IIf(cCliente=NIL,cCliente:="", cCliente)
// coloquei pra definir se volta com a area ou nÆo
If Select("debitos")!=0 // quer dizer q veio com area debitos e Registro
nVeio := 1 // Veio com area debitos
nRegVeio := debitos->(RecNo())
Else
nVeio := 0
nRegVeio := 0
Endif
WHILE LASTKEY() != K_ESC
cls
tot_gas:=0
tot_gasGeral:=0
SETCOLOR(vcr)
desccli := 0
cNomeCli:=""
AbreParam()
IF SELECT("Clientes")==0
Abrir("Clientes","Clientes")
ENDIF
IIf(cCliente="", cCliente := SPACE(8), cCliente)
@ 05,03 SAY "Cliente.....:"
@ 05,17 SAY SPACE(08) COLOR "W+/R"
@ 05,17 GET cCliente PICTURE "@!" WHEN Mensag("Informe o c¢digo do cliente, ENTER procura por Nome")
READ
IF LASTKEY()==K_ESC
IF SELECT("debitos")!=0 .and. nVeio=0
debitos->( DbCloseArea() )
ENDIF
DBSELECTAR(area)
SetColor(cOldColor)
RestScreen(s_geral, cTela)
EXIT
ENDIF
IF EMPTY(cCliente)
cCliente:=ALLTRIM(cCliente)
Mensag("Informe o c¢digo do cliente, ESC procura por CPF")
IF !AchaCli(cCliente, "Clientes",{"Nome","Codigo"},;
{"Nome","C¢digo"},;
{"@!","99999999"},2,,,"Clientes",;
"[ESC] Procura por TELEFONE, CPF ou CNPJ" )
cCliente:=""
ELSE
cCliente:=Clientes->Codigo
ENDIF
ENDIF
* Procura por telefone
IF EMPTY(cCliente)
cCliente:=SPACE(11)
@ 05,03 SAY "CPF.........:"
@ 05,25 SAY SPACE(35)
@ 05,17 SAY SPACE(13) COLOR "W+/R"
@ 05,17 GET cCliente PICTURE "@R 999.999.999-99" VALID;
Validacao( {|| Cpf(cCliente) },"N£mero do CPF inv lido") WHEN;
Mensag("Informe o n£mero do CPF, ENTER procura por CNPJ")
READ
IF LASTKEY()==K_ESC
LOOP
ENDIF
IF !EMPTY(cCliente)
Clientes->( ORDSETFOCUS(3) )
IF Clientes->( !DBSEEK(cCliente) )
Mensagem("N£mero do CPF n„o encontrado!")
Clientes->( ORDSETFOCUS(1) )
LOOP
ENDIF
cCliente:=Clientes->codigo
ENDIF
ENDIF
IF EMPTY(cCliente)
cCliente:=SPACE(15)
@ 05,03 SAY "CNPJ.........:"
@ 05,25 SAY SPACE(35)
@ 05,17 SAY SPACE(15) COLOR "W+/R"
@ 05,17 GET cCliente PICTURE "@R 99.999.999/9999-99" VALID;
Validacao( {|| CNPJ(cCliente) },"N£mero do CNPJ inv lido") WHEN;
Mensag("Informe o n£mero do CNPJ, ENTER procura por nome")
READ
IF LASTKEY()==K_ESC
LOOP
ENDIF
IF !EMPTY(cCliente)
Clientes->( ORDSETFOCUS(4) )
IF Clientes->( !DBSEEK(cCliente) )
Mensagem("N£mero do CNPJ n„o encontrado!")
Clientes->( ORDSETFOCUS(1) )
LOOP
ENDIF
cCliente:=Clientes->codigo
ENDIF
ENDIF
Clientes->( ORDSETFOCUS(1) )
IF EMPTY(cCliente)
cCliente:=""
IF !AchaCli(cCliente, "Clientes",{"Nome","Codigo"},;
{"Nome","C¢digo"},;
{"@!","99999999"},2,,,"Clientes" )
DBCLOSEALL()
LOOP
ENDIF
cCliente:=Clientes->Codigo
ELSE
cCliente:=ZeraCodigo(cCliente)
IF Clientes->( !DBSEEK(cCliente) )
Mensagem("C¢digo n„o cadastrado!")
DBCLOSEALL()
LOOP
ENDIF
ENDIF
cCliente:=Clientes->Codigo
cExterno:=Clientes->Externo
@ 05,17 SAY cCliente+"-"+Clientes->Nome
cNomeCli := Clientes->Nome
IF !SenhaCli(Clientes->Codigo)
DBCLOSEALL()
LOOP
ENDIF
IF SELECT("debitos")==0
Abrir("debitos","debitos")
ENDIF
cls
Set Century On
debitos->( DBGOTOP() )
debitos->( ORDSETFOCUS(4) )
DO WHILE .T.
debitos->( DBGOTOP() )
WDataIni:= CtoD("01/01/1990")
WDataFim:=Date()
cTitulo:="An lise das compras do cliente "+ALLTRIM(SUBSTR(Clientes->Nome,1,30))
@0,0 Say PADC(cTitulo,80) color("W+/R")
@ 01,01 Say "Entre com a Data Inicial: "
@ 01,27 Get WDataIni Pict "@D" Valid !Empty(WDataIni)
@ 01,41 Say "Entre com a Data Final..: "
@ 01,67 Get WDataFim Pict "@D" Valid (WDataIni<=WDataFim)
Read
If Lastkey()=27
Exit
Endif
*Zerando valores Variaveis de Calculo
nQtdCompG := nQtdCompP := nQtdCompN := nQtdCompC := 0
nQtdCompGP := nQtdCompPP := nQtdCompNP := nQtdCompCP := 0
nTotCompG := nTotCompP := nTotCompN := nTotCompC := 0
nPontual := nMediaPont := nJurosP := 0
// Vou colocar aki o bloco de calculos para ver se atualiza conforme a data
debitos->( ORDSETFOCUS(4) )
debitos->( DBGOTOP() )
While debitos->( !Eof() )
Mensag("Analizando o Cliente","W+*/R")
If debitos->clCodi==cCliente .AND. debitos->cldata>=WDataIni ;
.And. debitos->ClData<=WDataFim
cVendaDeb := debitos->ClTick ; cCondDeb := debitos->ClPago
nValorDeb := debitos->ClPreco ; dDataDeb := debitos->ClData
dVencDeb := debitos->ClData + debitos->Tolerancia
dPagtoDeb := debitos->DT_Pagto
nVlrQPago := IIf(debitos->CreditoAtu>0, debitos->CreditoAtu, debitos->Vl_Pago)
If debitos->ClPago="S"
nQtdCompPP++
nTotCompP += nVlrQPago
nPontual += (dPagtoDeb - dVencDeb)
Endif
If debitos->ClPago="C"
nQtdCompCP++
nTotCompC += nValorDeb
Endif
If debitos->ClPago=" "
nQtdCompNP++
nTotCompN += nValorDeb
If (Date() - dVencDeb) > 0
nPontual += (Date() - dVencDeb)
Endif
Endif
nQtdCompGP++
Iif(right(Alltrim(debitos->PrDesc),6)="Rest.)", ,;
nTotCompG += nValorDeb)
debitos->( DBSKIP() )
If !debitos->ClTick = cVendaDeb
If cCondDeb=="S"
nQtdCompP++
Endif
If cCondDeb=="C"
nQtdCompC++
Endif
If cCondDeb==" "
nQtdCompN++
Endif
nQtdCompG++
nMediaPont := If((nQtdCompGP-nQtdCompCP)=0, 0, nPontual / (nQtdCompGP-nQtdCompCP))
Endif
Else
debitos->( DBSKIP() )
Endif
ENDDO
DbSelectAr("debitos")
debitos->(DbGoTop())
@ 03,12 SAY "Criando Arquivo Temporario..."
Set Softseek On
Seek cCliente + Dtos(WDataIni)
Set Softseek Off
ArqTemp() // cria arquivos temporarios
Index on debitos->clcodi + Dtos(debitos->cldata) + debitos->clTick To &Arq_Temp7 ;
WHILE (debitos->ClCodi=cCliente .and. debitos->cldata>=WDataIni .And. debitos->ClData<=WDataFim)
Set Index To &Arq_Temp7 //Ind_tmp
GO TOP
Janela(19,0,24,16,.t.)
Janela(19,18,24,36,.t.)
Janela(19,38,24,54,.t.)
Janela(19,56,24,79,.t.)
@19,01 say " C O M P R A S "
@19,19 say " P A R C E L A S "
@19,39 say " V A L O R E S "
@19,58 say "I N F O R M A € å E S"
nJurosP := (nTotCompP-(nTotCompG-(nTotCompC+nTotCompN)))
@20,01 say "Qtd. GERAL. " + Transform(nQtdCompG,"999")
@20,20 say "Qtd. GERAL. " + Transform(nQtdCompGP,"999")
@20,40 say "R$ " + Transform(nTotCompG,"@E 999,999.99")
@21,01 say "Qtd. Pagas. " + Transform(nQtdCompP,"999")
@21,20 say "Qtd. Pagas. " + Transform(nQtdCompPP,"999")
@21,40 say "R$ " + Transform(nTotCompP-nJurosP,"@E 999,999.99")
@22,01 say "Qtd. Aberto " + Transform(nQtdCompN,"999")
@22,20 say "Qtd. Aberto " + Transform(nQtdCompNP,"999")
@22,40 say "R$ " + Transform(nTotCompN,"@E 999,999.99")
@23,01 say "Qtd. Cancel " + Transform(nQtdCompC,"999")
@23,20 say "Qtd. Canc.. " + Transform(nQtdCompCP,"999")
@23,40 say "R$ " + Transform(nTotCompC,"@E 999,999.99")
@20,58 say "M‚dia Atras: "
@20,72 say Transform(nMediaPont, "@E 9999.99") color(IIf(nMediaPont<10,"w+/G", IIf(nMediaPont<20,"N*/GR","w+/r")))
@21,58 say "Juros Pagos: " + Transform(nJurosP, "@E 9999.99")
@22,58 say "Receb.+ Jur: " + Transform(nTotCompP,"@E 9999.99")
aCampo := { "debitos->ClTick", "debitos->clData", "(debitos->cldata+debitos->Tolerancia)", "debitos->ClPreco", "debitos->dt_pagto", ;
"IIf(debitos->ClPago='S',debitos->DT_Pagto-(debitos->ClData+debitos->Tolerancia), IIF(debitos->ClPago=' ', IIF( (Date()-(debitos->ClData+debitos->Tolerancia)>0) , (Date()-(debitos->ClData+debitos->Tolerancia)),0),0))", ;
"IIf(debitos->CreditoAtu=0,debitos->Vl_Pago,debitos->CreditoAtu)","debitos->ClPago", "LEFT(debitos->prdesc,30)", "debitos->retirado"}
aMask := { "999999", " / / ", " / / ", "@E 999,999.99", " / / ", "9999", "@E 999,999.99",;
"!", "@!", "@!" }
aTitulo:= {"Nr.Vend", "Data", "Vencimento", "Valor", "Pagamento", "Atraso", "Valor Pago",;
"Status", "Descri‡„o", "Quem retirou"}
KEYBOARD CHR(30)
Janela(02,00,18,79,.t.)
DBEDIT(03,01,17,78,aCampo,,aMask,aTitulo,CHR(196),CHR(179),"")
DbSelectAr("debitos") // coloquei pq dava erro clcodi, mas talvez nao precise
Set Index To &Arq_Temp7 //debitos
ENDDO
//Endif
Enddo
IF SELECT("debitos")!=0 .and. nVeio=0
debitos->( DbCloseArea() )
ENDIF
DBSELECTAR(area)
If UPPER(Alias(Area))="debitos" .and. nVeio=1
debitos->(DbGotop(nRegVeio))
Endif
SetColor(cOldColor)
RestScreen(s_geral,cTela)
SETKEY( K_ALT_C, {|| AnalizFin() } )
Ferase(Arq_temp7+".cdx") // apaga o indice temporario
RETU:)Pos