Página 1 de 1
Por Favor, preciso de ajuda urgente...
Enviado: 02 Fev 2005 21:57
por JuniorVaz
Estou fazendo um relatorio da conta dos representantes do meu sistema, e criei o seguinte filtro:
sele saldo
index on datamov to indtemp for codreP=xcodrep .and. datamov>=xdataini .and. datamov<=xdatafim
Que seria para filtrar entre todos, apenas os que contiverem XCODREP no campo CODREP, e destes que sobrarem, pra ele filtrar o campo DATAMOV, os que estiverem entre as datas XDATAINI e XDATAFIM, criei o filtro citado acima, mas que não está funcionando muito bem, parece q ao invés de ele filtrar apenas os que tiverem XCODREP, ele seleciona os que não tem o XCODREP digitado pelo cliente, e a respeito da data, ele não está filtrando o periodo, ele apenas filtra os que tem XDATAFIM=DATAMOV, ta meio confuso, gostaria que alguem desse uma analizada pra mim, o nome do *.dbf é SALDO.DBF. Obrigado
novo
Enviado: 02 Fev 2005 23:14
por JuniorVaz
Agora fiz um filtro basico, que é:
sele saldo
set filter to codrep=xcod
go top
... comandos da impressão...
dai ele agora esta filtrando apenas o reprensentante indicado no campo XCOD, mas agora preciso saber como faço pra ele filtrar também o intervalo de datas, que é como citei acima: XDATAINI, XDATAFIM... Obrigado...
Enviado: 02 Fev 2005 23:38
por Irineu
Coloque assim pra ver o que acontece.
sele saldo
index on datamov to indtemp for (codreP=xcodrep .and. datamov>=xdataini .and. datamov<=xdatafim)
Enviado: 03 Fev 2005 01:20
por Clipper
Prezado Junior
Já lhe falei que não tem como dar errado, o problema deve ser outro, eu acho que você deve estar com SET UNIQUE ON, que está fazendo com que apareçam apenas alguns registros. Mas como lhe disse anteriormente é melhor você fazer o filtro com o COPY TO porque você pode fazer mesmo com os aquivos no modo SHARED o que não acontece com o INDEX.
Até logo.
Marcelo
Aqui está o codigo do meu prg
Enviado: 03 Fev 2005 19:04
por JuniorVaz
Estou postando aqui para quem poder analizar e me dar uma sugestão... Obrigado
clear
cbc()
set epoch to 2005
set date brit
set century off
SET EXCLUSIVE OFF
SET CURS ON
SETCOLOR(cor2)
private xcod,xdataini,xdatafim
cx(1,0,20,79,"EXTRATO COMISSAO REPRESENTANTES",80)
do telacom
XDATAINI:= XDATAFIM:= CTOD(SPACE( 8 ))
sele 0
use saldo
select 0
use cadREP inde cadREP alias REP
set index to cadREP
SETCOLOR(COR2)
sele rep
xcod=codrep
stor 0 to xcod
@ 06,22 get xcod pict "999999"
read
ddr=savescreen(0,0,24,79)
seek xcod
xnome=nome
@ 06,31 say alltrim(xnome,1,35)
@ 07,22 get xdataini pict "99/99/99"
@ 08,22 get xdatafim pict "99/99/99"
read
if lastkey()=27
return
endif
Cc=" "
@ 24,4 say "Deseja Continuar(S/N)?" get cc pict '!' valid cc $ 'SN'
read
If lastkey()=27
do limpacom
endif
if cc="N"
do limpacom
else
sele saldo
copy to tempdbf for codrep=xcod .and. datamov>=xdataini .and. datamov<=xdatafim
use tempdbf new
do impcom
endif
****tela
procedure telacom()
SETCOLOR('N/W')
*/ 0....x....1....x....2....x....3....x....4....x....5....x....6....x....7....x....8/*
@ 06,02 say "Cod. Representante: "
@ 07,02 say "Data Inicial......: "
@ 08,02 say "Data Final........: "
return
**********
PROCEDURE LIMPACOM
stor (' / / ') to xdataini,xdatafim
stor 0 to xcod
restscreen(0,0,24,79,ddr)
return
*********
procedure impcom
LI=00
set device to print
//@ LI,00 say chr(14)+"E.C.S.Ind. Com. de Calcados Ltda."
//LI=LI+1
//@ LI,15 say "RELATORIO DE COMISSAO POR REPRESENTANTE"
//@ PROW()+1,00 SAY "--------------------------------------------------------------------------------"
//LI=LI+1
//@ LI,00 SAY "REPRESENTANTE: "+XNOME
//LI=LI+1
//@ LI,00 SAY "--------------------------------------------------------------------------------"
//LI=LI+1
//@ LI,00 SAY "DATA MOVIMENTO TITULO VENCIMENTO VALOR SALDO "
//@ LI,00 SAY "DATA MOVIMENTO TITULO VENCIMENTO VALOR SALDO "
//@ LI,00 SAY "DATA MOVIMENTO TITULO VENCIMENTO VALOR SALDO "
go top
do while .not. eof()
SELE saldo
xcod=codrep
xmovimento=movimento
xdatamov=datamov
xvencimento=vencimento
xnota=nota
xvalor=valor
xsaldo=saldo
LI=LI+1
@ LI,00 SAY XDATAMOV
@ LI,10 SAY XMOVIMENTO
@ LI,31 SAY XNOTA
@ LI,44 SAY XVENCIMENTO
@ LI,60 SAY XVALOR
@ LI,71 SAY XSALDO
skip
ENDDO
SELE REP
SEEK XCOD
XSALDOATUAL=SALDO
xdata=date()
li=li+1
@ li,00 say replicate('-',79)
li=li+1
@ li,00 say "Saldo do Dia"
@ li,14 say xdata
@ li,30 say "Valor: R$"
@ li,40 say xsaldoatual
RETURN
Enviado: 03 Fev 2005 21:52
por Clipper
Junior
Tira esse SELE SALDO depois do DO WHILE .NOT. EOF(), lembre-se que o BD que será usado não é o SALDO.DBF e sim o TEMPDBF.DBF.
Até logo.
Marcelo
Tentei
Enviado: 04 Fev 2005 11:18
por JuniorVaz
Tirai o sele saldo depois do do while, mas não adiantou tb... alguma outra ideia?
Enviado: 04 Fev 2005 11:38
por Daniel
Mude aqui tambem
Código: Selecionar todos
sele rep
Set Order To 1
While .t.
xcod:= 0
@ 06,22 get xcod pict "999999"
read
ddr:= savescreen()
seek xcod
If Eof()
@ 24, 10 Say Codigo nâo encontrado"
Inkey(5)
Loop
Elseif LastKey() == 27
Return .t.
Else
Exit
EndIf
End
xnome:= nome
Não deu
Enviado: 04 Fev 2005 12:47
por JuniorVaz
Tentei fazer isso que o colega falou, mas tambem não deu resultado... :/ Bah, ta dificil mesmo isto...
Enviado: 04 Fev 2005 13:07
por Dudu_XBase
Código: Selecionar todos
clear
cbc()
set epoch to 2005
set date brit
set century on
SET EXCLUSIVE OFF
SET CURS ON
SETCOLOR(cor2)
private xcod,xdataini,xdatafim
cx(1,0,20,79,"EXTRATO COMISSAO REPRESENTANTES",80)
do telacom
XDATAINI:= XDATAFIM:= CTOD(SPACE( 8 ))
sele 0
use saldo
select 0
use cadREP inde cadREP alias REP
set index to cadREP
SETCOLOR(COR2)
sele rep
xcod=codrep
stor 0 to xcod
@ 06,22 get xcod pict "999999"
read
ddr=savescreen(0,0,24,79)
seek xcod
xnome=nome
@ 06,31 say alltrim(xnome,1,35)
@ 07,22 get xdataini pict "99/99/9999"
@ 08,22 get xdatafim pict "99/99/9999"
read
if lastkey()=27
return
endif
Cc=" "
@ 24,4 say "Deseja Continuar(S/N)?" get cc pict '!' valid cc $ 'SN'
read
If lastkey()=27
do limpacom
endif
if cc="N"
do limpacom
else
sele saldo
index on strzero(codrep,6)+dtos(DATAMOV) to saldo1
copy stru to tempdbf
use tempdbf alias temp new
sele saldo
dbseek(strzero(xCod,6)+dtos(xdataini),.t.)
while str(codrep,6)=str(xcod,6) .and. !eof()
if dtos(DATAMOV) < dtos(xdataini)
dbskip()
loop
endif
if dtos(DATAMOV) > dtos(xDataFim)
exit
endif
temp->(dbappend())
for i = 1 to saldo->(fcount())
temp->(fieldput(i,saldo->(fieldget(i))))
next
dbskip()
enddo
// Se existir dados a serem impressos
if temp->(lastrec()) > 0
do impcom
else
tone(2000,2)
tone(1000,3)
@ 24,4 say "Nao existem movimentos para esse representante..."
inkey(0)
return
endif
endif
****tela
procedure telacom()
SETCOLOR('N/W')
*/ 0....x....1....x....2....x....3....x....4....x....5....x....6....x....7....x....8/*
@ 06,02 say "Cod. Representante: "
@ 07,02 say "Data Inicial......: "
@ 08,02 say "Data Final........: "
return
**********
PROCEDURE LIMPACOM
stor (' / / ') to xdataini,xdatafim
stor 0 to xcod
restscreen(0,0,24,79,ddr)
return
*********
procedure impcom
LI=00
set device to print
//@ LI,00 say chr(14)+"E.C.S.Ind. Com. de Calcados Ltda."
//LI=LI+1
//@ LI,15 say "RELATORIO DE COMISSAO POR REPRESENTANTE"
//@ PROW()+1,00 SAY "--------------------------------------------------------------------------------"
//LI=LI+1
//@ LI,00 SAY "REPRESENTANTE: "+XNOME
//LI=LI+1
//@ LI,00 SAY "--------------------------------------------------------------------------------"
//LI=LI+1
//@ LI,00 SAY "DATA MOVIMENTO TITULO VENCIMENTO VALOR SALDO "
//@ LI,00 SAY "DATA MOVIMENTO TITULO VENCIMENTO VALOR SALDO "
//@ LI,00 SAY "DATA MOVIMENTO TITULO VENCIMENTO VALOR SALDO "
sele temp
go top
do while .not. eof()
xcod=codrep
xmovimento=movimento
xdatamov=datamov
xvencimento=vencimento
xnota=nota
xvalor=valor
xsaldo=saldo
LI=LI+1
@ LI,00 SAY XDATAMOV
@ LI,10 SAY XMOVIMENTO
@ LI,31 SAY XNOTA
@ LI,44 SAY XVENCIMENTO
@ LI,60 SAY XVALOR
@ LI,71 SAY XSALDO
skip
ENDDO
SELE REP
SEEK XCOD
XSALDOATUAL=SALDO
xdata=date()
li=li+1
@ li,00 say replicate('-',79)
li=li+1
@ li,00 say "Saldo do Dia"
@ li,14 say xdata
@ li,30 say "Valor: R$"
@ li,40 say xsaldoatual
RETURN
Deu certo
Enviado: 05 Fev 2005 12:28
por JuniorVaz
na verdade, eu e o Dudu_Xbase descobrimos que o erro estava era no modo de gravação anterior do meu DBF, que ao inves de salvar o ano como 2005, tava salvando como 1905, neste caso, eu pesquisava entre 2001 ateh 2005, e obviamente ele não encontrava nada... Mas Obrigado pela ajuda ai de todo mundu, tava precisando muito desse relatório, e agora funcionou... Vlw colegas
Enviado: 05 Fev 2005 18:04
por Clipper