FoxPro/Visual FoxPro - Filtros ACUMULATIVOS.

   
Vista:

Filtros ACUMULATIVOS.

Publicado por Hércules (5 intervenciones) el 03/05/2010 08:51:10
Estoy tratando de armar un filtro acumulativo..

Tengo un DO WHILE en donde identifico que fitros vienen con datos y los voy acumulando.. al filtro que voy a utilizar finalmente.

Para el primer filtro que tiene datos me muestra lo que trae la macrosustitución, pero para los siguientes filtros me envia lo de la primer macrosustitución más el nombre de los siguientes filtros..

QUE ESTA MAL.. ?

VFECDE = {}
VFECA = {}
VNP = ""
VORIGEN = ""
VDESTINO = ""
VTMOV = ""
VCANTIDAD = 0
VDOC = 0

FILTRO = ''
FILTRO1 = ''
FILTRO3 = ''
FILTRO4 = ''
FILTRO5 = ''
FILTRO6 = ''
FILTRO7 = ''
FILTRO8 = ''

STORE thisform.pageframe1.page1.txt_Fec.Value TO VFECDE
STORE thisform.pageframe1.page1.txt_Fec1.Value TO VFECA
STORE thisform.pageframe1.page1.txt_Doc.Value TO VDOC
STORE ALLTRIM(thisform.pageframe1.page1.txt_Concepto.Value) TO VTMOV
STORE ALLTRIM(thisform.pageframe1.page1.txt_NP.Value) TO VNP
STORE ALLTRIM(thisform.pageframe1.page1.txt_Origen.Value) TO VORIGEN
STORE ALLTRIM(thisform.pageframe1.page1.txt_Destino.Value) TO VDESTINO
STORE thisform.pageframe1.page1.txt_Cantidad.Value TO VCANTIDAD

FILTRO1 = iif(!empty(VFECA),'kardex.kr_FEC >= VFECDE AND kardex.kr_FEC <= VFECA',iif(!empty(VFECDE),'kardex.kr_FEC = VFECDE',FILTER()))
FILTRO2 = IIF(!EMPTY(VDOC),'kardex.kr_doc = VDOC',FILTER())
FILTRO3 = IIF(!EMPTY(VTMOV),'ALLTRIM(kardex.kr_conc) = VTMOV',FILTER())
FILTRO4 = IIF(!EMPTY(VNP),'ALLTRIM(kardex.kr_np) = VNP',FILTER())
FILTRO5 = IIF(!EMPTY(VORIGEN),'ALLTRIM(kardex.kr_orig) = VORIGEN',FILTER())
FILTRO6 = IIF(!EMPTY(VDESTINO),'ALLTRIM(kardex.kr_dest) = VDESTINO',FILTER())
FILTRO7 = IIF(!EMPTY(VCANTIDAD),'kardex.kr_cant = VCANTIDAD',FILTER())

FILTRO = FILTER()

&& ----
VNFILTRO = 0
DO WHILE .T. && Begins loop
VNFILTRO = VNFILTRO + 1
IF VNFILTRO = 8
EXIT
ENDIF
FILTROX = 'FILTRO'+ALLTRIM(STR(VNFILTRO))

IF !EMPTY(FILTRO) AND !EMPTY(&FILTROX)
FILTRO = '&FILTRO AND &FILTROX'
WAIT FILTRO windows
ELSE
IF !EMPTY(&FILTROX) AND EMPTY(FILTRO)
FILTRO = &FILTROX
WAIT FILTRO windows
ENDIF
ENDIF
LOOP
ENDDO && Ends loop
&& ----
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Filtros ACUMULATIVOS.

Publicado por Juanma (508 intervenciones) el 03/05/2010 13:26:29
Recuerda finalizar la macro con un punto... porque el compilador a veces se pone un poco tonto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Filtros ACUMULATIVOS.

