Page 1 of 2

set filter to &filtro no funciona.....

Posted: Fri Jul 20, 2012 8:52 pm
by paimar
Buenas.

Intento hacer algo que en clipper siempre me funciono...

filtro:="clientes->codigo=ncodigo"
set filter to &filtro


No se supone que es totalmente compatible con clipper?

un saludo

Re: set filter to &filtro no funciona.....

Posted: Fri Jul 20, 2012 9:17 pm
by IMATECH
Then... Just try again

filtro:="clientes->codigo=ncodigo"

set filter to ( filtro )
or
set filter to &( filtro )
or
set filter to "&filtro"

Re: set filter to &filtro no funciona.....

Posted: Fri Jul 20, 2012 9:48 pm
by paimar
Pues ninguna de las 3...... :(

Seguire probando.


Gracias

Un saludo

Re: set filter to &filtro no funciona.....

Posted: Fri Jul 20, 2012 10:10 pm
by IMATECH
Or just use a better way of code

bFiltro := { || clientes->codigo == ( ncodigo ) }

clientes->( DBSETFILTER( bFiltro ) )

or


Dont use filter (Better practice for code)

IF Clientes->( DBSeek( ncodigo ) )

While clientes->codigo == ( ncodigo )
clientes->( DBSkip() )
End

End

Re: set filter to &filtro no funciona.....

Posted: Sat Jul 21, 2012 10:24 am
by mol
I'm using such a solution for speed up filtering data:

Code: Select all

cIndexkey := IndexKey(0)
index on &cIndexKey to (cIndexFile) for &cCondition
Marek
PS. When setting filter, you must remember to activate it by DBGoTop() or DbSkip()

Re: set filter to &filtro no funciona.....

Posted: Sat Jul 21, 2012 3:13 pm
by arroya2
Yo estoy usando un índice provisional, al que llamo 'MiIndice' y que posteriormente elimino. Es instantáneo con 70.000 registros. El RDD que utilizo es CDX.

Code: Select all

	INDEX ON &(cCampo) TAG MiOrden TO &(cBase) FOR &(cCondFiltro)
	OrdSetFocus('MiOrden')
	(cBase)->(DbGoTop())
Saludos
Rafael Pérez

I am using a provisional rate, which I call 'MiIndice' and subsequently eliminated. Is instantaneous with 70,000 records. The RDD I use is CDX.

Code: Select all

	INDEX ON &(cCampo) TAG MiOrden TO &(cBase) FOR &(cCondFiltro)
	OrdSetFocus('MiOrden')
	(cBase)->(DbGoTop())
Regards
Rafael Pérez

Re: set filter to &filtro no funciona.....

Posted: Sat Jul 21, 2012 5:33 pm
by gvaronas
paimar wrote:Buenas.

Intento hacer algo que en clipper siempre me funciono...

filtro:="clientes->codigo=ncodigo"
set filter to &filtro

No se supone que es totalmente compatible con clipper?
Hola, la variable filtro, ¿de que tipo es?
La Macrosustitución no funciona con variables locales. Asi que si es de tipo LOCAL podrías probar haciéndola PRIVATE.

Salu2,
GVS

Re: set filter to &filtro no funciona.....

Posted: Sun Jul 22, 2012 10:06 pm
by paimar
Gracias a todos por los comentarios.

He probado varias de sus opciones , unas no funcionan y otras no las se adaptar :)

El codigo de clipper actual es el siguiente: (perdon por el desorden)

READ
IF LASTKEY()=27
SET COLO TO W
@ 3,1 clea to maxrow()-4,78
IMPRIME()
RETU NIL
ENDI
filtro:=""
if xfecha1<>ctod(" - - ")
anio=0
endif
IF Xfactura1>0 .AND. Xfactura2>=Xfactura1
filtro=filtro+" .and. FACTURA>=Xfactura1 .and. factura<=xfactura2"
ENDIF
IF Xfecha1>CTOD(" - - ") .AND. Xfecha2>Xfecha1
filtro=FILTRO+" .AND. fecha>=xFECHA1 .AND. fecha<=xFECHA2"
ENDI
IF Xfecha_P1>CTOD(" - - ") .AND. Xfecha_p2>Xfecha_p1
filtro=FILTRO+" .AND. fechaPAGO>=xFECHA_p1 .AND. fechaPAGO<=xFECHA_p2"
ENDI
IF Xfecha_P1>CTOD(" - - ") .AND. Xfecha_p2=CTOD(" - - ")
filtro=FILTRO+" .AND. fechaPAGO>=xFECHA_p1"
ENDI
IF xsimbol<>" "
filtro=filtro+" .and. suma&xsimbol nbase"
ENDIF
do case
case xrecibo="R"
FILTRO=FILTRO+[ .AND. RECIBO="R"]
case xrecibo="F"
FILTRO=FILTRO+[ .AND. RECIBO=" "]

case xrecibo="A"
FILTRO=FILTRO+[ .AND. RECIBO="A"]
case xrecibo=" "
FILTRO=FILTRO+[ .AND. RECIBO<>"A"]
ENdcase
IF Xfecha1>CTOD(" - - ") .AND. Xfecha2=CTOD(" - - ")
FILTRO=FILTRO+" .AND. XFECHA1=FECHA"
ENDIF
IF ncliente>0
filtro=filtro+" .AND. CODCLIENTE=ncliente"
ENDIF
IF xmes>0
filtro=filtro+" .and. month(fecha)=xmes"
endif
IF ntrimestre>0
FILTRO=FILTRO+" .AND. QUARTER(FECHA)=NTRIMESTRE"
ENDIF
IF anio>0
FILTRO=FILTRO+" .AND. anio=year(fecha)"
ENDIF
IF Xcobrada="S"

filtro=filtro+[ .AND. fechapago!=ctod(" - - ")]
endif
if xcobrada="N"

filtro=filtro+[ .AND. fechapago=ctod(" - - ")]
endif
if nformcobro>0

filtro=filtro+" .AND. numforpago=nformcobro"
ENDIF

IF Xcolabora<>" "
filtro=filtro+" .AND. colaborado=xcolabora"
ENDIF
if Xnotas<>SPAC(15)
filtro=filtro+" .and. upper(xnotas)$upper(notas)"
endif
IF xc<>spac(20)
xc=alltrim(xc)
filtro=filtro+" .and. (xc$upper(concepto1) .or. xc$upper(concepto2) .or. xc$upper(concepto3) .or. xc$upper(concepto4) .or. xc$upper(concepto5) .or. xc$upper(concepto6) .or. xc$upper(concepto7) .or. xc$upper(concepto8) .or. xc$upper(concepto9) .or. xc$upper(concepto10) .or. xc$upper(concepto11) .or. xc$upper(concepto12) .or. xc$upper(concepto13))"
endif
IF Xiva<>spac(2)
xiva:=alltrim(upper(xiva))
xfiltro=spac(20)
do case
case xiva="7"
xfiltro="iva=7"
case xiva="16"
xfiltro="iva=16"
case xiva="8"
xfiltro="iva=8"
case xiva="18"
xfiltro="iva=18"
case xiva="M"
xfiltro=[tipofact="M"]

endcase
filtro=filtro+" .and. "+xfiltro
endif

IF UPPER(left(alltrim(filtro),5))=".AND."
FILTRO=RIGHT(FILTRO,LEN(FILTRO)-6)
ENDIF

SELE 1
IF LASTKEY()=27
set colo to w
@ 3,1 clea to 21,78
FILTRO:=SPAC(500)
PARTE:=SPAC(90)
IMPRIME()
RETU NIL
ENDI
SET CURS ON
SET COLOR TO
COIN:=0
DBGOTOP()
IF empty(filtro)
SET FILTER TO
SETCOLOR("w+/n")
@ 7,72 SAY RECC() PICT "@E #,###"
COIN:=RECC()
IF coin>0
DBGOTOP()
SUM sumaexenta,suma,sumaiva,total TO vtotalexen,vsuma,viva,vtotal
ENDIF
ELSE
FILTRO:=allTRIM(FILTRO)
SET FILTER TO &filtro
GO TOP
COUNT FOR &filtro TO COIN
DBGOTOP()
SUM sumaexenta,suma,sumaiva,total TO vtotalexen,vsuma,viva,vtotal FOR &FILTRO
ENDIF
IF COIN=0
SET COLO TO W/N
mensatext("No coincide ninguna factura.",2)
set filter to
LOOP

ENDIF

filtro:="test->codigo>3" y set filter to &filtro /si funcio

Posted: Tue Jul 24, 2012 5:26 pm
by paimar
Hola

Afinando un poco mas :

filtro:="test->codigo>3"
set filter to &filtro

/si funciona


pero si hago

filtro:="test->codigo>form_1.text_3.value"
set filtro to &filtro


da error Error BASE/1449 Sintax error:&

Que puede pasar ?

gracias

Re: filtro:="test->codigo>3" y set filter to &filtro /si fu

Posted: Tue Jul 24, 2012 5:30 pm
by danielmaximiliano
paimar wrote:Hola

Afinando un poco mas :

filtro:="test->codigo>3"
set filter to &filtro

/si funciona


pero si hago
filtro:="test->codigo>form_1.text_3.value"
set filtro to &filtro


da error Error BASE/1449 Sintax error:&

Que puede pasar ?

gracias
Hola Paimar: filtro:="test->codigo>form_1.text_3.value"
estas sumando la palabra "form_1.text_3.value" en vez del valor
intenta

Code: Select all

filtro:="test->codigo>"+Str(form_1.text_3.value)
espero no equivocarme