Por Favor, preciso de ajuda urgente...

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Por Favor, preciso de ajuda urgente...

Mensagem 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
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

novo

Mensagem 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...
Irineu
Usuário Nível 2
Usuário Nível 2
Mensagens: 61
Registrado em: 13 Ago 2003 22:01
Localização: Curitia-PR
Contato:

Mensagem 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)
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Aqui está o codigo do meu prg

Mensagem 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
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Tentei

Mensagem por JuniorVaz »

Tirai o sele saldo depois do do while, mas não adiantou tb... alguma outra ideia?
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem 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 
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Não deu

Mensagem por JuniorVaz »

Tentei fazer isso que o colega falou, mas tambem não deu resultado... :/ Bah, ta dificil mesmo isto...
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem 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



________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Deu certo

Mensagem 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
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Responder