Hola invitado         31 Jul, 2010 - 07:34
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
Lo nuevo del Generador de Informes en VFP 9.0 - Parte 2 lecturas 11818
 Enviado por amby en Miércoles, 19 Enero, 2005
Artículos Segunda parte del artículo que se corresponde con la sesión "What is new in the Visual FoxPro 9.0 Report Writer?" presentada por Cathy Pountney en la Conferencia DevEssentials Kansas, 2004 En esta segunda parte, la autora explica las mejoras en la agrupación de datos y además, aprenderemos sobre dos de los mayores avances del Generador de informes en Visual FoxPro 9.0: múltiples bandas de detalles y extensibilidad. Finalmente, veremos detalles sobre la estructura de la tabla de informes de Visual FoxPro (FRX).

... continuación del artículo Lo nuevo del Generador de Informes en VFP 9.0 - Parte 1

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

Por: Cathy Pountney (http://msdn.microsoft.com/library/en-us/dnfoxgen9/html/VFP9Reports1.asp)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)
Agosto 2004
Se aplica a: Visual FoxPro 9.0


(Sesión What is new in the Visual FoxPro 9.0 Report Writer? presentada por la autora en la Conferencia DevEssentials Kansas, 2004)


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
PLATFORM Todos Siempre "WINDOWS"
UNIQUEID Todos 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.
TIMESTAMP Todos 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.
OBJTYPE   0-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)
OBJCODE   Cuando 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 Definition Siempre 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-Shape Siempre 4.
  9-Band Describe 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
NAME 2-Work area (2.x) Nombre del archivo de la tabla.
  3-Index (2.x) Nombre del archivo IDX.
  8-Field Encabezado en tiempo de diseño.
  17-Picture Si 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-Variables Nombre 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
EXPR 1-Report Definition Informació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-Label Texto de los objetos etiqueta (Label).
  8-Field Expresión de objeto campo (Field).
  9-Band/Group Header Expresión de Agrupación de datos (Data Group).
  9-Band/Detail Expresión de Alias destino.
  18-Variables Expresión de Almacenar valor (Value to store).
  25-Data Environment
26-Data
Propiedades del Entorno de datos o del objeto Data.
VPOS 1-Report Definition Cantidad de conjuntos de columnas.
  10-Group Este 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-Font Altura de los caracteres, en pixels, FONTMETRIC(1).
  Report objects Posición vertical de los objetos, en FRUs.
HPOS 1-Report Definition Margen 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-Group Este 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-Font El ancho promedio de los caracteres en pixels, FONTMETRIC(6).
  Report objects Posición horizontal de los objetos en, FRUs.
HEIGHT 1-Report Definition Espacio entre columnas, en FRUs.
  9-Band Altura de la banda, en FRUs.
  23-Font Lo que sube el carácter en pixels, FONTMETRIC(2).
  Report objects Altura de los objetos, en FRUs.
WIDTH 1-Report Definition Ancho 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-Font Ancho máximo de caracteres en pixels, FONTMETRIC(7).
  Report objects Ancho de los objetos, en FRUs.
STYLE 1-Report Definition Si 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 objects B = Negrita - Bold
I = Cursuva - Italic
R = Sobreíndice - Raised
L = Subíndice - Lowered
J = Alineada a la derecha
C = Alineada al centro
PICTURE 5-Label Contiene el formato de alineación de los caracteres.
  8-Field Expresió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-Picture Si 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.
ORDER Todos—anterior a  VFP 9.0 No se utiliza.
  Todos—VFP 9.0 Continene 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
UNIQUE 1-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-Variable Se corresponde con la casilla de verificación Liberar tras informe (Release after report) en el cuadro de diálogo Variables de informe (Report Variables).
COMMENT Todos Se corresponde con el cuadro de edición Comentarios (Comments).
ENVIRON 25-Data Environment .T. = Sesión de datos Privada
.F. = Sesión de datos Predeterminada
BOXCHAR Todos No se utiliza
FILLCHAR 8-Field C para campos de caracteres.
N para campos numéricos.
D para campos Fecha.
TAG 1-Report Definition Información binaria del controlador de impresora.
  2-Work area (2.x) Alias del área de trabajo.
  9-Band Valor de la expresión Al entrar (On Entry).
  18-Variable Valor inicial (Initial value).
  25-Data Environment
26-Data
Contiene el código de eventos y métodos.
TAG2 1-Report Definition Información binaria del controlador de impresora.
  9-Band Valor de la expresión Al salir (On Exit).
  25-Data Environment
26-Data
Contiene el código compilado de eventos y métodos.
 
PENRED 23-Font Lo que baja el carácter en pixels, FONTMETRIC(3).
  Report objects Color de primer plano Red como en RGB().
PENGREEN 23-Font Margen extra en pixels, FONTMETRIC(5).
  Report objects Color de primer plano Green como en RGB().
PENBLUE Report objects Color de primer plano Blue como en RGB().
FILLRED Report objects Color de fondo Red como en in RGB().
FILLGREEN Report objects Color de fondo Green como en RGB().
FILLBLUE Report objects Color de fondo Blue como en RGB().
PENSIZE 6-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).
PENPAT 6-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
FILLPAT 7-Shape Patró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)
FONTFACE 1-Report Definition Nombre de la fuente para la Fuente predeterminada.
  5-Label
