Consulta reportes vfp6

Hola, mira, tengo un problema : tengo un reporte y este a veces no tiene nada que mostrar, y cuando no tiene nada que mostrar(no encuentra ni un registro al hacer el filtro) el reporte al ejecutarlo agranda el formulario, quisiera que muestre un mensaje que diga "NO SE ENCONTRÓ NINGÚN REGISTRO", no se como saber si no hay ningún registro. Por otra parte sabes como sacar 1/5...1/n páginas en los reportes ..
Un cordial saludo
Rembrandt

6 respuestas

Respuesta
1
Te recomiendo que hagas un formulario aparte con lo que querés que diga en el caso de que esté en blanco, le asignas una tabla cualquiera que tenga solo un registro y esté en blanco para que el reporte se ejecute. Entonces considerando que la tabla o consulta que está activa es la que contiene los datos para tu reporte, hacés:
**************************
COUNT tabla.campo FOR condicion TO lnCantRegistros
IF lnCantRegistros > 0
REPORT FORM tureporte.frx NOCONSOLE NOPAGEEJECT &&Esto no muestra nada, solo lo ejecuta para activar la variable de sistema _PAGETOTAL, que es la que contiene el total de página.
lnTotalPag = _PAGETOTAL
REPORT FORM tureporte.frx TO PRINTER NOPAGEEJECT && o la salida que te parezca.
ELSE
REPORT FORM enblanco.frx TO PRINTER NOPAGEEJECT
ENDIF
**************************
Recordá poner en tureporte un campo con "Página "+allt(str(_PAGENO,10,0))+" de "+allt(str(lnTotalPag,10,0))
Espero te sirva. Cualquier duda consultá tranquilo.
Suerte.
Respuesta
1
Por lo general la pregunta para saber si hay información es esta:
If Reccount("Tabla") =0
Messagebox("No Existen registros")
Return .F.
Endif
Para el contador de paginas te envio esta funcion:
************************************************************
*
* Clase: report_contarpaginas
*
* Devuelve el número de paginas de un report
*
* Parametros:
*
* Nombre del report
*
* Ejemplos:
*
* lntotpaginas = report_contapaginas("minforme")
*
* Retorno
*
* El numero de paginas del informe.
*
* Nota
*
*
* Creación : 08/09/1999 PRR
* Ultima Modificación: 14/04/2000 *
************************************************************
PARAMETERS lc_report
LOCAL nPaginas
nPaginas = 0
DEFINE WINDOW x FROM 1,1 TO 2,2
ACTIVATE WINDOW x NOSHOW
REPORT FORM (lc_report) NOCONSOLE
nPaginas = _PAGENO
RELEASE WINDOW x
RETURN npaginas
Álvaro, con respecto como saber si jay información en una tabla lo que pasa es que hago un set filter to antes de ejecutar el reporte, ¿también es válido par esto?
No.. la función reccount(), no es afectada por set filter, si es así.. no te va a servir.. lo que puedes hacer es una orden select con la condición establecida y miras cuantos registros de devuelve.. usando la función reccount() en la tabla generada en la orden Select,
o Con Calculate CNT() for ccondcion to nregistros
Si nRegistros > 0
Imprima
Asi tambien te pueder servir
Respuesta
1
A) antes de ejecutar la instruccion REPORT FORM...
ejecuta lo siguinente: (debes posicionarte en la tabla que muestras en el reporte):
IF RECCOUNT()=0
MESSAGEBOX('NO HAY DATOS PARA GENERAR REPORTE',48,'REPORTES')
ELSE
**Ejecuta el REPORT FORM....
ENDIF
B) Utiliza una varible auxiliar para tener el dato del número d páginas:
LOCAL nPaginas
nPaginas = 0
DEFINE WINDOW x FROM 1,1 TO 2,2
ACTIVATE WINDOW x NOSHOW
REPORT FORM (lc_report) NOCONSOLE
nPaginas = _PAGENO
RELEASE WINDOW x
REPORT FORM... &&TU EJECUCIÓN
*ejecutas el reporte normal la segunda vez, pero la variable nPaginas ya 'cargó' el total de las paginas.
(La variable lo pones en un campo dentro del diseño del informe).
Respuesta
1
La respuesta es:
En _PAGENO se guarda la cantidad de páginas, tienes que inicializarla en cero, y si la usas en varios reportes te conviene tenerla como variable global.
SELE * FROM AUX2;
ORDER BY DESCRIP,FECHA INTO table C:\poliasist\Reportes\pendientes.DBF
***** si es eof() pone el mensaje
if eof()
messagebox("Esta Dependencia"+chr(13)+"No posse Pendientes",48,"Mensaje de Sistema")
else
report form C:\poliasist\Reportes\pendareas noconsole
totalpaginas = _pageno
report form C:\poliasist\Reportes\pendareas noconsole preview in screen
Endif
*** En el reporte iria ***
"Página " + ALLTRIM(STR(_PAGENO))+" de "+ ALLTRIM(str(totalpaginas))
¿Cómo la pongo de variable global e inicializo en cero en que evento?
¿Cómo si eof?
Todos los reportes tendrán un final y siempre me saldrá, el mensaje, ¿por qué el order by por esos campos?
Y ademas que mis reportes son manejados por set filter to XXXXX esto no difiere en nada,
Explicame por favor, Pirata
En tu programa de inicio del sistema:
_pageno=0
Luego de tu set filter to preguntas si es eof() es decir, si es fin de archivo, esto es muy básico, deberías saberlo. Si es fin de archivo, no hay datos, sino es porque los hay ...
if eof() then
messagebox("No hay datos que mostrar",48,"Mensaje de Sistema")
else
report form C:\poliasist\Reportes\pendareas noconsole
totalpaginas = _pageno
report form C:\poliasist\Reportes\pendareas noconsole preview in screen
Endif
Lo que sigue del else es para mostrar el reporte.
Dentro de tu reporte vas a intentar un campo con
"Página " + ALLTRIM(STR(_PAGENO))+" de "+ ALLTRIM(str(totalpaginas))
Esto te va a mostrar si tienes 10 hojas en tu reporte:
(En Hoja 1)
Página 1 de 10
(En Hoja 2)
Página 2 de 10
Lee el ayuda de Visual Fox para entender mejor el funcionamiento de las sentencias.
Respuesta
1
Si el filtro lo haces antes de emitir el reporte, puedes checar si la(s) tabla(s) están vacías de ser así, puedes decir que no se encontró ningún registro
if eof()
=messagebox('No se encontro ningun registro',64,'Error')
else
report form x ....
endif
Para poner cuantas páginas del total de páginas es un poco tardadoSe corre el reporte dos veces. La primera vez la salida del reporte va a una ventana no visible.
* Se define la ventana
Define Window x From 1,1 To 20,20
* Se activa la ventana de manera invisible
Activate Window x NoShow
* Se prepara una variable pública para recibir el número de hojas
oApp.nPaginas = 0
* Se ejecura el reporte, cuyo nombre está en la variable cReporte
Report Form (cReporte)
* Se guarda el número de hojas del reporte
oApp.nPaginas = _PAGENO
* Se elimina la ventana de paso
Release Window x
* Se activa la ventana actual, en este caso "informes"
Activate Window Informes
* Se ejecuta el reporte a la impresora, como quieras
* Dentro de tu reporte usas la variable oApp.nPaginas para la expresión que
deseas.
* Por ejemplo "ALLTRIM(STR( _pageno)) de oApp.nPaginas"
Al ejecutar el reporte me sale un error no se encuentra el alias oApp,
Declara una variable publica y sustitúyela por oapp
Respuesta
1
Al hacer el filtro inquiere sobre la existencia de registros, algo similar a:
SET FILTER TO...
IF EOF()
MESSAGEBOX("No hay registros que cumplan ese criterio")
ELSE
REPORT FORM...
ENDIF
Respecto a tu otra pregunta, crea una variable e incluyela en el reporte, en el lugar donde deseas que aparezca el número total de hojas, después haz algo similar a:
** Suponiendo que la variable
** incluida en el reporte sea
** "m.nNumeroPaginas"
m.nNumeroPaginas = 0
REPORT FORM MiReporte NOCONSOLE
m.nNumeroPaginas = _PAGENO
REPORT FORM MiReporte NOCONSOLE TO PRINT
... bueno, eso digo yo.
Víctor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas