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
Tá vendo ???

Quem manda tu ser teimoso, eu te disse 10 vezes para botar SET EPOCH 1999 no inicio do sistema, não foi ?

Eu tinha certeza que era isso... :lol: :lol: :lol: :lol: :lol: :lol: :lol:

Até logo.

Marcelo