viernes, 5 de diciembre de 2008

Informes parametrizados con Crystal Report + Delphi. (Parametro = TJvDateEdit).

A veces, la gestión de un informe parametrizado desde Delphi, previamente diseñado con Crystal Report, requiere que la entrada del valor del parámetro se realice a través de un componente que acepte fechas, tal como TJvDateEdit

Por ejemplo, supongamos que tenemos un informe parametrizado que acepta un parámetro de fecha. Supongamos que el campo con el que deseamos comparar pertenezca a la tabla Proyecciones y se llame fechadeproyeccion.

Queremos lanzar un listado parametrizado, de modo que se obtengan sólo los registros de las proyecciones para los que la fecha de proyección sea igual o menor que la fecha entregada en el parámetro.

Para resolver esta cuestión:

1) Disponemos de un miembro de especificaciones con extensión .rpt, generado desde el propio Crystal Report, y al que le hemos llamado InfFechaProyecciones.rpt. Definimos un parámetro de cadena (... no Date, es necesario crearlo como string) en el informe denominado ParFecha y establecemos como formula de selección de los registros la siguiente:

{Proyecciones.fechadeproyeccion} <= DateTimeValue ({?ParFecha})

La función DateTimerValue garantiza que la cadena introducida en el parámetro se convierta a tipo Fecha (Date).

2) Añadirmos al formulario un Objeto/Componente TJvDateEdit al que llamaremos ParFecha, de modo que su propiedad Text tomará como "cadena" en formato DD/MM/AAAA el valor introducido como parámetro.

3) Un botón que, desde su evento click, ejecute el siguiente código:

md.InfFechaProyeccion.ReportName:=ExtractFilePath(Application.ExeName)+'RPT\InfFechaProyeccion.rpt';

md.InfFechaProyeccion.ParamFields.Items[0].CurrentValue:=ParFecha.Text;

md.DirxNacionalidad.execute;

EXPLICACIÓN:

Tal como puede verse, la primera instrucción fija en términos relativos al ejecutable del proyecto, la localización del archivo generado por Crystal Report (extensión rpt).

La segunda instrucción asigna al valor actual del parámetro de orden cero (el primero) a la propiedad Text dependiendo de la fecha seleccionada en el componente TJvDateEdit.

Finalmente, el método execute, ejecuta el informe.

No hay comentarios: