23 de julio de 2015

Lo nuevo del Generador de Informes en VFP 9.0 - Parte 2

Articulo original: What's New in the Visual FoxPro 9.0 Report Writer
https://msdn.microsoft.com/en-us/library/ms965279.aspx
Autor: Cathy Pountney
Traducido por: Ana María Bisbé York


(Sesión What is new in the Visual FoxPro 9.0 Report Writer? presentada por la autora en la Conferencia DevEssentials Kansas, 2004)
... continuación del artículo Lo nuevo del Generador de Informes en VFP 9.0 - Parte 1

Mejoras en Agrupación de datos

Se han hecho un grupo de mejoras en los Grupos de datos (Data Groups) en el Generador de informes de VFP 9.0 (Report Writer).

Cantidad máxima de grupos de datos

La cantidad máxima depara grupos de datos se elevó de 20 a 74.

Columnas Horizontales

Previamente, los informes con más de una columna definida como horizontal con un Grupo de datos gastaban mucho espacio. La primera posición (fila 1, columna 1) dejaba un espacio en blanco y los datos comenzaban en la columna 2 de la fila 1. Además, una banda blanca se gastaba entre cada grupo de datos, como se muestra en la Figura 36. Incluso si la altura de la banda Encabezado de grupo (Data Group Header) es cero, VFP reservaba un espacio, como se muestra en la Figura 37.

Figura 36. Versiones anteriores de VFP gastaban mucho espacio en blanco al utilizar columnas horizontales con Grupos de datos.

Figura 37. Versiones anteriores de VFP reservaban espacio para la banda Encabezado de grupo, incluso, cuando no estuviera definida.
En VFP 9.0, cambió el comportamiento de los grupos de datos y las columnas horizontales. Cuando reencuentra un nuevo grupo de datos, lo imprime en la columna1 de la siguiente línea completa. El resto de esta fila se deja en blanco y no se utiliza para imprimir detalles. Los detalles pertenecientes a los Grupos de datos comienzan n la columna 1 de la fila inmediatamente después que se imprime la fila del grupo de datos, como se muestra en la Figura 38. Además no se reservan espacios extras para la altura de la banda Encabezado de grupo (Data Group Header), si la altura de la banda es cero, como se muestra en la Figura 39.

Figura 38. VFP 9.0 no gasta espacios como las versiones anteriores cuando se utilizan columnas horizontales y Grupo de datos.

Figura 39. VFP 9.0 no reserva espacios extras para la banda Encabezado de grupo si su altura es cero.
El comportamiento nuevo, aunque evita la situación descrita previamente, puede afectar a algunos informes existentes. Por lo tanto, un beneficio adicional del nuevo comportamiento es que la banda Grupo de datos puede expandirse a través de todas las columnas como se muestra en la Figura 40.

Figura 40. En VFP 9.0, puede expandir la banda Encabezado de grupo a través de múltiples columnas.

Múltiples bandas de detalle (Multiple-Detail Bands)

Además de las mejoras de extensibilidad en el Generador de Informes de VFP 9.0, la posibilidad de tener múltiples bandas de detalle es una de las mejoras más importantes y más solicitadas. Las nuevas características permiten procesar múltiples tablas hijas para cada registro de la tabla padre. Un ejemplo de este tipo de informe se muestra en la Figura 41.

Figura 41. Ejemplo de informe con múltiples bandas de detalles que tiene tres bandas de detalle separadas para cada Cliente (customer).

Tablas y relaciones

La clave para utilizar esta característica es comprender cómo trabajan juntas la tabla padre y las hijas. Como un ejemplo de escenario de múltiples bandas de detalle asuma que está escribiendo el informe mostrado en la Figura 41. La base de datos para este escenario se muestra en la Figura 42.

Figura 42. Un ejemplo de Base de datos de Clientes, Miembros, Vehículos y Viviendas (Customers, Members, Vehicles, Homes) para una compañía de seguros.
La tabla Customer es la tabla padre y contiene un registro para cada cliente de la compañía de seguros. Las tablas Members, Vehicles y Homes son las tablas hijas de la tabla Customer. La tabla Members guarda un registro para cada miembro de la familia del cliente. La tabla Vehicles guarda un registro para cada vehículo del cliente. La tabla Homes guarda un registro para cada vivienda del cliente.

Controlar el Informe

Es necesaria una tabla para manejar o conducir el informe. En este ejemplo, la tabla Customer es la tabla controladora. Si utiliza el Entorno de datos del informe para definir las tablas, establezca esta tabla para la propiedad InitialSelectedAlias. Si utiliza código para definir las tablas, asegúrese de que la tabla Customer está en el área de trabajo actual en el momento de ejecutar el informe.

El "Alias destino"

El target alias – tabla destino - es el término utilizado para describir qué tabla es la tabla conductora para una banda de detalle en particular. En este ejemplo, la tabla Members es el alias destino para la banda de detalle 1, la tabla Vehicles es el alias destino para la banda de detalle 2, y la tabla Homes es el alias destino para la banda de detalle 3.
Si no se define alias destino para una banda de detalle, el comportamiento es igual a las versiones anteriores de VFP. En otras palabras, una banda de detalle se procesa por el registro padre. Sin embargo, si escribe un nombre de tabla padre como alias destino, puede obtener resultados diferentes. Para cada registro de la tabla padre, VFP procesa todos los registros de la tabla padre, imprimiendo cada registro padre en la banda de detalle. Entonces, si tiene una tabla con 10 registros padres, y establece, alias destino de una banda de detalle igual a la tabla padre, el informe final imprimirá 10 conjuntos de 10 registros, un total de 100 registros.

Relaciones

Es importante darse cuenta de que las relaciones juegan una parte importante en cómo operan las múltiples bandas de detalle. VFP utiliza las relaciones entre la tabla padre y las tablas hijas para navegar por los registros. Puede utilizar SET RELATION o SET SKIP para definir estas relaciones. Si está abriendo las tablas en el Entorno de datos y las relaciones ya están definidas en la base de datos, las relaciones son respetadas.
Si está abriendo las tablas por código, el siguiente ejemplo muestra cómo establecer las tablas para el Informe de Clientes de la aseguradora mostrado en la Figura 41.
*-- Abrir las tablas hijas
USE Members IN 0 ORDER CustomerFK
USE Vehicles IN 0 ORDER CustomerFK
USE Homes IN 0 ORDER CustomerFK

