Informes
Los informes son salidas, impresas o en pantalla, que se producen a
partir de tablas (o consultas, o vistas).
Que sean salidas significa que no permiten modificar los datos de las
tablas. Se puede tachar o corregir un dato impreso, pero eso se hace
en el papel, no en las tablas.
Los informes están compuestos por bandas. Las bandas están
compuestas por controles de informe.
Bandas
Las bandas son fajas que atraviesan horizontalmente los informes.
Las bandas aparecen con regularidad. Por ejemplo, una vez por
página, una vez por informe, una vez por registro.
Cada banda se define una sola vez, agregándole los campos de informe
necesarios.
Tipos de bandas
Hay varios tipos de bandas. Identificar los tipos a usar en un caso
concreto es importante para diseñar correctamente el informe.
Las bandas de un tipo cualquiera van en parejas, con excepción de la
banda Detalle, que va sola.
El que haya parejas de bandas no significa que ambas deban contener
controles de informe. Pueden estar vacías. Incluso pueden tener altura
0. Todo depende de la situación a resolver.
A partir de los ejemplos siguientes, veamos cuáles son los tipos de
bandas.
Informe de ventas, al 31/05/08
Encabezado de página
Fecha
Factura
Importe
01/05/08
11345
325,00
Detalle
01/05/08
11346
82,50
Detalle
01/05/08
11347
415,70
Detalle
01/05/08
11349
615,00
Detalle
02/05/08
11350
110,28
02/05/08
11351
78,20
02/05/08
11355
208,00
Detalle
02/05/08
11356
129,00
Detalle
03/05/08
11357
308,25
Detalle
Total de hoja
2.271,93
Detalle
Detalle
Detalle
Pie de página
En tiempo de ejecución, la banda Encabezado de página se produce cada
vez que se imprime una hoja. Todas las veces, el formato de esta banda es
el mismo. Por ello, se define una sola vez al diseñar el informe.
En tiempo de ejecución, la banda Detalle se repite por cada registro que
se imprime y en todas las repeticiones tiene igual formato. Por eso, se
define una sola vez al diseñar el informe.
En tiempo de ejecución, la banda Pie de página aparece cada vez que se
imprime una hoja. En las distintas hojas impresas, el formato de esta
banda es el mismo. Por ello, se define una sola vez al diseñar el informe.
Estas tres bandas aparecen siempre en el Diseñador de informes y no
se las puede eliminar. Sí se puede anularlas, dándoles altura 0.
El diseñador de informes se verá así:
Encabezado de página ▲
Detalle ▲
Pie de página ▲
Si ordenamos la tabla por fecha de factura, vamos a tener primero un grupo
de registros con la fecha a, luego otro grupo de registros con la fecha b,
luego otro grupo de registros con la fecha c, etc.
Esto nos permite definir grupos de datos por el campo Fecha. Se
supone que la tabla tiene un índice por fecha, que debe activarse
en el entorno de datos del informe.
En tiempo de diseño aparecerán dos bandas, Encabezado de grupo 1 y
Pie de grupo 1, que rodean a la banda Detalle.
El diseñador de informes se verá así:
Encabezado de página ▲
Encabezado de grupo 1: Fecha ▲
Detalle ▲
Pie de grupo 1: Fecha ▲
Pie de página ▲
En tiempo de ejecución, se producirá el siguiente informe:
Informe de ventas, al 31/05/08
Fecha
Factura
Importe
11345
325,00
11346
82,50
11347
415,70
11349
615,00
01/05/08
Subtotal 1.438,20
02/05/08
11350
110,28
11351
78,20
11355
208,00
11356
129,00
Subtotal
03/05/08
525,48
En el ejemplo anterior, observe que la fecha ocupa una línea entera.
Si se listara un año entero, o dos, o tres, etc., habría muchos grupos. Esto
ocasionaría excesivo gasto de papel con las líneas de fecha.
Para evitar ese desperdicio, el listado podría ser como sigue:
Informe de ventas, al 31/05/08
Fecha
Factura
Importe
01/05/08
11345
325,00
11346
82,50
11347
415,70
11349
615,00
Subtotal 1.438,20
02/05/08
11350
110,28
11351
78,20
11355
208,00
11356
129,00
Subtotal
03/05/08
11357
525,48
308,25
En el informe mejorado último, no se usa la banda Encabezado de grupo 1,
que no tiene controles y tiene altura 0.
La fecha se coloca en la banda Detalle, pero haciendo que no se repita en
la segunda, tercera, etc., líneas de cada grupo.
Lo anterior se consigue evitando la impresión de valores consecutivos
repetidos. Es decir, se usa una impresión condicional.
Si la tabla estuviera ordenada por cliente y fecha, podríamos usar un grupo para
el cliente y un subgrupo para la fecha.
Esto supone que la tabla tiene un índice por múltiples campos. Un índice por
los campos Cliente y Fecha ordena los registros formando grupos por cliente
y dentro de cada grupo ordena los registros por fecha. Por ejemplo:
Cliente
Fecha
1
01/05/08
1
01/05/08
1
05/05/08
2
07/05/08
2
22/05/08
2
22/05/08
2
22/05/08
Factura Importe Etc.
VFP permite usar varios subgrupos. Para no llamarlos grupo, subgrupo, sub
subgrupo, sub sub subgrupo, etc., llama grupo 1 a la jerarquía mayor,
grupo 2 a la jerarquía siguiente, grupo 3 a la que sigue, etc.
El diseñador de informes se verá así:
Encabezado de página ▲
Encabezado de grupo 1: cliente ▲
Encabezado de grupo 2: fecha ▲
Detalle ▲
Pie de grupo 2: fecha ▲
Pie de grupo 1: cliente ▲
Pie de página ▲
El esquema anterior pone en evidencia que el Grupo 2 tiene menor alcance
que el Grupo 1, por lo que los encabezados son de Grupo 1 y luego de Grupo
2. Pero los pies se invierten: primero el pie de grupo 2 y luego el de grupo 1,
porque el grupo 2 puede darse varias veces por cada grupo 1.
Generalizando a cualquier cantidad de grupos, la disposición será:
Encabezado de grupo 1
Encabezado de grupo 2
…
Encabezado de grupo n
Detalle
Pie de grupo n
…
Pie de grupo 2
Pie de grupo 1
Sea que un informe, una vez impreso, se ve así:
Listado alfabético de clientes
Cliente
Código
Agüero, Alberto
1
Alvarado, Pedro
15
Arce, Julio
27
Báez, Luis
18
Becerra, Eusebio
21
Boca, Andrés
35
Bustos, Adriana
48
Cantó, Teresa
67
Carreras, José
12
Coria, Jesús
39
Los datos del listado ocupan muy poco espacio horizontalmente. Queda una
gran porción de hoja a la derecha. Esto es un desperdicio de papel.
VFP permite usar la parte derecha definiendo 2, 3 ó más columnas de
informe. Una columna de informe es una página virtual dentro de la hoja física.
No confunda columna de informe con las columnas de datos que se ven
una vez impreso el informe.
Para definir la cantidad de columnas, se usa Archivo - Preparar página,
que también permite definir un espacio de separación entre columnas.
Cuando se definen más de 1 columna, se agregan las bandas Encabezado
de columna y Pie de columna.
Archivo – Preparar página también sirve para definir el tamaño y la
orientación del papel.
Un informe con grupo 1 a 2 columnas, en el Diseñador de informes se verá así:
Encabezado de página ▲
Encabezado de columna ▲
Encabezado de grupo 1 ▲
Detalle ▲
Pie de grupo 1 ▲
Pie de columna ▲
Pie de página ▲
Observe que el ancho de las bandas Encabezado de grupo 1, Detalle y Pie
de grupo 1 se han reducido al ancho que tienen las bandas Encabezado de
columna y Pie de columna.
Es lógico, porque esas tres bandas van a entrar en cada columna de
informe. Quedan exceptuadas Encabezado de página y pie de página, que,
por referirse a la hoja física, no se reducen al ancho de cada columna.
Si la separación entre columnas es 0, el ancho de cada una va a ser igual
a la mitad, tercera parte, cuarta parte, etc. del ancho total del informe,
según se definan 2, 3, 4, etc. columnas.
Si la separación entre columnas se define como x, en n columnas habrá n
-1 separaciones. El ancho de cada columna será
[ancho total – (n – 1) separación] / cantidad de columnas.
Hay dos bandas más, que van en los extremos del informe: Título y Resumen.
Ambas se activan con Informe - Título / Resumen. Aunque conceptualmente
forman pareja, se pueden activar ambas, una sola o ninguna.
La banda Título se imprime al comienzo del informe. Sirve para mostrar el
nombre de la institución, el nombre del impreso, el logo, etc. Puede ir en la
primera hoja a imprimir, por separado, o en la primera hoja del informe
propiamente dicho.
La banda Resumen se imprime al final del informe. Sirve, por ejemplo, para
dar totales generales. Puede ir en la última hoja a imprimir, por separado, o
en la última hoja del informe propiamente dicho.
En el Diseñador de informes, la banda Título aparece arriba de todo, antes de
la banda Encabezado de página. La banda Resumen aparece debajo de todo,
después de la banda Pie de página.
Controles de informe
Dentro de las bandas se agregan controles de informe.
Los controles de informe son Etiqueta, Campo, Línea, Rectángulo, Rectángulo
redondeado e Imagen. El cuadro siguiente los compara en propósito con los
controles de formularios.
Informes
Formularios
Etiqueta
Label
Campo
TextBox
Línea
Line
Rectángulos
Shape
Imagen
Picture
Cada tipo de control tiene propiedades. A diferencia de la ventana Propiedades
de formularios y entornos de datos, estas propiedades se configuran a través de
cuadros de diálogos específicos para cada tipo.
Análisis de algunas propiedades
El ancho con que se diseña un control es fijo.
Esto tiene impacto especialmente en el control Campo. En principio, si el
contenido a mostrar es mayor al ancho, el contenido se trunca. Por ejemplo:
Contenido a mostrar: Belgrano, Manuel Joaquín del Corazón de Jesús.
Tamaño del campo:
Campo impreso:
Belgrano, Manuel
La propiedad Ajustar al contenido del texto de este control produce la
impresión de la siguiente forma.
Belgrano, Manuel
Joaquín del Corazón
de Jesús
La solución anterior, sin embargo, puede traer problemas. Sea que en una
banda haya varios campos, algunos de los cuales están uno bajo el otro:
A
B
Si el campo A tiene activada la propiedad Ajustar al contenido del texto y el
campo B tiene una posición fija dentro de la banda, al Imprimirse el campo
A en varias líneas se superpondrá al campo B:
Este es el contenido del
campo A, que se escribe
en varias
líneas.B
Este
es el campo
Para solucionar el inconveniente, al campo B se le da una posición variable,
activando la propiedad Flotante o la propiedad Borde inferior de la banda.
Flotante hace que, una vez escrito el campo A, el campo B comenzará a
escribirse respetando la separación vertical con que se han diseñado ambos
campos.
Borde inferior de la banda hace que, al aumentar la altura de la banda por
el crecimiento vertical de A, el control B irá descendiendo, porque su
posición es relativa al borde inferior de la banda.
Con cualquiera de estas propiedades activa, la banda se imprimirá:
Este es el contenido del
campo A, que se escribe
en varias líneas.
Contenido de B.
Nótese que la propiedad Borde inferior de la banda funciona aun cuando
el control A no está encima del control B:
A
B
A veces, el valor de un campo se repite varias veces en forma inmediata.
Informe de ventas, al 31/05/08
Fecha
Factura
Importe
01/05/08
11345
325,00
01/05/08
11346
82,50
01/05/08
11347
415,70
01/05/08
11349
615,00
02/05/08
11350
110,28
02/05/08
11351
78,20
02/05/08
11355
208,00
02/05/08
11356
129,00
02/05/08
11357
308,25
El informe puede resultar más claro de entender si se presenta así:
Informe de ventas, al 31/05/08
Fecha
Factura
Importe
01/05/08
11345
325,00
11346
82,50
11347
415,70
11349
615,00
11350
110,28
11351
78,20
11355
208,00
11356
129,00
11357
308,25
02/05/08
Para lograr lo anterior, se recurre al diálogo Imprimir condiciones.
Primero se indica que No se quiere Imprimir valores repetidos. Si se
quieren excepciones a esta regla, se contemplan tres situaciones.
En primera banda completa de nueva página / columna. Es para el
caso que una banda Detalle necesite una línea de impresión. Si un valor
repetido abarca más de una hoja, se repite nuevamente al comienzo de
cada una de ellas. Esto evita tener que volver hojas hacia atrás buscando
cuál es el valor que corresponde, cuando no se usa esta opción.
Informe de ventas, al 31/05/08
Informe de ventas, al 31/05/08
Fecha
Factura
Importe
Fecha
Factura
Importe
01/05/08
11345
325,00
02/05/08
11358
480,00
11346
82,50
11359
95,00
11347
415,70
11360
708,15
11349
615,00
11361
223,00
11350
110,28
11362
218,80
11351
78,20
11364
62,40
11355
208,00
11365
316,00
11356
129,00
11366
188,00
11357
308,25
11367
527,00
02/05/08
Hoja 1
03/05/08
Hoja 2
En la hoja 2, para saber cuál es la primera fecha, no es necesario volver a la
hoja 1, porque está impresa.
Cuando detalle pase a nueva página / columna. En ocasiones, dentro de una
banda, se colocan objetos a distintas alturas. Por ejemplo:
Factura
Fecha
Importe
Sea que el campo código del cliente, que aparece en la primera línea, tiene
No en Imprimir valores repetidos.
Sea que un cliente se repite varias veces. Al imprimir esa banda al final de
la hoja, sólo hay espacio para las dos primeras líneas.
Como la impresión de la banda está incompleta, VFP la imprime en la hoja
siguiente:
Listado de clientes y sus compras
Listado de clientes y sus compras
267
267
Factura
15268
Fecha 25/02/08
Importe
$425,00
Factura
16818
$2150,00
267
267
Factura
Importe
Fecha 14/03/08
17223
Fecha 21/04/08
Fecha 25/04/08
Importe
Importe
267
267
Factura
17307
Importe
$3270,00
Factura
16924
Fecha 21/03/08
Importe
$1215,00
267
267
Factura
17005
Fecha 29/03/08
Importe
$1.205,00
17115
17412
Fecha 02/05/08
Importe
$628,00
267
267
Factura
Factura
Fecha 05/04/08
Hoja 1
Factura
17671
Fecha 15/05/08
Importe
$189,00
Hoja 2
En el ejemplo anterior, el número de cliente, 267, se ve en rojo cuando no se
imprime, en razón que se repite.
Esto deja líneas en blanco en el informe, provocando desperdicio de papel.
Para evitar el desperdicio, se puede activar la propiedad Quitar líneas en
blanco.
Esta propiedad no imprime líneas que estén totalmente en blanco, como
en el ejemplo.
Si en la misma línea hubiera varios objetos, todos deberían tener activada
esta propiedad y deberían estar simultáneamente en blanco para que la
propiedad surta efecto.
Cuando cambie este grupo. Sea el siguiente impreso:
Ventas por cliente y fecha
Cliente
Nombre
125
González, Juan Alberto
Fecha
Importe
10/07/08
3.245,00
12/08/08
1.217,00
Total
126
4.462,00
García, Pedro Vicente
1.243,00
21/07/08
2.302,00
02/08/08
1.342,00
Total
……..
4.887,00
El informe anterior está agrupado por cliente. El campo Fecha tiene inactiva
la propiedad Imprimir valores repetidos.
Esto provoca que la primera compra del cliente 126 salga sin fecha, porque
es la misma fecha que la última línea del cliente 125.
Pero la falta de fecha provoca desconcierto, porque una cosa son las
compras del cliente 125 y otra cosa las compras del cliente 126.
Para evitar ese efecto “desagradable”, se activa la propiedad Cuando
cambie este grupo. La propiedad necesita que se indique cuál es el grupo
en cuestión, para lo que ofrece una lista de los grupos existentes a ese
momento, de los que se debe elegir uno.