Llamo un Informe (report form), pero este se abre y cierra muy rápido.

463 views
Skip to first unread message

Pablo Gomez

unread,
Nov 21, 2016, 4:30:26 PM11/21/16
to Comunidad de Visual Foxpro en Español
Buenas tardes comunidad, espero que me puedan ayudar. Desde ya se los agradezco.

El problema que tengo es que en el siguiente codigo que dejo a continuación, al ejecutarlo, se abre velozmente el informe y se cierra.

¿Que podría estar causando esta situación?

Cuando ejecuto solamente las líneas de los REPORT FORM, sin ningún otro código, funciona perfecto. Entonces puedo inferir que hay algo mas que esta interfiriendo y provoca que se abra y se cierre rápidamente.

Please, Help me!

a=DAY(DATE())-10
mes1=MONTH(DATE())
año1=YEAR(DATE())

IF a<0
REPORT FORM datos_de_responsables.frx ALL FOR pagos.n_dpto=thisform.n_dpto.value AND pagos.fecha_pago={} AND pagos.año<=año1 AND pagos.mes<mes1 PREVIEW NOCONSOLE NOWAIT
ELSE
REPORT FORM datos_de_responsables.frx ALL FOR pagos.n_dpto=thisform.n_dpto.value AND pagos.fecha_pago={} AND pagos.año<=año1 AND pagos.mes<=mes1 PREVIEW NOCONSOLE NOWAIT
ENDIF

HernanCano

unread,
Nov 21, 2016, 4:32:04 PM11/21/16
to Comunidad de Visual Foxpro en Español
Cuéntame, Pablo:

¿Para qué usas NOWAIT en este comando?

Pablo Gomez

unread,
Nov 21, 2016, 4:59:03 PM11/21/16
to Comunidad de Visual Foxpro en Español
Por lo que entiendo es para que abra el Informe y termine de ejecutar el resto del código que sigue después del Report Form.

De igual manera, he sacado el NOWAIT y sigue presentando la misma situación.

Germán Fabricio Valdez

unread,
Nov 21, 2016, 5:22:01 PM11/21/16
to Comunidad de Visual Foxpro en Español
y el select mitabla esta puesto antes del report

HernanCano

unread,
Nov 21, 2016, 5:24:24 PM11/21/16
to Comunidad de Visual Foxpro en Español
No, colega.
El NOWAIT es para que el reporte se muestre en pantalla y siga sin esperar a que el usuario iinteractúe con la barra del reporte. Sinceramente es algo que te hará hacer la pregunta que estás haciendo.

No considero esta cláusula útil... ni mucho menos en tu escenario.

Sin embargo si dices que la has quitado y todavía se va sin permitir ver nada, entonces es por que el FOR no da resultados para mostrar.

Si utilizas FOR no necesitas ALL.

Te cuento que esta parte de la condición luce inválida: sólo te dará resultados si la Fecha_Pago en el DBF está vacía (((y en lo personal no creo que sea lo que buscas))):

AND pagos.fecha_pago={} AND pagos.año<=año1 AND pagos.mes<mes

¿Cuál es el comando que sí funciona? ¿Cómo lo escribes?

Ing. Bernardo José Martínez Pérez

unread,
Nov 21, 2016, 5:53:50 PM11/21/16
to publice...@googlegroups.com
Eso puede ser porque no hay datos que mostrar.

Enviado desde mi Windows Phone

De: Germán Fabricio Valdez
Enviado el: ‎21/‎11/‎2016 16:22
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Re: Llamo un Informe (report form), pero este se abre y cierra muy rápido.

Pablo Gomez

unread,
Nov 21, 2016, 7:58:54 PM11/21/16
to Comunidad de Visual Foxpro en Español
Muchas Gracias por sus respuestas :)
okii, entendido todo lo que dicen con el NOWAIT

Lo he sacado, al igual que el ALL. Entonces el código queda de la siguiente manera:

a=DAY(DATE())-10
mes1=MONTH(DATE())
año1=YEAR(DATE())