*-- Abrir la tabla padre
SELECT 0
USE customer ORDER CustomerPK

*-- Establecer las relaciones entre la tabla padre y las hijas
SET RELATION TO CustomerPK INTO Members
SET RELATION TO CustomerPK INTO Vehicles ADDITIVE
SET RELATION TO CustomerPK INTO Homes ADDITIVE

*-- Ejecutar el informe
REPORT FORM Insurance PREVIEW 

Definir Múltiples bandas de detalle

De forma predeterminada, los informes nuevos, se crean con una sola banda.

Agregar bandas de detalle adicionales

Se agregan bandas de detalle adicionales desde el cuadro de diálogo Bandas opcionales (Optional Bands) mostrado en la Figura 43. Para invocar este cuadro de diálogo, seleccione Bandas opcionales... (Optional Bands...), desde el menú Informe (Report). Este es el mismo cuadro de diálogo que existía antes bajo el nombre Título / Resumen (Title/Summary). Fue renombrado para colocarle la opción adicional que se le agregó.

Figura 43. Utilice el control spinner Detalles (Details) del cuadro de diálogo Bandas Opcionales (Optional Bands) para ajustar la cantidad total de bandas de detalle.
Incremente el valor del control spinner Details hasta el número total de bandas que necesite en el informe. Puede definir hasta 20 bandas de detalle para cada informe. La Figura 44 muestra cómo el Diseñador de informe se encarga de crear tres bandas de detalle.

Figura 44. Este informe de ejemplo tiene definidas tres bandas de detalle

Definir el Alias destino

El alias destino se asigna a la banda de detalle desde el cuadro de diálogo Detalles (Detail) (vea la Figura 45). Este cuadro de diálogo es llamado al seleccionar Modificar bandas... (Edit Bands...), desde el menú Informe (Report) y seleccionar la banda de detalle aplicada. Puede además invocar este cuadro de diálogo al hacer doble clic en la barra gris de la banda de detalle aplicada.

Figura 45. Definir el "Alias destino" para cada banda de detalle en el cuadro de diálogo Detalle (Detail) correspondiente.
El Alias destino es una expresión; por tanto debe colocar el nombre de la tabla entre comillas. Una vez que haya definido cada alias destino, la barra gris que representa la banda de detalle muestra el alias destino (vea Figura 46).

Figura 46. El Diseñador de informes identifica cada banda con un número y con el alias destino asociado, de tal forma que se puede identificar fácilmente las diferentes bandas de detalle.
Al crear informes con múltiples bandas de detalle, es importante poner a cada campo el prefijo con el nombre del alias. Esto evita cualquier confusión con relación a la tabla de la que procede.

Encabezados y pies de bandas

Otra característica de las múltiples bandas de detalle es la habilidad para agregar encabezados y pies para cada banda de detalle. Son similares a los encabezados y pies de grupos en alguna medida, tienen algunas diferencias. Para cada registro padre que se procesa, ocurre lo siguiente:
  • Se procesa el encabezado de la banda 1.
  • Se procesa el detalle de la banda 1 una vez para cada registro hijo en el alias destino asociado.
  • Se procesa el pie de la banda 1.
  • Se procesa el encabezado de la banda 2.
  • Se procesa el detalle de la banda 2 una vez para cada registro hijo en el alias destino asociado.
  • Se procesa el pie de la banda 2.
  • Se procesa el encabezado de la banda 3.
  • Se procesa el detalle de la banda 3 una vez para cada registro hijo en el alias destino asociado.
  • Se procesa el pie de la banda 3.
Para activar los encabezados y pies de bandas, seleccione la casilla de verificación Encabezado / Pie de detalle (Detail Header/Footer) en el cuadro de diálogo Detalle (Detail) para cada una de las bandas de detalle (vea la Figura 45). Para ayudar a ordenar las bandas de detalle desde otras bandas, el triángulo que precede la banda está sólido, en lo que el resto de los triángulos son claros (vea la Figura 47).

Figura 47. La banda de detalle está marcada con triángulos sólidos y todas las otras bandas están marcadas con triángulos abiertos.
Además de identificar cada banda de detalle en el diseñador de informes, el cuadro de diálogo Modificar bandas (Edit Bands) indica además cada encabezado de banda de detalle, banda de detalle y pie de banda de detalle utilizando un número consecutivo de banda. El cuadro de diálogo Modificar bandas (Edit Bands) puede ser llamado seleccionando Modificar bandas... (Edit Bands...) desde el menú Informes (Report) (vea Figura 48).

Figura 48. El cuadro de diálogo Modificar bandas (Edit Bands) utiliza el número consecutivo de cada banda para ayudar a identificar cada banda de detalle, encabezado de banda de detalle y pie de banda de detalle.
Es importante notar que incluso si no hay registros en la banda detalles, de una banda en particular, el encabezado y pie de banda asociados se imprimirán. Si no desea imprimir los encabezados y pies de bandas en esas condiciones, puede utilizar la siguiente expresión para Imprimir cuando (Print when) en cada objeto definido en la banda para suprimir su impresión. Asegúrese además de activar, para cada objeto de la banda, la casilla de verificación Eliminar las líneas en blanco (Remove line if blank).
NOT EOF(<target alias>) 
Los encabezados y pies de banda de detalle tienen algunas de las mismas opciones de los encabezados y pies de grupo. Como se ve en la Figura 45, el cuadro de diálogo Detalle (Detail) tiene algunas opciones nuevas:
  • Comenzar en una columna nueva (Start on a new column): Utilice esta opción para hacer que el conjunto del detalle comience en una nueva columna del informe. Observe que esta opción le permite asignar específicamente un conjunto de detalle a una columna determinada. Si un conjunto de detalles tiene suficiente información que desborde la columna, entonces continúa en la columna siguiente.
  • Comenzar en una página nueva (Start on a new page): Utilice esta opción para hacer que el conjunto del detalle comience en una página nueva.
  • Reiniciar el número de página en 1 para cada conjunto de detalle (Reset page number to 1 for each detail set): Utilice esta opción, junto con la opción Comenzar en una página nueva (Start on a new page), para asignar el 1 al número de página para cada conjunto de detalle.
  • Comenzar un conjunto de detalle en una nueva página cuando quede menos de (Start detail set on new page when less than): Utilice esta opción para evitar bandas huérfanas. El conjunto de detalles comienza en una página nueva si no está disponible la cantidad de espacio indicada.
  • Encabezado / pie de detalle (Detail Header/Footer): Utilice esta opción para agregar un encabezado o pie de banda de detalle.
  • Re-imprimir el encabezado de banda en cada página (Reprint detail header on each page): Utilice esta opción junto con la opción Encabezado / Pie de banda de detalle para lograr que el encabezado de la banda de detalle se reimprima siempre que el conjunto de detalles sobrepase una página.

Variables y Cálculos del informe

Con la introducción de las múltiples bandas de detalle, las variables y cálculos del informe tienen algunas peculiaridades. Es necesario entender completamente como se procesan para utilizarlas con eficiencia. De otro modo, puede obtener resultados inesperados.
El cuadro desplegable Reiniciar en (Reset at) en el cuadro de diálogo Variables del informe (Report Variables) se ha renombrado como Reiniciar basado en (Reset based on). De esta forma se define más claramente que la variable se reinicia basada en los cambios del valor de la opción seleccionada. Además de renombrar el control, si se define en el informe más de una banda, cada banda de detalle se agrega al cuadro desplegable. Vea en la Figura 49 el nuevo cuadro de diálogo para Variables del informe (Report Variables).

Figura 49. Las variables calculadas en el informe tiene algunas opciones nuevas en “Reiniciar basado en” ("Reset based on").
Al seleccionar (Detail on) como valor de Reiniciar en base a (Reset based on), indica a VFP que procese este cálculo sólo para los registros del alias destino de esta banda de detalle. La variable de informe no se altera mientras se procesan los registros en otros alias destino. Esto permite amarrar una variable de informe para una banda de detalle en particular. El valor de la variable no se limpia hasta que el encabezado de esa misma banda de detalle se procesa para el siguiente registro de la tabla padre.
Si selecciona otro valor en Reiniciar en base a (Reset based on) diferente a una banda de detalle, el cálculo se procesa en varios lugares. Primero, se aplica el cálculo para cada registro padre. Segundo, se aplica para cada registro en el alias destino de la primera banda de detalle. Luego, se aplica el cálculo para cada registro en el alias destino de la segunda banda de detalle, etc.
En el informe de dos páginas mostrado en la Figura 50, puede ver un ejemplo de variables de informe calculadas asociadas con bandas de detalle individuales. Puede ver además el Total de registros procesados (Total records processed) al final del informe muestra un valor de 20. Este número representa el total de miembros procesados Members (7), más el total de vehículos procesados Vehicles (7), más el total de viviendas procesadas Homes (3), más el total de clientes procesados Customers (3).


Figura 50. Las variables de informe calculadas se pueden asociar a una banda de detalle o se pueden aplicar a todos los registros procesados.

Misceláneas

Existen algunos elementos adicionales que deben ser explicados en el tema de las múltiples bandas de detalle.

Almacenamiento en el FRX

Las bandas se almacenan en el FRX con OBJTYPE igual a 9, y un valor de OBJCODE que determina qué tipo de banda es. El encabezado de detalle se guarda con 9 para OBJCODE, y el pie de detalle con OBJCODE igual a 10.La nueva expresión para alias destino se guarda en el campo EXPR del registro correspondiente a la banda de detalle.

SUMMARY

Utilizar la cláusula SUMMARY en el comando REPORT FORM evita imprimir la banda de detalle, no así todos los encabezados y pies de páginas, encabezados y pies de columnas y encabezados y pies de grupos. Cualquier expresión On Entry u On Exit en la banda de detalle no se procesa cuando se utiliza la cláusula SUMMARY. Al utilizar la cláusula SUMMARY en un informe con múltiples bandas de detalle, los encabezados y pies de bandas de detalle y las bandas de detalle no se procesan.

Mucho que aprender

Hacerse con el control de las múltiples bandas de detalle puede tomar un tiempo. Hay que entender cómo trabajan todas las tablas juntas, saber qué es un alias destino, y entender la relación entre las tablas. Debe tener también el control sobre cómo se afectan las variables y los cálculos por las múltiples bandas de detalle. Puede que necesite leer esta sección más de una vez antes de entenderlo del todo.

La tabla FRX

Para mantener compatibilidad hacia atrás, el Generador de informes de VFP 9.0 utiliza la misma estructura que versiones anteriores. Para cada registro del FRX, los campos OBJTYPE y OBJCODE se utilizan juntos para definir qué tipo de data contiene el registro. No todos los campos del FRX se aplican a todos los tipos de registro. Por tanto, para acomodar todas las características nuevas del generador de informes, los campos existentes son sobrecargados cuando es necesario.
Otro cambio clave en el Informe de VFP 9.0 es la forma en que se trata el campo USER. Antes de VFP 9.0, era borrado cualquier dato guardado en el campo USER. Este comportamiento anulaba el propósito del campo USER y lo hacía inútil. En VFP 9.0, cualquier dato guardado en el campo USER se guarda y se deja sólo. Se pueden crear campos adicionales en el FRX, ya que son agregados al final del FRX. Cualquier campo adicional es retenido por VFP y no será eliminado.
Además de mantener el campo USER, el Generador de informes de VFP 9.0 retiene también todos los registros de tipos desconocidos. En lugar de eliminarlos del FRX, el Generador de informes retiene estos registros al final del FRX y los ignora durante el procesamiento. Esto brinda la capacidad de agregar sus propios tipos de registro para procesamientos especiales.
Teóricamente, puede además escribir informes en VFP 9.0, y como no está utilizando nada nuevo, puede ejecutar los informes en versiones anteriores de Visual FoxPro. Por supuesto, si agrega nuevos campos o registros al FRX, se destruyen si modifica o guarda el informe en una versión anterior de VFP.

Los registros

Existen diferentes tipos de registros guardados en el metadato del informe. El campo OBJTYPE identifica el tipo de cada registro y el resto de la información del registro varía grandemente, en dependencia del OBJTYPE. En otras palabras, los campos en la tabla tienen múltiples propósitos y necesita conocer el OBJTYPE para descifrar el significado del resto del registro.
Los tipos válidos son los siguientes:
  • Report definition (OBJTYPE = 1): El primer registro en la tabla es el registro de definición de informe. Contiene información general sobre el informe, como puede ser información de impresión e información de configuración de página. Existe un registro de definición de informe por cada tabla.
  • Report objects: Algunos tipos de objetos diferentes son utilizados como formas, texto, datos y gráficos en un informe. Colectivamente, estos objetos se referencias como objetos de informe (Report objects) y tienen los siguientes tipos:
    • Label (OBJTYPE = 5): Un objeto etiqueta (label) es un término utilizado para describir una pieza estática de texto colocada en un informe. Es utilizado comúnmente para títulos de informe, títulos de columnas, nombres de compañías, y otra información que no cambia cada vez que se imprime el informe. Cada objeto label en un informe se representa por un registro de la tabla.
    • Line (OBJTYPE = 6): Un objeto línea (line) es utilizado para representar líneas horizontales y verticales en un informe. Cada objeto line en un informe se representa por un registro de la tabla.
    • Shape (OBJTYPE = 7): Un objeto forma (shape) se utiliza para representar rectángulos y rectángulos redondeados en un informe. Cada shape en un informe se representa por un registro de la tabla.
    • Field (OBJTYPE = 8): Un objeto campo (field) es uno de los objetos más comúnmente utilizados en un informe. Se utiliza para imprimir datos en un informe. Los datos pueden ser un campo de una tabla o el resultado de una expresión. Se puede utilizar incluso cálculos internos que trae el Generador de informes de VFP para obtener los resultados. Cada field en un informe se representa por un registro de la tabla.
    • Picture (OBJTYPE = 17): Un objeto imagen (picture) se utiliza para representar un control Picture/ActiveX Bound en un informe. Cada Picture/ActiveX en un informe se representa por un registro de la tabla.
  • Band (OBJTYPE = 9): Un objeto banda band) se utiliza para representar una banda individual de un informe. Como mínimo, todos los informes tienen tres objetos de banda: encabezado de página, detalle y pie de página (page header, detail, y page footer). Un informe puede contener además varias bandas opcionales título, encabezado de columna, encabezado de grupo, pie de columna, pie de grupo, resumen, encabezado de detalle y pie de detalle (title, column header, data group header, column footer, data group footer, summary, detail header, y detail footer).
  • Group (OBJTYPE = 10): Un objeto grupo (group) se utiliza para representar un grupo de objetos de informe que han sido agrupados juntos utilizando la opción Agrupar (Group) del menú Formato (Format) desde el Diseñador de informe (no confundir con las agrupaciones de datos).
  • Variable (OBJTYPE = 18): Un objeto variable se utiliza para representar una variable individual del informe. Cada variable en un informe se representa por un registro de la tabla.
  • Font (OBJTYPE = 23): Un objeto fuente (font) se utiliza para representar una única fuente utilizada en cualquier lugar del informe. Cada tipo diferente de fuente del informe es representada por un registro de objeto font. Como mínimo, existe un objeto font (para la fuente predeterminada).
  • Data Environment (OBJTYPE = 25): Un objeto entorno de datos (data environment) se utiliza para representar el entorno de datos de un informe. Todas las propiedades y métodos del entorno de datos se almacenan en este registro. Existe un registro data environment para cada tabla FRX.
  • Data (OBJTYPE = 26): Un objeto dato (data) se utiliza para representar lo mismo un objeto cursor o un objeto relación. Cada objeto cursor o relation que esté definido en el Entorno de datos de un informe se representa por un registro de la tabla.
Los registros se colocan en la tabla en un orden físico específico y es importante respetar ese orden si se agregan nuevos registros mediante programación. Puede utilizar el comando SORT para copiar los registros a tablas temporales y luego devolverlos a la tabla del informe en el orden correcto, que es el siguiente:
  • Registro Definición de informe (OBJTYPE = 1)
  • Registros de bandas (OBJTYPE = 9). Las bandas se agregan a la tabla en orden ascendente del campo OBJCODE, con las siguientes excepciones:
    • Cuando se definen en el informe múltiples grupos de datos...
      ...las bandas encabezado de grupo (objcode = 3) se agregan en el mismo orden en el que aparecen en el cuadro de diálogo Agrupar datos Data Grouping.
      ...las bandas pie de grupo (objcode = 5) se agregan en el orden opuesto al que aparecen en el cuadro de diálogo Agrupar datos.
    • Cuando se definen múltiples bandas de detalle en un informe, la primera banda de detalles, las bandas encabezado, detalle y pie se agregan como un conjunto. Entonces, se agrega el conjunto de bandas de la segunda banda de detalle, etc.
  • Los objetos del informe (OBJTYPE = 5, 6, 7, 8 y 17) se agregan en el orden de su Z-Order, donde el objeto que se encuentra arriba de todos se agrega primero.
  • Registros de objetos Grupo (OBJTYPE = 10)
  • Registros de variables de informe (OBJTYPE = 18). Los registros de variable de informe se agregan a la tabla en el mismo orden que aparecen en el cuadro de diálogo Variables de informe (Report Variable).
  • Registros de fuente (OBJTYPE = 23)
  • Registros de entorno de datos (OBJTYPE = 25)
  • Registros de datos (OBJTYPE = 26) se agregan en el orden en que son agregados al entorno.

La unidad de medida

Visual FoxPro utiliza su propia unidad de medida FoxPro Report Units (FRU), al referirse al tamaño y ubicación de los objetos en el informe. Si el sistema está fijado en pulgadas, la unidad de medida es 1/10,000 de una pulgada. Si el sistema está fijado en centímetros, la unidad de medida es 1/1,000 de un centímetro.