8-Field
23-Font
Nombre de la fuente.
FONTSTYLE 1-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.
FONTSIZE 1-Report Definition
5-Label
8-Field
23-Font
Tamaño de la fuente.
MODE Report objects Modo (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.
RULER 1-Report Definition 0 = 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
RULERLINES 1-Report Definition 0 = 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-Field Se 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)
GRID 1-Report Definition .T. = Está activado Ajustar a la cuadrícula (Snap to Grid)
.F. = No está activado Ajustar a la cuadrícula
GRIDV 1-Report Definition Espacio vertical de las líneas de cuadrícula, en pixels.
GRIDH 1-Report Definition Espacio horizontal de las líneas de cuadrícula, en pixels.
FLOAT Report objects Valor de la opción Flotante (Float) del cuadro del diálogo Propiedades (Property) del objeto.
STRETCH 6-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-Field Valor de la opción Ajustar al contenido del texto Expandir con desbordamiento (Stretch with overflow) del cuadro del diálogo Propiedades (Property) del objeto 
STRETCHTOP 6-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
TOP 1-Report Definition .T. = El área imprimible es Toda la página  (Whole page)
.F. = El área imprimible es Página imprimible (Printable page)
  Report objects Se corresponde con el valor de la opción (Fix relative to top of band) en el cuadro de diálogo (Property) para el objeto
BOTTOM 1-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 objects Se 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).
SUPTYPE Todos No se utiliza.
SUPREST Todos No se utiliza.
NOREPEAT Report objects Se 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/Detail Se 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).
RESETRPT Todos No se utiliza.
PAGEBREAK 9-Band/Title Se imprime la banda Título en una página propia.
  9-Band/Group Header Se 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 Footer Coincide con el registro encabezado de Grupo.
  9-Band/Summary Se imprime la banda Resumen en una página propia.
  9-Band/Detail Header Se 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 Footer Coincide con el registro encabezado de detalle.
COLBREAK 9-Band/Group Header Se 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 Footer Coincide con el registro encabezado de grupo.
  9-Band/Detail Header Se 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 Footer Coincide con el registro encabezado de la banda detalle.
RESETPAGE 9-Band/Group Header Se 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 Footer Coincide con el registro encabezado de grupo.
  9-Band/Detail Header Se 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 Footer Coincide con el registro encabezado de detalle.
GENERAL 17-Pictures Configuració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)
SPACING 5-Label 0 = Sencillo
1 = 1.5
2 = Doble
  8-Field Siempre es 0.
DOUBLE 17-Pictures Se 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)
SWAPHEADER Todos No se utiliza.
SWAPFOOTER Todos No se utiliza.
EJECTBEFOR 9-Band/Summary Imprimir encabezado de página.
EJECTAFTER 9-Band/Summary Imprimir pie de página.
PLAIN 1-Report Definition Se 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
SUMMARY Todos No se utiliza.
ADDALIAS 1-Report Definition Se 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.)
OFFSET 6-Line Siempre 1.
  7-Shape Radio utilizado en objetos cuadrados redondeados (los cuadros de diálogo predeterminados utilizados son 12, 16, 24, 32, y 99).
  8-Field 0 = Alinear a la izquierda
1 = Alinear a la derecha
2 = Alinear al centro
  17-Picture Indica 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)
TOPMARGIN Todos No se utiliza.
BOTMARGIN Todos No se utiliza.
TOTALTYPE 8-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
RESETTOTAL Cuando 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
RESOID 1-Report Definition
Report objects
Indica que el FontCharSet aplica para este objeto (o todo el informe).
CURPOS 1-Report Definition .T. = Mostrar posición está en ON
.F. = Mostrar posición está en OFF
SUPALWAYS 7-Shape Se 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
SUPOVFLOW Report objects Se corresponde con el valor de (When detail overflows to new page/column) check box en el cuadro de diálogo (Print when).
SUPRCOL Report objects Se 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).
SUPGROUP Report objects Se 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.)
SUPVALCHG Report objects Se 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
SUPEXPR Report objects Se 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).
USER Todos Disponible 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.


 Versión imprimible  
Lo nuevo del Generador de Informes en VFP 9.0 - Parte 2 | Entrar/Crear una cuenta | 6 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.

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


por eMans en 19 Ene, 2005 - 10:33
(Información del usuario  | Enviar un mensaje 
Vaya trabajo, mi enhorabuena Amby.

Saludos,
Antonio Muñoz de Burgos

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


por LuisMaria (luismaria@portalfoxxx.com) en 19 Ene, 2005 - 01:12
(Información del usuario  | Enviar un mensaje http://www.luismariaguayan.com.ar)

¡Excelente trabajo Amby!

Muy interasantes los artículos y muy agradable la lectura en español.

Luis María
Tucumán, Argentina


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


por edhin (ejimenez@portalfox.com) en 19 Ene, 2005 - 02:21
(Información del usuario  | Enviar un mensaje http://venezuela.portalfox.com/zulia/)
Gracias Ana, me ha sido de mucha utilidad este articulo, por ti traducido magistralmente.

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


por zorro_alex (zorro.alex@gmail.com) en 19 Ene, 2005 - 07:27
(Información del usuario  | Enviar un mensaje 
Una Vez mas Ana... mil felicidades... excelente articulo...

Saludos

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


por delpro en 22 Ene, 2005 - 07:19
(Información del usuario  | Enviar un mensaje http://http://)
Mi enhorabuena Ana, un trabajo excelente. Pero ante todo gracias por tu ayuda. Una exposición clara y una traducción excelente.

Salu2

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


por amby en 24 Ene, 2005 - 10:38
(Información del usuario  | Enviar un mensaje http://www.amby.net)
Gracias a ustedes, y a los revisores que hacen trabajo anónimo; pero de mucha importancia y al editor jefe que tiene que organizar luego lo que le mando.

Gracias chicos, habrá que seguir traduciendo !!!!

Saludos,

Ana




Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2010 PortalFox. Todos los derechos reservados.