IF a<0
REPORT FORM datos_de_responsables.frx FOR pagos.n_dpto=thisform.n_dpto.value AND pagos.fecha_pago={} AND pagos.año<=año1 AND pagos.mes<mes1 PREVIEW NOCONSOLE
ELSE
REPORT FORM datos_de_responsables.frx FOR pagos.n_dpto=thisform.n_dpto.value AND pagos.fecha_pago={} AND pagos.año<=año1 AND pagos.mes<=mes1 PREVIEW NOCONSOLE
ENDIF

Las condiciones después del FOR provocan que sí se encuentren registros para generar el informe y además las condiciones son las correctas. Una de ellas es que fecha.pago esté VACÍA.

La verdad no encuentro que es lo que está causando este problema.

Víctor Hugo Espínola Domínguez

unread,
Nov 21, 2016, 11:05:55 PM11/21/16
to publice...@googlegroups.com
>pagos.año<=año1 AND pagos.mes<=mes1

Si lo que pretendes es filtrar los pagos anteriores al mes actual esa expresión no es la adecuada, reemplaza por ésta:

(pagos.año * 12 + pagos.mes) <= (año1 * 12 + mes1)

o

Transform(pagos.año) + Transform(pagos.mes, "@L 99") <= Left(Dtos(Date(), 6))

Saludos,
Víctor.
Lambaré - Paraguay.

Hugo C.

unread,
Nov 21, 2016, 11:26:13 PM11/21/16
to Comunidad de Visual Foxpro en Español
Prueba con algo como esto antes del reporte, para ver los resultados 

SELECT pagos.

BROWSE FOR pagos.n_dpto=thisform.n_dpto.value AND pagos.fecha_pago={} AND pagos.año<=año1 AND pagos.mes<mes1 


Saludos.

HernanCano

unread,
Nov 22, 2016, 12:05:30 AM11/22/16
to Comunidad de Visual Foxpro en Español
Pablo:

Cambia lo que tienes por lo sgte y nos dices qué se muestra en pantalla:

   M.A    =day  (date())-10
   M.MES1 =month(date())
   M.YEAR1=year (date())
   
   if M.A<0
      set filter to PAGOS.N_DPTO=ThisForm.N_DPTO.Value and PAGOS.FECHA_PAGO={} and str(PAGOS.Año,4)+str(PAGOS.MES,2)< str(M.YEAR1,4)+str(M.MES1,2)
   else
      set filter to PAGOS.N_DPTO=ThisForm.N_DPTO.Value and PAGOS.FECHA_PAGO={} and str(PAGOS.Año,4)+str(PAGOS.MES,2)<=str(M.YEAR1,4)+str(M.MES1,2)
   endif

   go top
   if eof()
      =MessageBox('No hay datos')
   else
      report form DATOS_DE_RESPONSABLES.frx preview noconsole
   endif
 
**

Te recomiendo además que en el campo Año en la tabla de datos PAGOS no uses ñ ni mayúscula ni minúscula; más bien en inglés YEAR o mejor YEARP o algo así. ((Esto no es estricto; puedes dejarlo para luego que resuelvas el impasse que tienes))

Pablo Gomez

unread,
Nov 22, 2016, 11:37:51 AM11/22/16
to Comunidad de Visual Foxpro en Español
Muchas gracias a todos otra vez.

He probado tu código HernanCano, Me aparece el cartel diciendo que no hay datos. Pero esto es incorrecto.

He probado linea a linea tu código en la ventana de comandos y SI FILTRA correctamente los registros en la tabla PAGOS.

Lo que sucede es que el eof() siempre arroja .T..

Además de lo anterior, el report form DATOS_DE_RESPONSABLES.frx preview noconsole abre un informe que está conformado por dos tablas,
una de ellas es PAGOS (la cual ya fue filtrada) y la otra es DATOS (no cual no está filtrada y tendría que mostrar solamente los
datos de thisform.n_dpto.value).

Muchas Gracias. Todavia no he podido resolver el problema.

Carlos Alfaro

unread,
Nov 22, 2016, 3:02:39 PM11/22/16
to publice...@googlegroups.com

Entonces en la tabla Pagos hay registros que cumplen con el filtro que estas definiendo?

 

Solo por curiosidad, esta condición se cumple?

PAGOS.FECHA_PAGO={}

 

Que tengas feliz día.

 

 

Saludos Carlos Alfaro

Pablo Gomez

unread,
Nov 22, 2016, 4:30:05 PM11/22/16
to Comunidad de Visual Foxpro en Español, calf...@yahoo.com.ar
Sisi. Hay registros en la tabla pagos con el campo fecha_pago={}, es decir vacío.

Exactamente esa es la condición, que se encuentre vacío.

Muchas Gracias, sigo esperando ayudas :D

HernanCano

unread,
Nov 22, 2016, 4:34:04 PM11/22/16
to Comunidad de Visual Foxpro en Español
Pablo:
Si ejecutando el código que te pasé aparece que no hay datos, es por que no hay datos que cumplan con la condición.

Si insistes en decir que (1) sí hay datos que cumplan y que (2) si ejecutas de otra forma que no se sabe cuál es, entonces intenta con lo que te dice Calros Alfaro.

----------------------------------------

¿De casualidad estás ejecutando desde una aplicación tua? 
Intenta ejecutando ON ERROR (para desactivar el manejador de errores que uses) usando el código tuyo original o el que te propoy nos cuentas qué aparece

HernanCano

unread,
Nov 22, 2016, 4:35:47 PM11/22/16
to Comunidad de Visual Foxpro en Español
Disculpa, Pablo:

Si tienes registros con la fecha vacía y quieres que aparezcan mínimo esos, entonces no puedes incluir en la condición los otros campos con el operador AND.

Carlos Alfaro

unread,
Nov 22, 2016, 4:53:07 PM11/22/16
to publice...@googlegroups.com

Entonces lo que se me ocurre es que uses el comando:

 

Brows for PAGOS.N_DPTO=ThisForm.N_DPTO.Value and PAGOS.FECHA_PAGO={}

 

También

 

Brows for PAGOS.N_DPTO=ThisForm.N_DPTO.Value and PAGOS.FECHA_PAGO={} and (str(PAGOS.Año,4)+str(PAGOS.MES,2)< str(M.YEAR1,4)+str(M.MES1,2))

 

Si te muestra registros entonces debería de funcionar todo lo que has hecho.

 

Bendiciones.

HernanCano

unread,
Nov 22, 2016, 9:01:31 PM11/22/16
to Comunidad de Visual Foxpro en Español
Házlo y nos cuentas:

   if M.A<0
      set filter to PAGOS.N_DPTO=ThisForm.N_DPTO.Value and  (  PAGOS.FECHA_PAGO={}  or  str(PAGOS.Año,4)+str(PAGOS.MES,2)< str(M.YEAR1,4)+str(M.MES1,2) ) 
   else
      set filter to PAGOS.N_DPTO=ThisForm.N_DPTO.Value and  (  PAGOS.FECHA_PAGO={}  or  str(PAGOS.Año,4)+str(PAGOS.MES,2)<=str(M.YEAR1,4)+str(M.MES1,2)
   endif


Pablo Gomez

unread,
Nov 23, 2016, 8:17:45 PM11/23/16
to Comunidad de Visual Foxpro en Español
Muchas Gracias por sus respuestas y ayuda.

Ya he podido resolver el problema.

Lo que sucedio es que, el informe que yo quería abrir, esta formado por dos TABLAS. Una de ellas es la tabla PAGOS, y la otra es la tabla DATOS_DE_RESPONSABLES.

Las condiciones del report form eran referidas a la tabla Pagos, y estas condiciones si arrojaban registros.
Pero la tabla datos_de_responsable era la que estaba vacia, no tenia registros y era esto lo que provocaba que se abra y se cierre rápidamente. 

Bueno, les agradezco nuevamente.

Saludos!

HernanCano

unread,
Nov 23, 2016, 10:26:41 PM11/23/16
to Comunidad de Visual Foxpro en Español
Ahhh.... el problema era otro....
Reply all
Reply to author
Forward
0 new messages