La posición

No existen campos en la tabla que representen a que banda pertenece cada objeto. En su lugar Visual FoxPro determina la banda calculando la altura definida para cada banda, el VPOS del objeto y entonces determina en que banda entra un VPOS determinado.
Al mirar a la altura de cada banda, sin embargo VFP toma en cuenta la altura de la banda gris horizontal que representa cada banda al mostrarlo en la pantalla en el Diseñador de informes. El valor para la altura de la banda gris es 2083.33333333 al utilizar pulgadas y 529.16666667 al utilizar centímetros.

Los campos

Describir lo que representa cada campo es difícil porque los campos pueden ser utilizados con diferentes propósitos, en dependencia del OBJTYPE particular para cada registro. La Tabla 2 lista cada campo y el significado para los diferentes tipos de objetos.
Además de la Tabla 2, Microsoft proporciona una DBF que contiene información sobre las tablas FRX. Esta DBF ha sido actualizada para VFP 9.0 y se localiza en el directorio HOME() + 'toolsfilespec'.

CampoOBJTYPEDescripción
PLATFORMTodosSiempre "WINDOWS"
UNIQUEIDTodos excepto:
0-Comment
23-Font
25-Data Environment
26-Data
Es el identificador único de la mayoría de los registros. Puede utilizar SYS(2015) para crear un valor personalizado al agregar registros.
TIMESTAMPTodos excepto:
21-Printer driver (2.x)
23-Font
25-Data Environment
26-Data
Información sobre cuándo fue modificado el registro por última vez.
OBJTYPE0-49 reservados para uso nativo.
50-99 disponibles para uso del usuario.
0 = Comment
1 = Report Definition
2 = Work area (2.x reports)
3 = Index (2.x reports)
4 = Relations (2.x reports)
5 = Label
6 = Line
7 = Shape
8 = Field
9 = Band
10 = Grouped objects (no Data Groups)
17 = Picture / OLE Bound
18 = Variable
21 = Printer driver setup (2.x reports)
23 = Font
25 = Data Environment
26 = Data (Cursor, Relation, o cursor adapter)
OBJCODECuando el campo OBJTYPE no es suficiente para identificar un tipo de registro, se utiliza el campo OBJCODE para identificación adicional del registro.
1-Report DefinitionSiempre 53.
2-Work area (2.x)Área de trabajo de la tabla.
3-Index (2.x)Área de trabajo del IDX.
4-Relation (2.x)Área  de trabajo de tabla hija.
5-Label
6-Line
8-Field
10-Group
17-Picture
Siempre 0.
7-ShapeSiempre 4.
9-BandDescribe el tipo de banda:
0 = Title
1 = Page Header
2 = Column Header
3 = Group Header
4 = Detail
5 = Group Footer
6 = Column Footer
7 = Page Footer
8 = Summary
9 = Detail Header
10 = Detail Footer
NAME2-Work area (2.x)Nombre del archivo de la tabla.
3-Index (2.x)Nombre del archivo IDX.
8-FieldEncabezado en tiempo de diseño.
17-PictureSi se define como Imagen desde archivo (Picture from File), y se selecciona un archivo de imagen (picture file), está en blanco.
Si se define como Imagen desde archivo (Picture from File), y se introduce una expresión, contiene la expresión.
Si se define como (Picture from Field), contiene el nombre del campo general.
18-VariablesNombre de las variables.
21-Printer driver (2.x)Nombre de la impresora configurada.
25-Data Environment"dataenvironment"
26-Data"cursor" para cursores
"relation" para relaciones
"cursoradapter" para cursor adapters
EXPR1-Report DefinitionInformación del Controlador de impresora (Printer driver) y la configuración de impresora.
3-Index (2.x)Expresión de orden.
4-Relation (2.x)Expresión de relación.
5-LabelTexto de los objetos etiqueta (Label).
8-FieldExpresión de objeto campo (Field).
9-Band/Group HeaderExpresión de Agrupación de datos (Data Group).
9-Band/DetailExpresión de Alias destino.
18-VariablesExpresión de Almacenar valor (Value to store).
25-Data Environment
26-Data
Propiedades del Entorno de datos o del objeto Data.
VPOS1-Report DefinitionCantidad de conjuntos de columnas.
10-GroupEste número representa el primer objeto incluido en este grupo. Se basa en el Z-Order de los objetos del informe. Sin embargo, los objetos agrupados pueden pertenecer a otros objetos agrupados. Cuando ocurre esto, el grupo de objetos entero se cuenta únicamente una vez que se haya determinado este número.
23-FontAltura de los caracteres, en pixels, FONTMETRIC(1).
Report objectsPosición vertical de los objetos, en FRUs.
HPOS1-Report DefinitionMargen izquierdo, en FRUs.
Relativo al margen de impresión si se selecciona Página imprimible (Printable page).
Relativo al borde físico del papel si se selecciona Toda la página (Whole page).
10-GroupEste número representa el total de objetos de informe en este grupo. Sin embargo si los objetos agrupados se incluyen en otro grupo, todo el grupo se cuenta como un único objeto.
23-FontEl ancho promedio de los caracteres en pixels, FONTMETRIC(6).
Report objectsPosición horizontal de los objetos en, FRUs.
HEIGHT1-Report DefinitionEspacio entre columnas, en FRUs.
9-BandAltura de la banda, en FRUs.
23-FontLo que sube el carácter en pixels, FONTMETRIC(2).
Report objectsAltura de los objetos, en FRUs.
WIDTH1-Report DefinitionAncho de cada columna, en FRUs.
9-Band/Detail
9-Band/Group Header
Valor de Comenzar grupo en nueva página cuando se menor que (Start group on new page when less than) en el cuadro de diálogo Agrupr datos (Data Grouping) del cuadro de diálogo Detalle (Detail), en FRUs.
23-FontAncho máximo de caracteres en pixels, FONTMETRIC(7).
Report objectsAncho de los objetos, en FRUs.
STYLE1-Report DefinitionSi el informe utiliza una clase DataEnvironment o ha copiado el Entorno de datos de otro informe, contiene el XML con el entorno de datos.
2.x report objectsB = Negrita - Bold
I = Cursuva - Italic
R = Sobreíndice - Raised
L = Subíndice - Lowered
J = Alineada a la derecha
C = Alineada al centro
PICTURE5-LabelContiene el formato de alineación de los caracteres.
8-FieldExpresión escrita en el cuadro de texto Formato (Format) en el cuadro de diálogo Expresión de informe (Report Expresión). Si se selecciona  Interleave, la expresión de formato inicia con @R.
17-PictureSi se definió como Picture from File, y se escogió un archivo de imagen, este contiene la ruta relativa y nombre del archivo.
Si se definió como Picture from File, ay se introduce una expresión, está en blanco.
Si se definió como Picture from Field, está en blanco.
ORDERTodos—anterior a  VFP 9.0No se utiliza.
Todos—VFP 9.0Continene un valor de caracteres que representa un valor numérico (las marcas binarias sumadas) para identificar niveles de protección.
Objectos (bit, valor, significado)
0, 1, Lock (movido o redimensionado)
1, 2, Hide (visible)
2, 4, No eliminar
3, 8, No modificar
6, 64, No seleccionar
Bandas (bit, valor, significado)
4, 16, No modificar
14, 16384, No redimensionar
Informe (bit, valor, significado)
7, 128, No hacer presentación preliminar
8, 256, No permitir bandas opcionales
9, 512, No permitir agrupaciones de datos
10, 1024, No permitir variables
11, 2048, No mostrar Configurar página
12, 4096, No permitir selección múltiple
13, 8192, No mostrar Entorno de datos
15, 32768, No imprimir
16, 65536, No permitir Informe rápido
UNIQUE1-Report Definition.T. = Informe generado temporalmente por el asistente 
.F. = Informe permanente
2-Work area (2.x).T. = Existe un índice activo para esta área de trabajo
.F. = No existe un índice activo para esta área de trabajo
18-VariableSe corresponde con la casilla de verificación Liberar tras informe (Release after report) en el cuadro de diálogo Variables de informe (Report Variables).
COMMENTTodosSe corresponde con el cuadro de edición Comentarios (Comments).
ENVIRON25-Data Environment.T. = Sesión de datos Privada
.F. = Sesión de datos Predeterminada
BOXCHARTodosNo se utiliza
FILLCHAR8-FieldC para campos de caracteres.
N para campos numéricos.
D para campos Fecha.
TAG1-Report DefinitionInformación binaria del controlador de impresora.
2-Work area (2.x)Alias del área de trabajo.
9-BandValor de la expresión Al entrar (On Entry).
18-VariableValor inicial (Initial value).
25-Data Environment
26-Data
Contiene el código de eventos y métodos.
TAG21-Report DefinitionInformación binaria del controlador de impresora.
9-BandValor de la expresión Al salir (On Exit).
25-Data Environment
26-Data
Contiene el código compilado de eventos y métodos.
PENRED23-FontLo que baja el carácter en pixels, FONTMETRIC(3).
Report objectsColor de primer plano Red como en RGB().
PENGREEN23-FontMargen extra en pixels, FONTMETRIC(5).
Report objectsColor de primer plano Green como en RGB().
PENBLUEReport objectsColor de primer plano Blue como en RGB().
FILLREDReport objectsColor de fondo Red como en in RGB().
FILLGREENReport objectsColor de fondo Green como en RGB().
FILLBLUEReport objectsColor de fondo Blue como en RGB().
PENSIZE6-Line
7-Shape
Tamaño del borde (cuando selecciona Borde (Pen) desde el menú Formato (Format) y escoge uno de los trazos de línea sólida).
0 = Trazo fino
1 = 1 Punto
2 = 2 Puntos
4 = 4 Puntos
6 = 6 Puntos
El ancho completo de la línea no será visible a menos que altura HEIGHT o ancho WIDTH sea (PENSIZE x 104.167).
PENPAT6-Line
7-Shape
Patrón de línea (Seleccionar Borde (Pen) en el menú Formato (Format) y escoger uno de los bordes con línea no sólida).
0 = Ninguno (None)
1 = Punteado (Dotted)
2 = Con guión (Dashed)
3 = Guión-Punto (DashDot)
4 = Guión-Punto-Punto (DashDotDot)
8 = Normal/Sólido (Normal/Solid
FILLPAT7-ShapePatrón de relleno (Seleccionar Relleno (Fill) del menú Format (Format).
0 = Ninguno
1 = Sólido
2 = Líneas horizontales
3 = Líneas verticales
4 = Líneas diagonales, ladeadas a la izquierda
5 = Líneas diagonales, ladeadas a la derecha
6 = Cuadrícula (líneas horizontales y verticales)
7 = Trama (líneas diagonales a izquierda y derecha)
FONTFACE1-Report DefinitionNombre de la fuente para la Fuente predeterminada.
5-Label
8-Field
23-Font
Nombre de la fuente.
FONTSTYLE1-Report Definition
5-Label
8-Field
23-Font
0 = Normal
1 = Negrita (Bold)
2 = Cursiva (Italic)
4 = Subrayada (Underlined)
128 = Tachada (Strikethrough)
Los números pueden combinarse para lograr múltiples estilos de fuente.
FONTSIZE1-Report Definition
5-Label
8-Field
23-Font
Tamaño de la fuente.
MODEReport objectsModo (Mode)
0 = Opaco
1 = Transparente
Orden de lectura (Reading Order)
0 = De izquierda a derecha
2 = De derecha a izquierda
4 = Contextual
Los valores de Modo y Orden de lectura se agregan juntos.
RULER1-Report Definition0 = Sin regla
1 = La medida de la regla es pulgadas
2 = La medida de la regla es métrica
3 = La medida de la regla es pixels
4 = La medida de la regla es carácter (1/12")
5 = La regla respeta el sistema predeterminado actual
RULERLINES1-Report Definition0 = No muestra las Líneas de cuadrícula en el Diseñador de informes
1 = Muestra las Líneas de cuadrícula en el Diseñador de informes
8-FieldSe corresponde con la opción Modo de recorte para expresiones de caracteres (Trim mode for character expressions) del cuadro de diálogo Formato (Format).
0 = Recorte predeterminado  (Default trimming)
1 = Recortar al carácter más cercano (Trim to nearest character)
2 = Recortar a la palabra más cercana (Trim to nearest word)
3 = Recortar al carácter más cercano con puntos suspensivos adicionales (Trim to nearest character, append ellipsis)
5 = Especificar nombre de archivo como puntos suspensivos (Show inner path as ellipsis)
6 = Recortar a la palabra más cercana con puntos suspensivos adicionales (Trim to nearest word, append ellipsis)
GRID1-Report Definition.T. = Está activado Ajustar a la cuadrícula (Snap to Grid)
.F. = No está activado Ajustar a la cuadrícula
GRIDV1-Report DefinitionEspacio vertical de las líneas de cuadrícula, en pixels.
GRIDH1-Report DefinitionEspacio horizontal de las líneas de cuadrícula, en pixels.
FLOATReport objectsValor de la opción Flotante (Float) del cuadro del diálogo Propiedades (Property) del objeto.
STRETCH6-Line
7-Shape
Valor de la opción Expandir relativo a la altura de la banda flotante (Stretch relative to height of band Float) del cuadro del diálogo Propiedades (Property) del objeto.
8-FieldValor de la opción Ajustar al contenido del texto Expandir con desbordamiento (Stretch with overflow) del cuadro del diálogo Propiedades (Property) del objeto 
STRETCHTOP6-Line
7-Shape
Valor de la opción de la casilla de verificación Expandir relativo al objeto más alto del grupo (Stretch relative to tallest object in group) del cuadro del diálogo Propiedades (Property) del objeto
TOP1-Report Definition.T. = El área imprimible es Toda la página  (Whole page)
.F. = El área imprimible es Página imprimible (Printable page)
Report objectsSe corresponde con el valor de la opción (Fix relative to top of band) en el cuadro de diálogo (Property) para el objeto
BOTTOM1-Report Definition.T. = Conjunto de múltiples columnas se imprimen en el orden de izquierda a derecha
.F. = Conjunto de múltiples columnas se imprimen en orden de arriba a abajo
Report objectsSe corresponde con el valor de la opción Fijar relativo al inicio de banda (Fix relative to bottom of band) en el cuadro de diálogo Propiedades (Property).
SUPTYPETodosNo se utiliza.
SUPRESTTodosNo se utiliza.
NOREPEATReport objectsSe corresponde con el valor de la casilla de verificación Quitar líneas en blanco (Remove line if blank) en el cuadro de diálogo Imprimir cuando (Print when).
9-Bands/DetailSe corresponde con el valor de la casilla de verificación Repetir encabezado de detalle en cada página (Repeat detail header on each page) en el cuadro de diálogo Detalle (Detail).
RESETRPTTodosNo se utiliza.
PAGEBREAK9-Band/TitleSe imprime la banda Título en una página propia.
9-Band/Group HeaderSe corresponde con el valor de la casilla de verificación Comenzar cada grupo en una página nueva (Start each group on a new page) en el cuadro de diálogo (Data Grouping).
9-Band/Group FooterCoincide con el registro encabezado de Grupo.
9-Band/SummarySe imprime la banda Resumen en una página propia.
9-Band/Detail HeaderSe corresponde con la casilla de verificación Comenzar en una nueva página (Start on a new page) en el cuadro de diálogo Detalle (Detail).
9-Band/Detail FooterCoincide con el registro encabezado de detalle.
COLBREAK9-Band/Group HeaderSe corresponde con el valor de la casilla de verificación Comenzar grupo en nueva columna (Start group on new column) en el cuadro de diálogo (Data Grouping).
9-Band/Group FooterCoincide con el registro encabezado de grupo.
9-Band/Detail HeaderSe corresponde con el valor de la casilla de verificación (Start on a new column) en el cuadro de diálogo (Detail).
9-Band/Detail FooterCoincide con el registro encabezado de la banda detalle.
RESETPAGE9-Band/Group HeaderSe corresponde con el valor de la casilla de verificación Iniciar el número de página en 1 para cada grupo (Reset page number to 1 for each group) en el cuadro de diálogo Agrupar datos (Data Grouping).
9-Band/Group FooterCoincide con el registro encabezado de grupo.
9-Band/Detail HeaderSe corresponde con el valor de la casilla de verificación Iniciar el número de página para cada conjunto de detalle (Reset Page Number to 1 for each Detail Set) en el cuadro de diálogo Detalle (Detail).
9-Band/Detail FooterCoincide con el registro encabezado de detalle.
GENERAL17-PicturesConfiguración de recorte/ escala (Clip/Scale):
0 = Recortar imagen (Clip)
1 = Cambiar la escala de la imagen, conservar la forma (Scale retain shape)
2 = Cambiar la escala de la imagen, rellenar el marco (Scale and fill frame)
SPACING5-Label 0 = Sencillo
1 = 1.5
2 = Doble
8-Field Siempre es 0.
DOUBLE17-PicturesSe corresponde con el valor de la casilla de verificación Centrar imagen (Center picture) en el cuadro de diálogo Propiedades  (Property) del objeto.
1-Report Definition
Report objects
.T. indica el FontCharSet aplicado a este objeto (Ver RESOID)
SWAPHEADERTodosNo se utiliza.
SWAPFOOTERTodosNo se utiliza.
EJECTBEFOR9-Band/SummaryImprimir encabezado de página.
EJECTAFTER9-Band/SummaryImprimir pie de página.
PLAIN1-Report DefinitionSe corresponde con el valor de Agregar solamente Alias no seleccionado (Add non-selected alias only) en el cuadro de diálogo (Expression Builder Options). (Un valor de .T. tiene prioridad sobre el valor de ADDALIAS.)
9-Band.T. = Altura de banda constante
SUMMARYTodosNo se utiliza.
ADDALIAS1-Report DefinitionSe corresponde con el valor de Aliases en el cuadro de diálogo (Expression Builder Options).
.T. si se seleccionó Siempre agregar alias  (Always add alias).
.F. si se seleccionó Nunca agregar alias (Never add alias) (Un valor  .T. en el campo PLAIN tiene preferencia sobre este valor.)
OFFSET6-LineSiempre 1.
7-ShapeRadio utilizado en objetos cuadrados redondeados (los cuadros de diálogo predeterminados utilizados son 12, 16, 24, 32, y 99).
8-Field0 = Alinear a la izquierda
1 = Alinear a la derecha
2 = Alinear al centro
17-PictureIndica archivo o campo general:
0 = Nombre de archivo (almacenado en el campo PICTURE)
1 = Campo General (almacenado en el campo NAME)
2 = Expresión (almacenado en el campo NAME)
TOPMARGINTodosNo se utiliza.
BOTMARGINTodosNo se utiliza.
TOTALTYPE8-Field
18-Variable
Tipos de cálculos:
0 = Nada
1 = Contar
2 = Sumar
3 = Promedio
4 = Mínimo
5 = Máximo
6 = Desviación estándar
7 = Varianza
RESETTOTALCuando TOTALTYPE<>0
8-Field
18-Variable
Determina cuando se reinicia el cálculo:
1 = Al final del informe
2 = Al final de la página
3 = Al final de la columna
5+ = Al final del grupo de datos donde el grupo de datos es (por ejemplo, 6 reinicia el cálculo para el Grupo de datos 1, 7 reinicia el cálculo para el Grupo de datos 2, etc.)
79+ = Al final de la banda de detalle es el número de la banda de detalle (por ejemplo, 80 reinicia el cálculo al conjunto de detalle 1, 81 reinicia el cálculo al conjunto de detalle 2, etc.)
Cuando TOTALTYPE=0
8-Field
Si existe una banda de detalle:
1 = Reiniciar en el grupo/ la banda más interna
Si existen múltiples bandas de detalle:
1 = Reiniciar en el objeto banda de detalle
Cuando TOTALTYPE=0
18-Variable
1 = Reiniciar al final del informe
RESOID1-Report Definition
Report objects
Indica que el FontCharSet aplica para este objeto (o todo el informe).
CURPOS1-Report Definition.T. = Mostrar posición está en ON
.F. = Mostrar posición está en OFF
SUPALWAYS7-ShapeSe corresponde con el valor de Imprimir valores repetidos (Print repeated values) en el cuadro de diálogo (Print when), pero el al revés (observe que este campo y el campo SUPVALCHG se establecen para formas - shapes).
.T. = No
.F. = Si
SUPOVFLOWReport objectsSe corresponde con el valor de (When detail overflows to new page/column) check box en el cuadro de diálogo (Print when).
SUPRCOLReport objectsSe corresponde con el valor de (In first whole band of new page/column) en el cuadro de diálogo (Print when) (0 = sin marcar, 3 = marcado).
SUPGROUPReport objectsSe corresponde con el valor del cuadro desplegable  Imprimir cuando cambia este grupo (When this group changes). Los números son 5+ el número del grupo (por ejemplo, un 6 significa un Data Group 1, un 7 significa un Data Group 2, etc.)
SUPVALCHGReport objectsSe corresponde con el valor del grupo de opciones  Imprimir valores repetidos (Print repeated values) en el cuadro de diálogo (Print when), se incluye por compatibilidad hacia atrás.
.T. = No
.F. = Si
SUPEXPRReport objectsSe corresponde con el valor de Imprimir sólo cuando la expresión es verdadera (Print only when expression is true) en el cuadro de diálogo Imprimir cuando (Print when).
USERTodosDisponible para el uso del desarrollador
Tabla 2. Estructura de la tabla de un informe de VFP 9.0 (FRX)

Conclusión

El Generador de informes de VFP 9.0 Report Writer tiene muchas posibilidades nuevas que ayudan al desarrollador a crear mejores informes. Las características de extensibilidad exponen los trabajos internos del Generador de informes de VFP. Los nuevos entornos de datos reutilizables permiten compartir entornos entre informes. Varios aspectos como objetos y bandas, pueden ser protegidos. Una mejor experiencia de desarrollo se crea a través de la nueva interfaz de usuario. El nuevo diseño de objetos, las características para aplicaciones internacionales, mejoras en la impresión, y las mejoras en la agrupación de datos ofrecen muchas más opciones que las que se disponía antes. Y finalmente, las múltiples bandas de detalle, abre muchas oportunidades nuevas para los informes. Todas estas mejoras juntas brindan la posibilidad de crear informes más complejos que nunca antes.

Biografía

Cathy Pountney es Microsoft Visual FoxPro MVP. Hace 22 años que desarrolla aplicaciones, trece de los cuales como Consultora independiente, especializada en FoxPro. En 2001 tuvo el privilegio de pasar seis meses como contratista en Redmond con el Microsoft Fox Team. Actualmente trabaja para Optimal Solutions desarrollando aplicaciones VFP para escuelas. Cathy ha hablado en numerosas conferencias y grupos de usuarios de FoxPro a lo largo de los EEUU, ha escrito artículos para varias revistas, y su libro, The Visual FoxPro Report Writer: Pushing it to the Limit and Beyond, está disponible en Hentzenwerke Publishing. Puede contactar a Cathy en cathy@frontier2000.com, ver su sitio web en www.frontier2000.com, y ver el sitio web de Optimal Solutions en www.optimalinternet.com.

3 comentarios :

  1. Muy buena y organizada la informacion, gracias.

    ResponderBorrar
  2. Buenas tardes, quisiera saber si en el informe de foxpro, se puede agregar una hoja adicional al informe original, es decir necesito imprimir una hoja adicional en ciertas ocasiones esta hoja la quiero poner al final en una hoja independiente, hay forma de hacer esto, cabe mencionar que no tengo acceso a los formularios, únicamente al informe ya que utilizo un sistema comercial pero tengo permisos para modificar los informes. Muchas gracias.

    ResponderBorrar
  3. hola. mu buen aporte. Queria saber si se puede agregar un fondo en la parte de detalle del informe. como un logo de empresa. Gracias!!!!

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.