Publicado por Juanma Cruz (508 intervenciones) el 04/05/2010 12:16:33
Esa macrosustitución no funcionará encerrada entre comillas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Filtros ACUMULATIVOS.

Publicado por Hércules (5 intervenciones) el 05/05/2010 04:48:46
Exacto!

Eso es lo que esta mal...

FILTRO = '&FILTRO AND &FILTROX'

Pero..

Como uno esto?

Saludos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Filtros ACUMULATIVOS.

Publicado por Hércules (5 intervenciones) el 05/05/2010 05:29:46
Ya quedo !! esto es lo como finalmente me funciono.. espero les ayude...

Esta línea es la que estaba mal.. y así es la correcta..

FILTRO = '&FILTRO. AND '+&FILTROX.

Saludos cordiales.

.....
Este es código completo...

VFECDE = {}
VFECA = {}
VNP = ""
VORIGEN = ""
VDESTINO = ""
VTMOV = ""
VCANTIDAD = 0
VDOC = 0

FILTRO = ''
FILTRO1 = ''
FILTRO3 = ''
FILTRO4 = ''
FILTRO5 = ''
FILTRO6 = ''
FILTRO7 = ''
FILTRO8 = ''

STORE thisform.pageframe1.page1.txt_Fec.Value TO VFECDE
STORE thisform.pageframe1.page1.txt_Fec1.Value TO VFECA
STORE thisform.pageframe1.page1.txt_Doc.Value TO VDOC
STORE ALLTRIM(thisform.pageframe1.page1.txt_Concepto.Value) TO VTMOV
STORE ALLTRIM(thisform.pageframe1.page1.txt_NP.Value) TO VNP
STORE ALLTRIM(thisform.pageframe1.page1.txt_Origen.Value) TO VORIGEN
STORE ALLTRIM(thisform.pageframe1.page1.txt_Destino.Value) TO VDESTINO
STORE thisform.pageframe1.page1.txt_Cantidad.Value TO VCANTIDAD

FILTRO1 = iif(!empty(VFECA),'kardex.kr_FEC >= VFECDE AND kardex.kr_FEC <= VFECA',iif(!empty(VFECDE),'kardex.kr_FEC = VFECDE',FILTER()))
FILTRO2 = IIF(!EMPTY(VDOC),'kardex.kr_doc = VDOC',FILTER())
FILTRO3 = IIF(!EMPTY(VTMOV),'ALLTRIM(kardex.kr_conc) = VTMOV',FILTER())
FILTRO4 = IIF(!EMPTY(VNP),'ALLTRIM(kardex.kr_np) = VNP',FILTER())
FILTRO5 = IIF(!EMPTY(VORIGEN),'ALLTRIM(kardex.kr_orig) = VORIGEN',FILTER())
FILTRO6 = IIF(!EMPTY(VDESTINO),'ALLTRIM(kardex.kr_dest) = VDESTINO',FILTER())
FILTRO7 = IIF(!EMPTY(VCANTIDAD),'kardex.kr_cant = VCANTIDAD',FILTER())

FILTRO = FILTER()
&& ----
VNFILTRO = 0
DO WHILE .T. && Begins loop
VNFILTRO = VNFILTRO + 1
IF VNFILTRO = 8
EXIT
ENDIF
FILTROX = 'FILTRO'+ALLTRIM(STR(VNFILTRO))

IF !EMPTY(FILTRO) AND !EMPTY(&FILTROX)
FILTRO = '&FILTRO. AND '+&FILTROX.
WAIT FILTRO windows
ELSE
IF !EMPTY(&FILTROX.) AND EMPTY(FILTRO)
FILTRO = &FILTROX.
WAIT FILTRO windows
ENDIF
ENDIF
LOOP
ENDDO && Ends loop
&& ----

SELECT kardex
IF !EMPTY(FILTRO)
SET FILTER TO &filtro.
ELSE
SET FILTER TO
ENDIF
GO top
ThisForm.PageFrame1.Page1.grdKardex.Refresh
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar