Amiguinhos,
Não estou conseguindo atualizar o LETODB. Por gentileza, se alguém puder me dar uma força. Segue informações de como estou fazendo:
Na pasta do LETODB estou clicando com o botão direito do mouse e em CVS Obter Módulo..., que está configurada assim:
ABA MÓDULOCVSROOT :pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb checkout -r rel-1-mt letodb
PROTOCOLO: Servidor de Senha
PARÂMETROS DO PROTOCOLO:
SERVIDOR: letodb.cvs.sourceforge.net
PORTA:
PASTA DO REPOSITÓRIO: /cvsroot/letodb checkout -r rel-1-mt letodb
NOME DE USUÁRIO: anonymous
MÓDULO: letodb
ABA REVISÃOMarquei
(x) Escolher Marcador ou Ramo
Nome do ramo ou marcador: rel-1-mt
Recebo como retorno:
Erro, operação do cvs falhou:
E abre uma tela onde me pede senha:
Já digitei de tudo.
Aproveitando a mensagem, quero compartilhar com os amigos que consegui rodar o LETODB em um cliente com a ajuda do Basso e do Leonardo Machado, depois de apanhar bastante. Por falta de conhecimento, deixei escapar um detalhe importante na configuração do servidor e por isso gostaria de compartilhar aqui os detalhes:
-Minha estrutura de rede é composta por um servidor usando Windows Server 2008 Enterprise. Estações Windows´XP e Windows 7.
- Após a instalação do LETODB no servidor, seguindo os passos já apresentados no tópico, não conseguia estabelecer conexão com o servidor. O fato é que é necessário liberar no Firewall a porta :2812 usada pelo LETODB. Para tanto, irei deixar este link aos interessados nos detalhes destes procedimentos de configuração.
http://www.maxsistem.com.br/ajuda/index/secao/id/66/assunto/suporte-tecnico-como-liberar-porta-no-firewall-do-windows-xp-7-e-server-2008Sei que muitos já devem saber disso, mais como esbarrei neste detalhe, penso ser prudente compartilhar com os colegas.
Após várias tentativas sem sucesso, enfim obtive sucesso e fui aos testes. Uma grande motivação, foi a busca de reduzir o tempo de um relatório de vendas que é muito usado em análise no dia-a-dia de trabalho. Este relatório lista todos os itens, de forma acumulada por período. Fiz um teste com este cenário em uma mesma estação.
Vendas de Produtos 01/01/2013 à 30/03/2013 -> DBF/CDX: 480-segundos Terminal Service: 4-segundos LETODB: 86-segundos
Vendas de Produtos 01/01/2012 á 31/12/2013 -> DBF/CDX: 1.746-segundos Terminal Service: 11-segundos LETODB: 303-segundos
LETODB foi muito mais rápido que DBF/CDX nativo, entretanto teve grande diferença para o Terminal Service. Como pode haver algum detalhe relacionado ao código, deixo abaixo o mesmo para apreciação dos colegas.
#include "INKEY.CH"
#include "CLUBE.CH"
FUNCTION REL_VENDPR(aPhis)
local Atel:=savescreen(00,00,24,79)
local tyAp:=type("aPhis")
ABREARQ(,{"AL_SAIDA","AL_CLIEN","AL_VENDE","AL_SAISN","AL_CIDAD","AL_PEDSN","AL_ESTOQ","AL_PEDID","AL_ITPED","AL_ITPSN","AL_GRUPO"})
do whil .t.
rest screen from aw_tel_master
SETBLINK(.F.)
WIN3D("Informe o per¡odo",04,02,06,54,2,"9")
v_dat1=CTOD(" / / ")
v_dat2=CTOD(" / / ")
@ 05,03 say "Per¡odo de = " get v_dat1 pict"@D" VALID( v_dat1 != CTOD(" / / ") )
@ 05,33 say "At‚ = " get v_dat2 pict"@D" VALID( v_dat2 != CTOD(" / / ") )
read
if (LASTKEY()==27)
SETBLINK(.T.)
ABREARQ(,.F.)
RESTSCREEN(00,00,24,79,Atel)
retu
end
a1=time()
sele AL_SAIDA
DBSETORDER(2)
ORDSCOPE(0,DTOS(v_dat1))
ORDSCOPE(1,DTOS(v_dat2))
DBGOTOP()
sele AL_SAISN
DBSETORDER(6)
ORDSCOPE(0,DTOS(v_dat1))
ORDSCOPE(1,DTOS(v_dat2))
DBGOTOP()
sele AL_SAIDA
if EOF()
MENSAGEM("Aten‡Æo, nÆo foi econtrado dados neste per¡odo !!!",3)
loop
end
WIN3D("",10,02,12,46,2,"9"); @ 11,04 say "Gerando relatorio, Aguarde ..............."
vDados:={}
vRuim:={}
sele AL_SAIDA
bQua:=bVal:=0
@ 20,01 say a1
a2=time()
@ 20,15 say a2
do whil !EOF()
if ((AL_SAIDA->tiposa#"01" .and. AL_SAIDA->tiposa#"02") .or. cancel="*")
skip
loop
end
bSeek=ncarga+codped
sele AL_ITPED
DBSEEK(bSeek)
do whil (!EOF() .and. ncarga=AL_SAIDA->ncarga .and. codped=AL_SAIDA->codped)
if condic=" "
IF ASCAN(vDados, {|a| A[1] = AL_ITPED->codite })#0
vVar=ASCAN(vDados, {|a| A[1]=AL_ITPED->codite })
sele AL_ESTOQ
DBSETORDER(1)
DBSEEK(AL_ITPED->codite)
vDados[vVar][3]=(vDados[vVar][3]+AL_ITPED->quanti)
vDados[vVar][5]=(vDados[vVar][5]+(AL_ITPED->quanti*AL_ESTOQ->pesoun))
vDados[vVar][6]=(vDados[vVar][6]+AL_ITPED->pretot)
if AL_ITPED->pretot<=0
AADD(vRuim, AL_SAIDA->ncarga+AL_SAIDA->codped)
end
else
sele AL_ESTOQ
DBSETORDER(1)
DBSEEK(AL_ITPED->codite)
AADD(vDados, {AL_ITPED->codite,AL_ESTOQ->descri,AL_ITPED->quanti,0,(AL_ITPED->quanti*AL_ESTOQ->pesoun),AL_ITPED->pretot,AL_ESTOQ->codgru})
if AL_ITPED->pretot<=0
AADD(vRuim, AL_SAIDA->ncarga+AL_SAIDA->codped)
end
end
bQua=(bQua+AL_ITPED->quanti)
bVal=(bVal+AL_ITPED->pretot)
end
sele AL_ITPED
skip
end
sele AL_SAIDA
skip
end
sele AL_SAISN
do whil !EOF()
if ((AL_SAISN->tiposa#"01" .and. AL_SAISN->tiposa#"02") .or. cancel="*")
skip
loop
end
bSeek=ncarga+codped
sele AL_ITPSN
DBSEEK(bSeek)
do whil (!EOF() .and. ncarga=AL_SAISN->ncarga .and. codped=AL_SAISN->codped)
if condic=" "
IF ASCAN(vDados, {|a| A[1] = AL_ITPSN->codite })#0
vVar=ASCAN(vDados, {|a| A[1]=AL_ITPSN->codite })
sele AL_ESTOQ
DBSETORDER(1)
DBSEEK(AL_ITPSN->codite)
vDados[vVar][4]=(vDados[vVar][4]+AL_ITPSN->quanti)
vDados[vVar][5]=(vDados[vVar][5]+(AL_ITPSN->quanti*AL_ESTOQ->pesoun))
vDados[vVar][6]=(vDados[vVar][6]+AL_ITPSN->pretot)
if AL_ITPSN->pretot<=0
AADD(vRuim, AL_SAISN->ncarga+AL_SAISN->codped)
end
else
sele AL_ESTOQ
DBSETORDER(1)
DBSEEK(AL_ITPSN->codite)
AADD(vDados, {AL_ITPSN->codite,AL_ESTOQ->descri,0,AL_ITPSN->quanti,(AL_ITPSN->quanti*AL_ESTOQ->pesoun),AL_ITPSN->pretot,AL_ESTOQ->codgru})
if AL_ITPSN->pretot<=0
AADD(vRuim, AL_SAISN->ncarga+AL_SAISN->codped)
end
end
bQua=(bQua+AL_ITPSN->quanti)
bVal=(bVal+AL_ITPSN->pretot)
end
sele AL_ITPSN
skip
end
sele AL_SAISN
skip
end
a3=time()
@ 20,30 say time()
inkey(0)
vb_texto=" Periodo de "+DTOC(v_dat1)+" Ate "+DTOC(v_dat2)
Opc_Rel(08,50,22,75,1,Date())
if (trab_nkey==17 .or. trab_nkey==27 .or. trab_nkey==4)
restscreen(00,00,24,79,Atel)
loop
elseif (trab_nkey==1)
trab_impr:='I'
set print on
set devi to print
elseif (trab_nkey==2 .or. trab_nkey==3)
trab_impr:='V'; v_arqt=iif(trab_nkey==2,'.\textos\spool.prn',GERAREL())
set print to &v_arqt
set devi to print
end
v_tot1=0.00
v_tot2=0.00
v_tot3=0.00
v_tot4=0.00
v_tot5=0.00
v_tot6=0.00
v_tot7=0.00
v_tot8=0.00
x_tot1=0.00
x_tot2=0.00
x_tot3=0.00
x_tot4=0.00
x_tot5=0.00
x_tot6=0.00
x_tot7=0.00
l=99
p=1
oDados:=ASORT(vDados,,, {|x,y| x[7]+x[2] < y[7]+y[2]} )
vTotk=0 ; vTotr=0
for i:=1 to LEN(vDados)
vTotk=(vTotk+vDados[i][5])
vTotr=(vTotr+vDados[i][6])
next
vCont=1
cCodGrupo=""
do whil (LEN(oDados)>=vCont .and. inke()!=27)
if l>=58
Cabecalho("RELATORIO DE VENDAS/PRODUTO",130,p,'chr(15)','chr(14)+chr(15)')
@ 08,01 say "|"+vb_texto
@ 08,130 say "|"
@ 09,01 say "+-------------------------------------------+------+---------------------------------------------------------+-------------------+"
@ 10,01 say "| | | A N A L I S E D O Q U A D R O V E N D A S | VALORES (R$) |"
@ 11,01 say "| | +----------+----------+------------+---------------+------+-------------+-----+"
@ 12,01 say "| NOME DO PRODUTO |CODIGO|1a. Quin. |2a. Quin. | TOTAL | TOTAL (kg) | (%) | VENDAS | (%) |"
@ 13,01 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
p++
l=14
end
if VAL(oDados[vCont][1])=0
vCont++
if LEN(oDados)<vCont .or. l>=58
@ l,01 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
@ l+1,1 say "| VALOR TOTAL ====> | |"+TRANS(v_tot1,"999999.999")+"|"+TRANS(v_tot2,"999999.999")+"|"+TRANS(v_tot1+v_tot2,"99999999.999")+"|"+TRANS(v_tot4,"999999999999.999")+"| |"+TRANS(v_tot5,"@E 99,999,999.99")+"| |"
@ l+2,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
@ l+3,1 say "+"+REPL("=",128)+"+"
@ l+4,1 say "+------------------------------------+"
@ l+5,1 say "| Valor dos Cortes => "+TRANS(v_tot6,"@E 999,999.99")+" |"
@ l+6,1 say "| (%) dos Cortes => "+TRANS( (v_tot6/bVal)*100,"99.99")+" |"
@ l+7,1 say "+------------------------------------+"
end
loop
end
if cCodGrupo#oDados[vCont][7]
sele AL_GRUPO
DBSETORDER(1)
DBSEEK(oDados[vCont][7])
@ l,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
if trab_impr="I"
@ l+1,1 say CHR(27)+"E"+"| Grupo : "+oDados[vCont][7]+" - "+AL_GRUPO->descri
@ l+1,132 say "|"+CHR(27)+"F"
else
@ l+1,1 say "| Grupo : "+oDados[vCont][7]+" - "+AL_GRUPO->descri
@ l+1,130 say "|"
end
@ l+2,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
l=l+3
cCodGrupo=oDados[vCont][7]
end
@ l,01 say "|"+LEFT(oDados[vCont][2],43)+"|"+LEFT(oDados[vCont][1],6)+"|"+TRANS(oDados[vCont][3],"999999.999")+"|"+TRANS(oDados[vCont][4],"999999.999")+"|"+TRANS(oDados[vCont][3]+oDados[vCont][4],"99999999.999")+"|"+TRANS(oDados[vCont][5],"99999999999.999")+"| "+;
TRANS( ((oDados[vCont][3]+oDados[vCont][4])/bQua)*100,"99.99")+"|"+TRANS(oDados[vCont][6],"@E 99,999,999.99")+"|"+TRANS( (oDados[vCont][6]/bVal)*100,"99.99")+"|"
v_tot1=(v_tot1+oDados[vCont][3])
v_tot2=(v_tot2+oDados[vCont][4])
v_tot3=(v_tot3+0.00)
v_tot4=(v_tot4+oDados[vCont][5])
v_tot5=(v_tot5+oDados[vCont][6])
v_tot6=(v_tot6+0.00)
x_tot1=(x_tot1+oDados[vCont][3])
x_tot2=(x_tot2+oDados[vCont][4])
x_tot3=(x_tot3+0.00)
x_tot4=(x_tot4+oDados[vCont][5])
x_tot5=(x_tot5+oDados[vCont][6])
x_tot6=(x_tot6+0.00)
vCont++
l++
if LEN(oDados)<vCont .or. IIF(LEN(oDados)>=vCont,cCodGrupo#oDados[vCont][7],)
@ l,01 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
if trab_impr="I"
@ l+1,1 say CHR(27)+"E"+"| TOTAL VENDAS DO GRUPO ===> | |"+TRANS(x_tot1,"999999.999")+"|"+TRANS(x_tot2,"999999.999")+"|"+TRANS(x_tot1+x_tot2,"99999999.999")+"|"+TRANS(x_tot4,"99999999999.999")+"|"+TRANS(((x_tot4/vTotk)*100),"999.99")+"|"+TRANS(x_tot5,"@E 99,999,999.99")+"|"+TRANS(((x_tot5/vTotr)*100),"99.99")+"|"+CHR(27)+"F"
else
@ l+1,1 say "| TOTAL VENDAS DO GRUPO ===> | |"+TRANS(x_tot1,"999999.999")+"|"+TRANS(x_tot2,"999999.999")+"|"+TRANS(x_tot1+x_tot2,"99999999.999")+"|"+TRANS(x_tot4,"99999999999.999")+"|"+TRANS(((x_tot4/vTotk)*100),"999.99")+"|"+TRANS(x_tot5,"@E 99,999,999.99")+"|"+TRANS(((x_tot5/vTotr)*100),"99.99")+"|"
end
@ l+2,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
l=l+3
x_tot1=0.00
x_tot2=0.00
x_tot3=0.00
x_tot4=0.00
x_tot5=0.00
x_tot6=0.00
x_tot7=0.00
end
if LEN(oDados)<vCont
@ l,01 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
@ l+1,1 say "| VALOR TOTAL ====> | |"+TRANS(v_tot1,"999999.999")+"|"+TRANS(v_tot2,"999999.999")+"|"+TRANS(v_tot1+v_tot2,"99999999.999")+"|"+TRANS(v_tot4,"99999999999.999")+"| |"+TRANS(v_tot5,"@E 99,999,999.99")+"| |"
@ l+2,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
@ l+3,1 say "+"+REPL("=",128)+"+"
@ l+4,1 say "+------------------------------------+"
@ l+5,1 say "| Valor dos Cortes => "+TRANS(v_tot6,"@E 999,999.99")+" |"
@ l+6,1 say "| (%) dos Cortes => "+TRANS( (v_tot6/bVal)*100,"99.99")+" |"
@ l+7,1 say "+------------------------------------+"
elseif l>=58
@ l,01 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
@ l+1,1 say "+"+REPL("=",128)+"+"
end
end
if (trab_impr=='V'); set print to ; end
if (trab_impr=='I'); eject; end
set devi to screen
if (trab_nkey==3)
set print to
Rel_Video(subs(v_arqt,10))
Dele file &v_arqt
end
restscreen(00,00,24,79,Atel)
endd
Sds,
Júlio.