reporteador vfp 9

March 20, 2018 | Author: Fernando Alberto | Category: Table (Database), Point And Click, Windows 2000, Computer File, Window (Computing)


Comments



Description

Resumen Aprender sobre las nuevas características del Generador de informes Microsoft Visual FoxPro 9.0, incluyendo los entornos de datos reutilizables, protección de informes, y muchas mejoras en la interfaz de usuario. Aprenderá además, mejoras en el diseño de objetos, mejoras para usuarios internacionales, varias mejoras en la impresión y mejoras en la agrupación de datos. Además, aprenderá sobre dos de los mayores avances del Generador de informes en Visual FoxPro (VFP) 9.0: múltiples bandas de detalles y exten sibilidad. Finalmente, aprenderá detalles sobre la estructura de la tabla Visual FoxPro (FRX). Contenido y y y y y y y y y y y y y Introducción Extensibilidad Entorno de datos Protección Mejoras en la interfaz de usuario (UI) Mejoras en el diseño de objetos Características para uso internacional Mejoras en la impresión Mejoras en la agrupación de datos Múltiples Bandas de detalle La tabla FRX Conclusión Biografía Introducción Microsoft ha mejorado significativamente el Generador de informes de VFP 9.0, a la vez que reconoce la significativa inversión de los desarrolladores en el informe FRX actual. Sin embargo, el Generador de informes en VFP 9.0 Report Writer es compatible con los informes creados en versiones anteriores de VFP. El generador de informes en VFP 9.0 es una gran mezcla entre lo viejo y lo nuevo. Extensibilidad Antes de VFP 9.0, el motor del generador de informes controlaba todo, incluyendo el procesamiento de datos, la posición de los objetos, la generación, la impresión y la vista preliminar. No había forma de entrar en el motor de informes y personalizarlo, como se puede en otras áreas de VFP. Uno de los cambios más significativos en el Generador de informes es su nueva capacidad de extensibilidad. El Diseñador de informes (Report Designer), Motor de informes (Report Engine) y Contenedor preliminar (Preview Container) están expuestos al desarrollador. Generador de Informes El Generador de informes (Report Write) en VFP 9.0 incluye una nueva característica en tiempo de diseño llamada Builder Hooks. Varios eventos del Diseñador de informes (Report Designer) están expuestos en un componente Xbase independiente llamado Report Builder, puede ser invocado para ser manipulado. Esta aplicación puede ser utilizada para invocar nuestros propios cuadros de diálogo, aumentar el co mportamiento nativo del Diseñador de informes o sobrescribir este comportamiento nativo. VFP incluye una aplicación extendida en el Generador de Informes, que incluye nuevas características y proporciona una mejor interfaz de usuario para diseño de informes. El Generador de informes es controlado por una nueva variable del sistema, _REPORTBUILDER. Si esta variable está vacía, se muestra el cuadro de diálogo nativo. Para activar el gancho al generador, establezca esta variable a la aplicación correspo ndiente. Por ejemplo, para utilizar el Generador de informes que viene con VFP 9.0, utilice el siguiente comando: _REPORTBUILDER = HOME() + "REPORTBUILDER.APP" Algunas partes de este artículo asumen que está presente el diálogo nativo y la variable de sist ema _REPORTBUILDER está vacía. Otros lugares asumen que se encuentra el nuevo cuadro de diálogo y la variable de sistema _REPORTBUILDER tiene valor "REPORTBUILDER.APP." Si no experimenta el comportamiento descrito o no ve los diálogos descritos, puede solu cionar el problema, cambiar el valor de _REPORTBUILDER. Motor de informe (Report Engine) En el nuevo sistema de salida (Object-Assisted Output), el motor de informe manipula tareas centradas en datos (data-centric chores), como es el movimiento entre los límites y la evaluación de expresiones. Sin embargo, cuando llega el momento de crear la salida, atrasa el trabajo a una nueva clase base llamada ReportListener. La nueva clase genera el contenido del informe en forma más sofisticada, utilizando GDI+, y además ofrece a los usuarios Xbase la posibilidad de interactuar con el proceso de salida. La Figura 1 muestra cómo se ajustan todas las piezas. Figura 1. Utilice la nueva clase ReportListener para manipular informes. Para utilizar una clase ReportListener, utilice la cláusula nueva del comando REPORT FORM como se muestra a continuación: oListener = CREATEOBJECT("ReportListener") oListener.ListenerType = 1 && Presentación preliminar, o 0 para Imprimir REPORT FORM <name> <clauses> OBJECT oListener VFP 9.0 proporciona además una segunda técnica para utilizar una clase ReportListener. Puede establecer el valor para la nueva variable del sistema, _REPORTOUTPUT, al nombre de una aplicación que pueda determinar que clase ReportListener utilizar basada en el tipo de salida que se ha escogido. Cuando se utiliza (Object-Assisted Output), un informe se procesa utilizando uno de dos modos fundamentales, en dependencia del valor de la propiedad ListenerType. Puede escoger entre esos dos t modos print-appropriate (imprimir) y preview-appropriate (presentación preliminar), o page-at-a-time (una página cada vez) y all-pages-at-once (todas las páginas de una vez). En el primer modo, el Listener desencadena un evento OutputPage y prepara cada página, justo como si se enviara cada página a la cola de impresión. En el segundo modo, el Listener prepara todas las páginas para la generación y las guarda en memoria (caché). Cuando esto finaliza, puede invocar el método OutputPage para pregunta qué página de todas r incluidas en la salida por número de página. Contenedor preliminar (Preview Container) En VFP 9.0, otra pieza importante en el puzzle de extensibilidad es el Contenedor preliminar. Con este gancho, puede utilizar el nuevo contenedor preliminar que viene con VFP 9.0 o escribir su propio contenedor. El antiguo contenedor preliminar nativo está aún disponible cuando no se está utilizando la nueva salida asistida por objetos. Una nueva variable de sistema, _REPORTPREVIEW, contiene el nombre de la aplicación que determina qué contenedor preliminar utilizar. De forma predeterminada, esta variable apunta a ReportPreview.app. Esta nueva aplicación contiene un gran número de mejoras sobre el antiguo contenedor preliminar incluyendo: más niveles de zoom, control de la barra de herramientas, control del encabezado, presentación de múltiples páginas, y mejor calidad utilizando GDI+. Las Figuras 2 y 3 muestran las diferencias entre la presentación antigua y la actual. Figura 2. La salida en el contenedor preliminar antiguo no es muy clara. Figura 3. El nuevo contenedor preliminar tiene mucha más calidad y opciones más sofisticadas. Observe la diferencia en calidad entre los contenedores viejo y nuevo. El nuevo conte nedor tiene las fuentes mucho más claras que el viejo. Puede comprobarlo utilizando GDI+ para la salida de la información. Observe además, la diferencia en la barra de herramientas anclada. El nuevo estilo de la barra de herramientas tiene opciones nuevas, incluyendo presentación de múltiples páginas. Salida Tradicional Entornos de datos . VFP utiliza la variable del sistema _REPORTOUTPUT para determinar qué aplicación utilizar para nominar la clase ReportListener apropiada para cada comando REPORT FORM. vea: El Generador de informes de VFP 9.0 en acción. puede cambiar el valor de esta configuració n en el cuadro de diálogo Opciones (Options) (mostrado en la Figura 4). sin cambios posteriores en su código. Con las nuevas características de extensibilidad en el Generador de informes de VFP 9. Para más información sobre cómo utilizar la Salida asistida por objetos. lo que apaga la salida asistida por objetos y el informe se procesa como antes de VFP 9. y el espaciado es diferente entre GDI y GDI+. Si desea activar la salida asistida por objetos de forma global. Utilizar la opción Comportamiento en tiempo de ejecución (Run-time behavior) en el cuadro de diálogo Opciones (Options) para cambiar la configuración de SET REPORTBEHAVIOR. o puede escribir el siguiente comando: SET REPORTBEHAVIOR 90 Figura 4. y el área preliminar (Preview surface). con el que podrían haber cambios significativos sobre cómo se vean los informes existentes. El motor generador de la nueva salida y la nueva superficie Preliminar tiene diferencias n significativas entre los estilos de salida antiguo y actual. el comando REPORT FORM automáticamente actúa como si pensara que se utiliza la cláusula OBJECT. Por tanto. La alineación. Puede activar globalmente las nuevas características o puede activarlas para informes individuales. The VFP 9. puede ser utilizado para encender o apagar la salida asistida por objetos.0 Report Writer In Action. Cuando REPORTBEHAVIOR se establece en 90.0. SET REPORTBEHAVIOR. Puede además dejarlas desactivadas y ejecutar los informes como si estuviera en las versiones anteriores de VFP. es posible tocar el Generador de informes (Report Builder). el Motor de informe (Report Engine).Un comando nuevo. interlineado. se establece de forma predeterminada REPORTBEHAVIOR en 80.0 (Report Writer). (Save As Class.") se muestra en el menú Archivo (File) cuando el Entorno de Datos es la ventana activa. El botón DataEnvironment del Grupo de opciones Save es el único botón habilitado cuando se guarda un Entorno de datos Data Environment de un informe.) el cuadro de diálogo Guardar como clase (Save As Class) aparece como se muestra en la Figura 6..El Generador de informes de VFP 9. comience por definir el entorno en el informe. Figura 5.. Después de seleccionar la opción Guardar como clase (Save As Class. . Con la ventana Entorno de datos (Data Environment) activa.) en el menú Archivo (File) (vea Figura 5). como siempre.. según la necesidad. Esto brinda nuevas posibilidades para definir y reutilizar entornos en informes con escenarios similares." ("Save As Class.... Una nueva opción "Guardar como clase. El entorno de datos puede ser guardado como una clase y luego cargado en informes..0 (Report Writer) permite ahora compartir Entornos de datos con otros informes.. Guardar como clase (Save As Class) Para guardar un Entorno de datos como clase... seleccione la opción Guardar como clase. . Figura 7.) para localizar una biblioteca de clases existente.. VFP 9.. la nueva biblioteca de clases se crea automáticamente.) del menú Informe (Report). aparece.. como se muestra en la Figura 8.) en el menú Informe (Report) (vea Figura 7) permite seleccionar el Entorno de datos a cargar. Luego. La opción Cargar Entorno de datos. Utilizar la opción Load Data Environment... Nota La característica Cargar Entorno de datos está disponible sólo a través de los cuadros de diálogo del nuevo ReportBuilder.. Escriba un nombre para la clase en el cuadro de texto Nombre (Name).Figura 6.0 ofrece la opción de cargar un Entorno de datos de un informe ya existente o de una clase DataEnvironment guardada previamente. escriba el nombre de la librería de clase en la que desea sea guardada la nueva clase. Desde un Informe Al cargar el Entorno de datos desde otro informe. Cargar un Entorno de datos (DE) Además de definir manualmente el Entorno de datos para un nuevo informe.. Utilice este menú para seleccionar el informe del que desea copiar el entorno al informe actual. El cuadro de diálogo Propiedades de informe (Report Properties). luego de seleccionar la opción (Load Data Environment.. Utilice el cuadro de diálogo Guardar como clase (Save As Class) para declarar el nombre de la nueva clase y la biblioteca de clase para guardar el entorno de datos del informe. escribir una descripción para la nueva clase. opcionalmente. para cargar un Entorno de datos desde un informe existente o una clase DataEnvironment..app" para poder aprovechar las ventajas de esta característica. todo el código y los miembros del Entorno original se copian en el nuevo informe. Puede utilizar el botón de comando elipse (. (Load Data Environment. Si introduce el nombre de una biblioteca de clases que no existe.. Finalmente puede. Esto significa que cualquier cambio que e realice en el Entorno del informe original después de ser copiado no se va a reflejar en el informe creado a partir del informe original. Debe escribir _REPORTBUILDER = HOME() + "ReportBuilder. Cuando hace Clic en Yes... VFP 9. Seleccione el botón Copiar de otro archivo de informe (Copy from another report file) y haga Clic en el botón Seleccionar. Figura 9.0 permite copiar el Entorno de datos de otro informe al informe actual. VFP 9. los cambios no se realizan y el proceso es interrumpido. Confirme sus intenciones de copiar un Entorno de datos utilizando este cuadro de diálogo. Esto invoca el cuadro de diálogo Abrir (Open) para que pueda seleccionar a partir de qué informe copiar.. Utilice la ficha Entorno de datos (Data Environment) del cuadro de diálogo Propiedades de informe (Report Properties) para seleccionar de qué informe desea copiar el Entorno de datos (Data Environment). el Entorno de datos es copiado y se notifica con el cuadro de diálogo que se muestra en la Figura 10.0 notifica que sobre-escribirá el Entorno de datos actual y debe hacer Clic en Si (Yes) para continuar. Si hace Clic en No.Figura 8. se muestra un cuadro de diálogo de confirmación (vea Figura 9). (Select.. Una vez escogido el informe. Sin embargo. Esto ayuda a recordar que cualquier cosa que se haya definido en el Entorno de datos del informe actual será sobre escrito. .). La razón para esto es que BindEvents() no funciona si al menos no hay una línea de código.. que se muestra en la Figura 8. Luego.* * ESTE CODIGO DE METODO ES AGREGADO POR EL GENERADOR DE INFORME * *--------------------------------------------------------------. se agrega código a algunos de los métodos del Data Environment. Finalmente.Figura 10. Esto significa que los cambios que pueden realizarse en el futuro sobre la clase DataEnvironment se van a propagar a cualquier informe que emplee esta clase DataEnvironment. haga Clic en el botón Seleccionar.. el Entorno de Datos es actualizado y se notifica que ha finalizado con el cuadro de diálogo mostrado en la Figura 10. haga Clic en el botón Enlazar a una clase DE visual (Link to a visual DE class). no se reflejará en este. Luego. Después de confirmar sus intenciones. los eventos Init y Destroy no están enlazados. los eventos en este Data Environment se limitan a los eventos de la clase DataEnvironment. *--------------------------------------------------------------.. Algunos de los métodos tienen un código tan simple como un único comando DODEFAULT(). recuerde que cualquier cambio que se haga sobre el Entorno de datos del informe original a partir de este momento.) para invocar el cuadro de diálogo Abrir (Open) que puede utilizar para seleccionar qué librería de clases y qué clase desea utilizar. En este punto.* DODEFAULT() Método BeforeOpenTables El siguiente código crea una nueva propiedad en el Data Environment que guarda una referencia de objeto a la clase DataEnvironment que ha sido cargada. Sin embargo. Utilizando el cuadro de diálogo Propiedades de informe (Report Properties). A partir de una clase DataEnvironment Al cargar un Entorno de datos desde una clase. se muestra el mismo cuadro de diálogo de confirmación mostrado en la Figura 9. Después de seleccionar una clase.. . Ya tiene una copia del Entorno de datos. (Select. se agrega código al Entorno de datos del nuevo informe para enlazarlo con la clase DataEnvironment original e instanciarla en tiempo de ejecución. Sin embargo. se dispara el evento BeforeOpenTables de la clase DataEnvironment. Código del Entorno de datos Al cargar un Entorno de Datos a partir de una clase automáticamente agrega código a varios métodos como se muestra y se describe a continuación Método Init El siguiente código en el Init es necesario para garantizar que BindEvents() funcione como es esperado. Este cuadro de diálogo confirma que el Entorno de datos ha sido copiado exitosamente al informe actual. Puede manipularlo según sus necesidades. laDEEvents[ liMember. 1] ) ENDIF ENDFOR * Ahora los miembros con verificación apropiada. 3 ) FOR liMember = 1 to liMembers IF INLIST( UPPER( laDEEvents[ liMember. "METHOD" ) BINDEVENT( THIS. "INIT". loMember. 1] ) ENDIF ENDFOR ENDIF ENDIF ENDFOR THIS. *--------------------------------------------------------------. THIS. "c:vfp9rwde. laDEEvents[ liMember. 1] ). 1] ). "METHOD" ) BINDEVENT( THIS. . "DESTROY" ) LOOP ENDIF IF INLIST( UPPER( laDEEvents[ liMember.Objects IF PEMSTATUS( THIS.Name.* * ESTE CODIGO DE METODO ES AGREGADO POR EL GE NERADOR DE INFORME * *--------------------------------------------------------------.AddProperty( "BoundDE". "EVENT". "INIT".BoundDE. * saltándose nuevamente Init y Destroy: FOR EACH loMember IN THIS. UPPER( PEMSTATUS( THIS.BoundDE. 1]. * por lo que es necesario mucho chequeo de PEMSTATUS: liMembers = AMEMBERS( laDEEvents.*--------------------------------------------------------------. laDEEvents[1]. loMember. NEWOBJECT( "de_insurance". .Name.BaseClass == loMember. loMember. "DESTROY" ) LOOP ENDIF IF INLIST( UPPER( laDEEvents[ liMember.BaseClass ) = "DATAENVIRONMENT" * Enlaza eventos aquí.* * ESTE CODIGO DE METODO ES AGREGADO POR EL GENERADOR DE INFORME * *--------------------------------------------------------------. liMembers.BoundDE. 5 ) AND .BoundDE ) = "O" AND UPPER( THIS.* LOCAL loMember. laDEEvents[ liMember. . saltando Init y Destroy.vcx" )) IF VARTYPE( THIS. 2] ). . .* DODEFAULT() Método Method .BaseClass ) liMembers = AMEMBERS( laDEEvents. THIS. "EVENT". 3 ) FOR liMember = 1 TO liMembers IF INLIST( UPPER( laDEEvents[ liMember.BeforeOpenTables() ENDIF Método AfterCloseTables El siguiente código en el método AfterCloseTables es necesario para asegurar que el BindEvents() trabaje de la forma esperada.BoundDE. 1]. laDEEvents[ liMember. * El FRX DE y sus miembros solo pueden tener eventos de la clase base. . loBoundMember THIS.BoundDE. 3 ) = "OBJECT" loBoundMember = EVAL( "THIS. 2] ). liMember. loBoundMember." + loMember.BoundDE.Name ) IF ( loBoundMember. Configurar las banderas de protección (Setting Protection Flags) A los objetos se les puede aplicar cinco modos diferentes de protección. cMethod. El informe como tal tiene varias opciones de protección.app" para poder aprovechar las ventajas de esta característica.Objects UNBIND( loMember ) ENDFOR IF PEMSTATUS( THIS. *--------------------------------------------------------------. "BoundDE". 3 )) = "PROPERTY" THIS. Esto ofrece la posibilidad de que el usuario pueda modificar un informe. desde el menú contextual del objeto. El código elimina además la referencia de objeto a la clase DataEnvironment. *--------------------------------------------------------------. A las bandas se les puede configurar dos modos de protección diferentes. Debe escribir _REPORTBUILDER = HOME() + "ReportBuilder.0.* LPARAMETERS nError. seleccione el cuadro de diálogo Propiedades (Properties) para el objeto. los objetos Field tienen una opción de protección adicional. Proteger un objeto Para proteger un objeto en el Diseñador de Informes. 5 ) AND UPPER( PEMSTATUS( THIS. nLine ) Protección En VFP 9. nLine DODEFAULT( nError. .BoundDE = NULL ENDIF Método Error El siguiente código en el método Error es necesario para asegurar que el BindEvents() trabaje de la forma esperada.* * ESTE CODIGO DE METODO ES AGREGADO POR EL GENERADOR DE INFORME * *------------------------------------------------.El siguiente código es agregado al método Destroy desenlaza métodos desde el Entorno de datos de este informe a la clase DataEnvironment. cMethod. La Figura 11 muestra la ficha Protección (Protection) en el cuadro de diálogo Propiedades para un objeto Field. "BoundDE".--------------* LOCAL loMember UNBIND( THIS ) FOR EACH loMember in THIS. Nota: La nueva característica Protección está disponible sólo a través de los cuadros de diálogo del nuevo ReportBuilder. puede crear protección para uno o más objetos al utilizar el Diseñador de Informes o Diseñador de etiquetas. El cuadro de diálogo Propiedades puede ser invocado desde en menú Informe (Report) después de seleccionar el objeto.* * ESTE CODIGO DE METODO ES AGREGADO POR EL GENERADOR DE INFORME * *--------------------------------------------------------------. sin permitirle aún hacer determinados cambios. o haciendo doble clic en el objeto. Esto brinda una oportunidad para mostrar algo que sea familiar al usuario en lugar de una expresión complicada. Cuando se selecciona esta opción. Utilice la ficha Protección (Protection) del cuadro de diálogo Propied ades (Properties) para establecer los modos de protección a los objetos. La cadena literal escrita en este cuadro de texto es mostrada en el Diseñador de Informes. Marque la casilla de verificación El objeto no puede ser eliminado (Object cannot be deleted) para evitar que el usuario elimine este objeto. r Object cannot be edited. Al seleccionar esta opción.. Marque la casilla de verificación El objeto no puede ser seleccionado (Object cannot be selected) para evitar que el usuario seleccione este objeto. seleccione el cuadro de diálogo Properties para la banda. las cuatro opciones restantes también se seleccionan. Marque la casilla de verificación El objeto no puede ser modificado (Object cannot be edited) para evitar que el usuario haga cualquier cambio en las propiedades de éste.. también se seleccionan las opciones de protección: El objeto no puede ser movido ni redimensionado.) Marque la casilla de verificación El objeto no está visible en el Diseñador (Object is not visible in Designer) para evitar que este objeto aparezca en el Diseñador de informes en modo protegido.Figura 11. en lugar de Expresión (Expression). Puede establecer los siguientes modos de protección para los objetos: y Marque la casilla de verificación El objeto no puede ser movido ni redimensionado (Object cannot be moved or resized) para evitar que el usuario mueva los objetos a posición diferente en el área de diseño y/o los redimensione. del menú Report. y Object cannot be deleted. El objeto no puede ser modificado y El objeto no puede se eliminado (Object cannot be moved or sized. y y y y La porción Design-time caption de este cuadro de diálogo solo se aplica a los objetos Field. El cuadro de diálogo Properties puede ser invocado desde la opción Edit Bands. Proteger una banda Para proteger una banda en el Diseñador de Informes. . Puede establecer los siguientes modos de protección para las bandas: y y Marque la casilla de verificación La banda no puede ser modificada (Band cannot be edited) para hacer inaccesible al usuario el cuadro de diálogo Propiedades de la banda (Band P roperties). seleccione el cuadro de diálogo Propiedades de informe (Report Properties.desde el menú contextual de la banda o haciendo doble clic en la barra gris de la ba nda. . Utilice la ficha Protección (Protection) del cuadro de diálogo Propiedades de banda (Band Properties) para establecer los modos de protección de la banda. Proteger un informe Para establecer protección general al informe. La Figura 13 muestra la ficha Protección (Protection) en el cuadro de diálogo Propiedades del Informe (Report Properties). Figura 12. Puede llamar este cuadro de diálogo seleccionando Propiedades (Properties) desde el menú Informes (Report) o desde el menú contextual del informe. La Figura 12 muestra la ficha Protection en el cuadro de diálogo Properties para esa banda. Marque la casilla de verificación La banda no puede ser redimensionada (Band cannot be resized) para hacer que el usuario no pueda redimensionar la banda. La opción Regla/Rejilla está inhabilitada porque la ficha no puede ser protegida. Respetar banderas de protección Para invocar la protección durante una sesión del Diseñador de informes o Diseñador de etiquetas. Para cada selección en esta área. El cuadro de diálogo Generador de expresión (Expression Builder) y el cuadro de diálogo Opciones del generador de expresión (Expression . sin embargo. Para cada selección hecha en esta área. se muestra inhabilitada la correspondiente ficha en el cuadro de diálogo. La parte inferior de este diálogo permite definir cuáles son las opciones del menú disponibles para el usuario. Utilice la ficha Protección (Protection) del cuadro de diálogo Propiedades de Informe para establecer modos generales de protección para el informe. La opción Protección (Protection) siempre está seleccionada e inhabilitada.Figura 13. y se han agregado nuevas opciones a la barra de herramientas del Diseñador de Informes. han cambiado los menús contextuales. Mejoras en la Interfaz de usuario Se han hecho muchos cambios en la interfaz de usuario para hacer el diseño de informes más fácil e intuitivo. se inhabilita la correspondiente opción del menú. aparece en el cuadro de diálogo de tal forma que la selección sea consistente con las fichas en el cuadro de diálogo Informes (Report). La parte superior de este cuadro de diálogo permite definir qué fichas del diálogo Propiedades de Informe (Report Properties) están disponibles para el usuario. Los menús se han reacondicionado. utilice la palabra clave PROTECTED como se muestra en los siguientes ejemplos: CREATE REPORT MiInforme PROTECTED MODIFY REPORT MiInforme PROTECTED CREATE LABEL MiEtiqueta PROTECTED MODIFY LABEL MiEtiqueta PROTECTED Si no se utiliza la palabra clave PROTECTED. el Diseñador de Informes trabaja como si no se aplicara protección a los objetos. . Además.Builder Options) tienen un nuevo comportamiento." ("Save As Class.. Figura 14. Se agregó una nueva opción a la barra de herramientas del Diseñador de Informes y se agregaron las líneas horizontales para separar las opciones Grid Lines y Show Position del resto de las opciones.") se muestra en el menú Archivo (File). Menús El menú Informes se ha reacondicionado en VFP 9..0.. y se han agregado otras mejoras de de la interf z de a usuario del Generador de informes de VFP 9. La nueva opción "Salvar como clase. Las Figuras 14-16 muestran los cambios en los menús nuevos.0 para acomodar nuevas opciones. Figura 15.. algunas opciones han sido renombradas para ganar en claridad y otras opciones se repiten en diferentes menúspara facilitar el acceso. El menú contextual global tiene nuevas opciones y una opción renombrada. ahora sí lo tienen. Figura 17. Otros elementos en el Diseñador de informes q previamente no ue tenían menús contextuales. opciones nuevas y agregar la opción Print Preview. El menú contextual para el diseño de objetos se invoca haciendo Clic derecho sobre cualquier objeto del informe. Menús contextuales Los menús contextuales existentes han sido mejorados con elementos adicionales y más consistencia con los cuadros de diálogos a los que invocan.Figura 16. Figura 19. Figura 18. . El nuevo menú contextual para la banda se invoca haciendo Clic derecho en la barra gris de una banda. Se muestran muchos cambios en el menú de informes. Las Figuras 17-19 muestran los cambios nuevos. incluyendo opciones renombradas. como se muestra en la Figura 20. Cuando la variable de sistema _REPORTBUILDER está vacía el comportamiento nativo para el cuadro de diálogo Generador de expresión (Expression Builder) es como sigue. Ante todo. Figura 21. es . La Figura 21 muestra el cuadro de diálogo Report Expression expandido. Figura 20.Barra de herramientas (Toolbar) La barra de herramientas del Diseñador de informes tiene botones nuevos. Cuando la variable de sistema _REPORTBUILDER tiene valor ReportBuilder. Las tablas abiertas fuera del Entorno de Datos no están disponibles en esta lista. Se han agregado nuevas opciones para Page Setup y Font Properties en la barra de herramientas del Diseñador de informes. Aprovecha las ventajas del cuadro de edición más grande para "Expresión para el campo en el informe" "Expression for Field on Report:" cuando se introducen expresiones más largas. lo que permite más espacio para escribir una expresión del informe.app. Cuadro de diálogo Generador de expresiones (Expressi on Builder) Se han hecho algunos cambios en el cuadro de diálogo Expresiones de informe (Report Expression). Solamente tablas definidas en el Entorno de datos se listan en la lista Campos (Fields). the el comportamiento para el cuadro de diálogo Generador de expresión (Expression Builder) es algo diferente. Utilice el cuadro combinado "Desde la tabla" ("From table") para seleccionar los campos de cualquier tabla abierta. por tanto. Este cuadro de diálogo Generador de expresiones tiene un cuadro combinado para seleccionar qué tabla debe ser utilizada al listar los campos en la lista Campos (Fields). ya que tiene que abrir específicamente las tablas a las que va a permitir el acceso de los usuarios. Este es un punto importante a recordar ya que las tablas definidas en el Entorno de datos no se abren automáticamente por el Diseñador de Informes. Sin embargo. Figura 22. Ento nces. puede omitir cualquier tabla que desea mantener fuera de su alcance.invocado el Generador de expresiones defin ido en _GETEXPR en lugar del Generador de expresiones nativo. La Figura 22 muestra el cuadro de diálogo Generador de expresión predeterminado. en el cuadro combinado aparecen solamente las tablas que están actualmente en uso. Este grupo de opciones le permite indicar si desea agregar el alias a la expresión de informe cuando se selecciona el campo en el cuadro de diálogo Generador de expresiones. Puede definir algunas tablas que necesita. pero que no desea que el usuario entre a ellas en el Entorno de datos. no aparecerán automáticamente en el cuadro combinado. . Cuadro de diálogo Opciones del generador de expresiones El grupo de opciones Alias de campos (Field aliases) se habilita ahora en el cuadro de diálogo Opciones del generador de expresiones como se muestra en la Figura 23. Esta característica brinda la capacidad de controlar las tablas que están disponibles para el usuario final cuando se permite modificar informes dentro de la aplicación. Si la variable del sistema _REPORTBUILDER tiene valor ReportBuilder. existe una nueva opción en la ficha Informe (Report) del cuadro de diálogo Opciones (Options) como se muestra en la Figura 24.0 agregue automáticamente el Alias de la tabla. El comportamiento del botón Add non-selected alias only depende del valor de la variable del sistema _REPORTBUILDER. cualquier campo seleccionado de una tabla que no es InitialSelectedAlias tiene el nombre de la tabla como prefijo. la opción (Add non-selected alias only) utiliza una lógica diferente. Los botones de opciones Agregar Alias siempre (Always add alias) y No agregar nunca Alias (Never add alias) provocan que VFP 9. o no agregue el Alias de la tabla. El alias actualmente seleccionada se utiliza en lugar de (InitialSelectedAlias para determinar si se va a poner el prefijo de los alias de tablas a los campos o no. para todos los campos.app. Además. Esta opción determina que se mantenga la configuración predeterminada de (Field aliases) para todos los informes nuevos. Los campos desde la tabla InitialSelectedAlias no tienen el alias de la tabla como prefijo.Figura 23. . Utilice el grupo de opciones Field aliases para indicar si las alias de los campos se agregan a los campos seleccionados desde el cuadro de diálogo Generador de expresiones. Además de seleccionar un campo desde el cuadro de diálogo Generador de expresión (Expression Builder) arrastrando un campo desde el Entorno de datos al área de diseño del informe respeta la configuración del grupo de opciones (Field aliases). Si la variable del sistema _REPORTBUILDER está vacía. seleccione más de un objeto. Utilice la opción del Generador de expresiones (Expression Builder) en la ficha Informes (Reports) del cuadro de diálogo Opciones (Options) para establecer el comportamiento predeterminado para el Generador de expresiones (Expression Builder). Permite además cambiar cualquier otra propiedad de Protección a un objeto individual.Figura 24.0 existe el cuadro de diálogo Selección múltiple (Multiple Selection) que permite establecer las propiedades Protección (Protection) e Imprimir cuando (Print when) para más de un objeto de diseño a la vez. Cuadro de diálogo Selección múltiple En VFP 9. Utilice el nuevo cursor del ratón para saber si un objeto puede ser redimensionado. Cursor del ratón El cursor del ratón ha cambiado para proporcionar una clave visual de cuando el objeto puede ser redimensionado (vea la Figura 25). Otras mejoras en la interfaz de usuario Se han realizado otro grupo de mejoras en la interfaz de usuario que mejoran el diseño de informes. y luego haga doble clic en cualquiera de ellos para llamar al cuadro de diálogo Selección múltiple (Multiple Selection) que se muestra en la Figura 26. . Para utilizar esta nueva característica. Figura 25. Utilice la ficha Selección (Selection) del cuadro de diálogo Selección múltiple (Multiple Selection) para escoger con qué objetos desea trabajar. invoca el correspondiente cuadro de diálogo Propiedades (Properties) para el objeto que se ha seleccionado individualmente. utilice CTRL+A para seleccionarlos todos antes de llamar a este cuadro de diálogo. Los objetos que fueron seleccionados cuando se ha invocado este cuadro de diálogo se listan en la primera ficha de este cuadro de diálogo. El botón Quitar de la lista (Remove from list) elimina los objetos seleccionados en la lista. La ficha Propiedades (Properties) del cuadro de diálogo Selección múltiple mostrado en la Figura 27. Hacer Doble-clic en cualquier elemento de la lista. La opción Ordenar por (Sort by) permite ordenar la lista de objetos por Tipo (Type) o Ubicación (Location) dentro del informe.Figura 26. . Para trabajar con todos los objetos definidos en un informe. se utiliza para cambiar las propiedades de todos los elementos listados en la ficha Selección (Selection). y barras de herramientas.0 para lograr mejor visibilidad.0 trae muchas mejoras en la interfaz de usuario. Figura 28. Seleccione Aplicar esta condición para los objetos seleccionados una vez guardado (Apply this condition to the selected objects upon saving) para habilitar la opción Imprimir cuando (Print when). Los cambios en el cuadro de diálogo Generador de expresión y Opciones del generador de . Seleccione Aplicar esta configuración de protección a los objetos seleccionados (Apply these protection settings to the selected objects) para habilitar las opciones de Protección (Protection). Más niveles de Zoom La ventana Vista previa tiene más niveles de Zoom (vea Figura 28). Utilice la ficha Propiedades (Properties) del cuadro de diálogo Selección múltiple (Multiple Selection) para cambiar las propiedades Protección (Protection) e Imprimir cuando (Print when) para todos los objetos seleccionados de una vez. y luego seleccione Aceptar (OK) para cerrar el cuadro de diálogo y aplicar los cambios a todos los objetos listados en la primera ficha. menús contextuales.Figura 27. Utilice cualquiera de los nuevos niveles de zoom de la vista preliminar de VFP 9. VFP 9. incluyendo menús. Cambie la configuración de Protection y Print when según lo necesite. como se muestra en la Figura 29." Modo Trim (recortar) para expresiones de caracteres . La opción "Caracteres de Plantilla" determina en que forma se aplican al dato los caracteres de formato especial." el informe muestra "123-456. Esto determina el formato en que se utilizan los caracteres especiales." el informe muestra "123-56 . Las dos opciones disponibles son Cubrir (Overlay) e Intercalar (Interleave)." Observe que el "4" se sustituye por un guión en el formato. Cuando se utiliza la opción Cubrir (Overlay) los caracteres especiales se tratan como parte del dato y cubre cualquier otro carácter específico en la posición dada. Nota: Para poder aprovechar las ventajas del modo Recortar. cuando la expresión del formato (Format expression) es "999-999. debe activar la Salida asistida por objetos. el cuadro de diálogo Selección múltiple y más niveles de Zoom. Caracteres de Plantilla El cuadro de diálogo Propiedades de campo Field Properties tiene una nueva sección para caracteres de plantilla Template characters. un modo Recortar para expresiones de caracteres y posicionamiento relativo y absoluto. Cuando se utiliza la opción Intercalar (Interleave) el carácter especial se inserta entre los caracteres existentes en el dato." Observe que el guión se inserta entre el "3" y el "4. Otras mejoras incluyen el cu rsor del ratón. ya sea creando directamente un objeto ReportListener o indirectamente utilizando un comando SET REPORTBEHAVIOR 90." y el dato contiene "123456. Mejoras en el diseño de objetos Se agregaron algunas mejoras al diseño de objetos. cuando la expresión de formato es "999-999. Figura 29. Por ejemplo. Por ejemplo." y el dato contiene "123456.expresión han incrementado las opciones disponibles al desarrollador. incluyendo una opción para controlar caracteres plantilla. Este comportamiento es similar a las versiones anteriores de VFP. los objetos de tipo campo siempre se recortaban a la palabra más cercana cuando el texto era muy largo.) al texto que imprime. Seleccione Recortar al carácter más cercano.0. una opción nueva en el cuadro de diálogo Propiedades de campo (Field Properties) permite determinar cómo es recortado el campo (vea Figura 30). con la excepción de tener puntos suspensivos adicionales.. Figura 30. puntos suspensivos adicionales (Trim to nearest character.. append ellipsis).) cuando el texto completo no quepa en el área definida. append ellipsis) para tener el texto recortado al último carácter que quepa en el área definida una vez que se agrega (... Las seis opciones para recortar textos largos son las siguientes: y Seleccione Recorte predeterminado (Default trimming) para utilizar el comportamiento predeterminado. Seleccione Recortar al carácter más cercano (Trim to nearest character) para tener el texto recortado al último carácter escrito que quepa en el área definida. Seleccione Especificar nombre de archivo (Filespec: Show inner path as ellipsis) para mostrar la carpeta más interna de una ruta larga y el nombre de fichero.0. que es mismo que la opción Recortar a la palabra más cercana. append ellipsis) para tener el texto recortado a la última palabra que quepa en el área definida una vez que se agrega (. Seleccione Recortar a la palabra más cercana.. con puntos suspensivos adicionales (..Antes de VFP 9. puntos suspensivos adicionales (Trim to nearest word. En VFP 9. y y y y y Tamaño y posición . Seleccione Recortar a la palabra más cercana (Trim to nearest word) para tener el texto recortado a la última palabra completa que quepa en el área definida. puntos suspensivos adicionales (Trim to nearest word. Utilice el modo Recortar para expresiones de caracteres para indicar el método utilizado para recortar textos largos.) al texto que imprime. Cambiar la propiedad From page top puede mover. sin darse cuenta. Figura 31. lo que significa que toma en cuenta la altura de cualquier barra gris encima el objeto. el valor para las propiedades Desde el borde superior de a página l (From page top). La posición relativa es necesaria para objetos en bandas que no son Encabezado de página (Page Header) y Pie de página (Page Footer). Altura (Height) y Ancho (Width) se establecen automáticamente. Cuando se agrega un objeto al informe. y el valor de la propiedad Height es menor o igual a la altura de la banda en la que está localizado el objeto. Desde el borde izquierdo de la página (From left). Posición absoluta Cuando la propiedad From page top se establece en un valor que entra fuera del área del Diseñador de informes. se utiliza posición relativa. Posición relativa La propiedad From page top y la propiedad Height t abajan juntas para determinar si se utiliza posición r relativa o absoluta. como se muestra en la Figura 31. Es importante observar que la propiedad From page top es relativa al borde superior de la página en el Diseñador de informe. el objeto a otra banda. Cuando la propiedad From page top se establece en un valor que entra dentro del área del Diseñador de informes. Utilice las opciones Tamaño (Size) y Posición (Position) en el cuadro de diálogo Propiedades para controlar la posición relativa y absoluta.Otra característica disponible en el diseño de objetos es un mejor control del tamaño y la posición de los objetos. o el valor de la propiedad Height es mayor que la altura de la banda en la que está localizado el . Se puede definir para un objeto específico del informe y además se puede definir la fuente predeterminada para todo el informe. asegurándose de no extenderla más allá de los márgenes imprimibles de la impresora. Esto permite un mejor control cuando hay usuarios con varios sistemas predeterminados. lenguaje de scripts.0 para hacer los informes más funcionales en situaciones internacionales. Características Internacionales Algunos cambios se han realizado en VFP 9. Específicamente conjuntos de caracteres. Unidades (Units) tiene más opciones. de una fuente. La posición absoluta puede ser utilizada para crear una marca de agua en el informe. La posición absoluta significa que el objeto se imprime exactamente en el mismo lugar para cada página. etain shape). . FontCharSet El conjunto de caracteres o lenguaje de scripts. Unidades (Units) El cuadro de diálogo Establecer escala de cuadrícula (Set Grid Scale) tiene tres opciones adicionales en la Escala de regla (Ruler Scale) para permitir especificar la escala en pulgadas o centímetros y apagar la escala. Figura 32. puede ser establecido en el cuadro de diálogo Fuente (Font). La Figura 33 muestra la nueva opción en el cuadro de diálogo Establecer escala de cuadrícula. se utiliza posición absoluta. pueden establecerse para fuentes. Coloque una imagen gráfica en la banda Encabezado de página (Page Header) y seleccione (Scale contents. Utilice el cuadro combinado Script para seleccionar un conjunto de caracteres o lenguaje de script. r Cambie la propiedad From page top y la propiedad From left para indicar la esquina superior izquierda de dónde desea que comience la marca de agua. Cambie las propiedades Height y Width para indicar el tamaño total de la marca de agua. así como el comando STRCONV().objeto. como se muestra en la Figura 32. nRegionalIDType: 0 (default) 1 nRegionalIdentifier 2 . Ahora se puede utilizar para controlar transformaciones utilizando códigos de páginas y los valores Fontcharset junto con sus IDs locales. 7. En VFP 9.0.nRegionalIdentifier es FontCharSet. Los mismos cambios que se hicieron sobre el cuadro de diálogo Establecer escala de cuadrícula se hicieron en la ficha Informes del cuadro de diálogo Opciones. 4. 2. sólo es soportado nRegionalIdentifier=0 Para diseñar informes en idioma diferente al inglés. Siempre devolvía una cadena vacía. Esto a hacía imposible conocer si se había oprimido el botón Cancelar (Cancel). STRCONV(cExpression. Utilice el nuevo cuadro desplegable en el cuadro de diálogo Establecer escala de cuadrícula para un mejor control sobre la regla de escala. explica la nueva funcionalidad del comandoSTRCONV(). SYS(1037) La función SYS(1037) se utiliza para invocar el cuadro de diálogo Configurar impresora Print Setup así como cambiar la impresora predeterminada de VFP. independientemente de lo que hicier el usuario. la función SYS(1037) no devolvía un valor significativo. el comando GetFont() tiene un nuevo estilo.Figura 33.) . se agregó un nuevo parámetro a la función SYS(1037) para que devolviera un valor significativo (vea Tabla 1.0 que ayuda en informes internacionales es el cambio de la función STRCONV(). y 8. las Unidades. La documentación del archivo Ayuda. nConversionSetting [.0. las mejoras en FontCharSet.nRegionalIDType]]) LocaleID.nRegionalIdentifier es de [. y el comando APrinters() tiene tres columnas. Antes de VFP 9. nRegionalIdentifier es código Para valores de nConversion iguales a 1. Mejoras en la impresión Algunos comandos existentes y los cuadros de diálogo han s mejorados para lograr mayor funcionalidad. página. 3. ido La función SYS(1037) tiene un nuevo parámetro y devuelve un valor. STRCONV() Otro cambio de VFP 9. y el comando STRCONV() permiten mayor flexibilidad en el diseño. la estructura no es válida 1 = La información de impresora predeterminada de VFP ha sido guardada satisfactoriamente en el FRX 0 = No se hace ninguna acción 1 = Se establece desde el FRX. =GetFont(' '. y luego restablece el cursor al RECNO() anterior. no se activa ningún diálogo y devuelve cero. la información de impresora predeterminada de VFP se escribe en los campos EXPR. Si el área actual no contiene la estructura adecuada. Nuevo parámetro y valor devuelto por SYS(1037) GetFont() Algunos cambios se hicieron en el comando onts Only) 0 = No se hace ninguna acción. no se activa ningún diálogo y devuelve cero. no se activa ningún diálogo y devuelve cero. 'P') FontCharSet Como en versiones previas de VFP. se activa el cuadro de diálogo Configurar página (Page Setup). Tabla 1. Además. como se muestra a continuación. 0. excepto 0 = Cancelado por el usuario que ahora devuelve un valor significativo. Si el área actual no contiene la estructura adecuada.3) Si el área de trabajo actual contiene una estructura que coincida con una estructura FRX.Parámetro SYS(1037) Descripción Valor devuelto Mismo comportamiento que en versiones anteriores. establezca explícitamente "Western script." y devuelva el FontCharSet junto al otro dato. Como en versiones previas. TAG. Si el usuario selecciona Aceptar OK del cuadro de diálogo. SYS(1037. Sin embargo. y TAG2 del primer registro y luego restaura. el cursor al RECNO() anterior. establezca el valor de la configuración regional de y devuelva el FontCharSet junto al otro dato. el FRX se actualiza adecuadamente SYS(1037.1) Si el área de trabajo actual contiene una estructura que coincida con una estructura FRX y no se ha guardado información de la impresora en el área de trabajo actual. APrinters() . TAG. 1 = El Usuario seleccionó Aceptar OK 0 = Cancelado por el usuario o la estructura no es válida 1 = El Usuario seleccionó Aceptar OK. SYS(1037. sobrescribe. y TAG2 en el primer registro del cursor. el entorno de impresora en el FRX. se ha hecho un ligero cambio en el significado de pasar 0 o 1 como el cuarto parámetro. en caso de que haya alguna información no válida. Si el área actual no contiene la estructura adecuada. se utiliza el cuarto parámetro de GetFont() para identificar el FontCharSet. Al pasar P indica a VFP que sólo muestre las fuentes de impresión para la impresora predeterminada. el Entorno de impresora (Printer Environment) del FRX se guarda como el nueva impresora predeterminada de VFP. Pasar 1 permite que el cuadro desplegable Script. VFP escribe los campos EXPR. la información de la Impresora predeterminada de VFP El tercer parámetro de GetFont() tiene un valor nuevo.2) Si el área de trabajo actual contiene una estructura que coincida con una estructura FRX. y y Pasar 0 permite que el cuadro desplegable Script. omitir el cuarto parámetro inhabilita el cuadro desplegable Script y no devuelve el FontCharSet como parte del valor devuelto. . puede ser invocado por algunos de los métodos siguientes: y y y Cuando el diseñador de informes no está activo WONTOP(). se devuelven dos columnas. lnPrinters = APrinters(laPrinters. Cuando el diseñador de informes está activo WONTOP(). mostrado en la Figura 34. Nombre de la impresora (Name of Printer) y Puerto de impresión (Printer Port). Si utiliza este segundo parámetro opcional. provoca que se llene con una columna adicional. Las tres nuevas columnas son (Driver). y Ubicación (Location). Utilice SYS(1037). Comentarios (Comment). seleccione la opción Configurar página (Page Setup) del menú Archivo (File). Cuadro de diálogo Configurar página (Page Setup) El cuadro de diálogo (Page Setup).Se ha añadido un nuevo parámetro al comando APrinters() para recoger información sobre las impreso ras. seleccione el botón Configurar página (Page Setup) en el cuadro de diálogo Configurar página de informe (Report Page Setup). es decir. También se ha modernizado el c uadro de diálogo Impresora (Printer) si se ejecuta bajo Windows 2000 o sistemas operativos posteriores. como se muestra a continuación. 1) Las primeras dos columnas son iguales que en versiones anteriores. Cuadros de diálogos más actuales El cuadro de diálogo Configuración de impresora (Print Setup) ha sido renombrado como Configuración de página (Page Setup) y se ha modernizado. Al llamar a APrinters() sin el segundo parámetro opcional provoca el mismo comportamiento de versiones anteriores. Figura 34. puede ser invocado por algunos de los métodos siguientes: y y Seleccione Imprimir (Print) del menú Archivo (File). Utilice la cláusula TO PRINTER PROMPT en comandos. como es REPORT FORM. Cuadro de diálogo Imprimir (Pri nt) El cuadro de diálogo Imprimir (Print). . El nuevo cuadro de diálogo Configurar Página (Page Setup) sustituye al viejo Configurar impresora (Print Setup). que se muestra en la Figura 35. continúa el 19/01/2005 en Lo nuevo del Generador de Informes en VFP 9. cuando se ejecuta bajo Windows 2000 o superior.. . El nuevo cuadro de diálogo Imprimir (Print) tiene una apariencia más moderna.Figura 35.Parte 2 ..0 . columna 1) dejaba un espacio en blanco y los datos comenzaban en la columna 2 de la fila 1. Columnas Horizontales Previamente. 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.Parte 2 Por: Cathy Pountney ( http://msdn.0 (Report Writer).microsoft.0 (Sesión What is new in the Visual FoxPro 9.0 . VFP reservaba un espacio.asp ) Traducido por: Ana María Bisbé York ( [email protected] nuevo del Generador de Informes en VFP 9.com/library/en -us/dnfoxgen9/html/VFP9Reports1.net) Para: PortalFox (http://www. como se muestra en la Figura 36. como se muestra en la Figura 37. los informes con más de una columna definida como horizontal con un Grupo de datos gastaban mucho espacio. una banda blanca se gastaba entre cada grupo dedatos.portalfox. Cantidad máxima de grupos de datos La cantidad máxima depara grupos de datos se elevó de 20 a 74. Además.0 Report Writer? presentada por la autora en la Conferencia DevEssentials Kansas. La primera posición (fila 1. Incluso si la altura de la banda Encabezado de grupo (Data Group Header) es cero. .com) Agosto 2004 Se aplica a: Visual FoxPro 9. Figura 36. . Versiones anteriores de VFP gastaban mucho espacio en blanco al utilizar columnas horizontales con Grupos de datos. El resto de esta fila se deja en blanco y no se utiliza para imprimir detalles. . Versiones anteriores de VFP reservaban espacio para la banda Encabezado de grupo. lo imprime en la columna1 de la siguiente línea completa. cuando no estuviera definida. como se muestra en la Figura 38. En VFP 9.0. Cuando reencuentra un nuevo grupo de datos. incluso. 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. Además no se reservan espacios extras para la altura de la banda Encabezado de grupo (Data Group Header).Figura 37. como se muestra en la Figura 39. cambió el comportamiento de los grupos de datos y las columnas horizontales. si la altura de la banda es cero. Figura 38. .0 no gasta espacios como las versiones anteriores cuando se utilizan columnas horizontales y Grupo de datos. VFP 9. aunque evita la situación descrita previamente.Figura 39. Por lo tanto. VFP 9. . 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.0 no reserva espacios extras para la banda Encabezado de grupo si su altura es cero. El comportamiento nuevo. puede afectar a algunos informes existentes. 0. la posibilidad de tener múltiples bandas de detalle es una de las mejoras más importantes y más solicitadas. . En VFP 9. puede expandir la banda Encabezado de grupo a través de múltiples columnas. 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 40. Múltiples bandas de detalle (Multiple -Detail Bands) Además de las mejoras de extensibilidad en el Generador de Informes de VFP 9.0. 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. Ejemplo de informe con múltiples bandas de detalles que tiene tres bandas de detalle separadas para cada Cliente (customer).Figura 41. . La base de datos para este escenario se muestra en la Figura 42. asegúrese de que la tabla Customer está en el área de trabajo actual en el momento de ejecutar el informe. La tabla Homes guarda un registro para cada vivienda del cliente. VFP procesa todos los registros de la tabla padre. Relaciones . Sin embargo. si escribe un nombre de tabla padre como alias destino.es el término utilizado para describir qué tabla es la tabla conductora para una banda de detalle en particular. y la tabla Homes es el alias destino para la banda de detalle 3. puede obtener resultados diferentes. un total de 100 registros. Entonces. establezca esta tabla para la propiedad InitialSelectedAlias. alias destino de una banda de detalle igual a la tabla padre. Si utiliza código para definir las tablas. y establece. una banda de detalle se procesa por el registro padre. Si utiliza el Entorno de datos del informe para definir las tablas. Miembros. Las tablas Members. el comportamiento es igual a las versiones anteriores de VFP. Homes) para una compañía de seguros. imprimiendo cada registro padre en la banda de detalle. la tabla Customer es la tabla controladora. En este ejemplo. la tabla Members es el alias destino para la banda de detalle 1. En otras palabras. El "Alias destino" El target alias tabla destino . el informe final imprimirá 10 conjuntos de 10 registros. Vehicles. En este ejemplo. Controlar el Informe Es necesaria una tabla para manejar o conducir el informe. la tabla Vehicles es el alias destino para la banda de detalle 2. Un ejemplo de Base de datos de Clientes. si tiene una tabla con 10 registros padres. La tabla Customer es la tabla padre y contiene un registro para cada cliente de la compañía de seguros. 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. Si no se define alias destino para una banda de detalle. La tabla Vehicles guarda un registro para cada vehículo del cliente. Para cada registro de la tabla padre.Figura 42. Members. Vehículos y Viviendas (Customers. 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: y y y y y y y y y 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). para cada objeto de la banda. Es importante notar que incluso si no hay registros en la banda detalles. El cuadro de diálogo Modificar bandas (Edit Bands) puede ser llamado seleccionando Modificar bandas. el cuadro de diálogo Modificar bandas (Edit Bands) indica además cada encabezado de banda de deta banda de detalle y pie de banda lle. NOT EOF(<target alias>) . la casilla de verificación Eliminar las líneas en blanco (Remove line if blank). (Edit Bands. Asegúrese además de activar. de una banda en particular. el encabezado y pie de banda asociados se imprimirán. puede utilizar la siguiente expresión para Imprimir cuando (Print when) en cada objeto definido en la banda para suprimir su impresión.. Si no desea imprimir los encabezados y pies de bandas en esas condiciones. Además de identificar cada banda de detalle en el diseñador de informes. de detalle utilizando un número consecutivo de banda. encabezado de banda de detalle y pie de banda de detalle.) desde el menú Informes (Report) (vea Figura 48)..Figura 47.. 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. La banda de detalle está marcada con triángulos sólidos y todas las otras bandas están marcadas con triángulos abiertos. cada banda de detalle se agrega al cuadro desplegable. De otro modo. el cuadro de diálogo Detalle (Detail) tiene algunas opciones nuevas: y 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. entonces continúa en la columna siguiente. Vea en la Figura 49 el nuevo cuadro de diálogo para Variables del informe (Report Variables). 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). Es necesario entender completamente como se procesan para utilizarlas con eficiencia. 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. puede obtener resultados inesperados. 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. 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. si se define en el informe más de una banda. Además de renombrar el control.Los encabezados y pies de banda de detalle tienen algunas de las mismas opciones de los encabezados y pies de grupo. 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. Como se ve en la Figura 45. y y y y y 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. De esta forma se define más claramente que la variable se reinicia basada en los cambios del valor de la opción seleccionada. junto con la opción Comenzar en una página nueva (Start on a new page). . El conjunto de detalles comienza en una página nueva si no está disponible la cantidad de espacio indic ada. para asignar el 1 al número de página para cada conjunto de detalle. Si un conjunto de detalles tiene suficiente información que desborde la columna. Observe que esta opción le permite asignar específicamente un conjunto de detalle a una columna determinada. el cálculo se procesa en varios lugares. se aplica para cada registro en el alias destino de la primera banda de detalle. Si selecciona otro valor en Reiniciar en base a (Reset based on) diferente a una banda de detalle. Puede ver además el Total de registros procesados (Total records processed) al final del informe muestra un valor de 20. Al seleccionar (Detail on) como valor de Reiniciar en base a (Reset based on). puede ver un ejemplo de variables de informe calculadas asociadas con bandas de detalle individuales. indica a VFP que procese este cálculo sólo para los registros del alias destino de esta banda de detalle. . más el total de vehículos procesados Vehicles (7). Luego. más el total de clientes procesados Customers (3). Las variables calculadas en el informe tiene algunas opciones nuevas en Reiniciar basado en ("Reset based on"). Segundo. más el total de viviendas procesadas Homes (3). etc. se aplica el cálculo para cada registro padre. 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. Primero. se aplica el cálculo para cada registro en el alias destino de la segunda 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. En el informe de dos páginas mostrado en la Figura 50.Figura 49. Este número representa el total de miembros procesados Members (7). . 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. SUMMARY . y el pie de detalle con OBJCODE igual a 10. Misceláneas Existen algunos elementos adicionales que deben ser explicados en el tema de las múltiples bandas de detalle. El encabezado de detalle se guarda con 9 para OBJCODE. Las variables de informe calculadas se pueden asociar a una banda de detalle o se pueden aplicar a todos los registros procesados.Figura 50.La nueva expresión para alias destino se guarda en el campo EXPR del registro correspondiente a la banda de detalle. datos y gráficos en un informe. y entender la relación entre las tablas. y otra información que no cambia cada vez que se imprime el informe. Los registros Existen diferentes tipos de registros guardados en el metadato del informe. nombres de compañías. El campo OBJTYPE identifica el tipo de cada registro y el resto de la información del registro varía grandemente. Cualquier campo adicional es retenido por VFP y no será eliminado. los campos en la tabla tienen múltiples propósitos y necesita conocer el OBJTYPE para descifrar el significado del resto del registro. Teóricamente. En otras palabras. los encabezados y pies de bandas de detalle y las bandas de detalle no se procesan. para acomodar todas las características nuevas del generador de informes.Utilizar la cláusula SUMMARY en el comando REPORT FORM evita imprimir la banda de detalle. encabezados y pies de columnas y encab ezados y pies de grupos. Al utilizar la cláusula SUMMARY en un informe con múltiples bandas de detalle. Antes de VFP 9. Este comportamiento anulaba el propósito del campo USER y lo hacía inútil. puede ejecutar los informes en versiones anteriores de Visual FoxPro.0.0 es la forma en que se trata el campo USER. Para cada registro del FRX. el Generador de informes de VFP 9. cualquier dato guardado en el campo USER se guarda y se deja sólo. Report objects: Algunos tipos de objetos diferentes son utilizados como formas. Por tanto. estos objetos se referencias como objetos de informe (Report objects) y tienen los siguientes tipos: o Label (OBJTYPE = 5): Un objeto etiqueta (label) es un término utilizado para describir una pieza estática de texto colocada en un informe. Otro cambio clave en el Informe de VFP 9. era borrado cualquier dato guardado en el campo USER. Cada objeto label en un informe se representa por un registro de la tabla. los campos OBJTYPE y OBJCODE se utilizan juntos para definir qué tipo de data contiene el registro. ya que son agregados al final del FRX. En VFP 9. Existe un registro de definición de informe por cada tabla.0. Debe tener también el control sobre cómo se afectan las variables y los cálculos por las múltiples bandas de detalle. Hay que entender cómo trabajan todas las tablas juntas. No todos los campos del FRX se aplican a todos los tipos de registro. Puede que necesite leer esta sección más de una vez antes de entenderlo del todo. Colectivamente. Además de mantener el campo USER. En lugar de eliminarlos del FRX. no así todos los encabezados y pies de páginas.0.0 retiene también todos los registros de tipos desconocidos. títulos de columnas. Se pueden crear campos adicionales en el FRX. el Generador de informes retiene estos registros al final del FRX y los ignora durante el procesamiento. Los tipos válidos son los siguientes: y Report definition (OBJTYPE = 1): El primer registro en la tabla es el registro de definición de informe. en dependencia del OBJTYPE. si agrega nuevos campos o registros al FRX. La tabla FRX Para mantener compatibilidad hacia atrás. texto. y como no está utilizando nada nuevo. como puede ser información de impresión e información de configuración de página. Mucho que aprender Hacerse con el control de las múltiples bandas de detalle puede tomar un tiempo. Por supuesto.0 utiliza la misma estructura que versiones anteriores. se destruyen si modifica o guarda el informe en una versión anterior de VFP. saber qué es un alias destino. Cualquier expresión On Entry u On Exit en la banda de detalle no se procesa cuando se utiliza la cláusula SUMMARY. Contiene información general sobre el informe. y . Esto brinda la capacidad de agregar sus propios tipos de registro para procesamientos especiales. puede además escribir informes en VFP 9. Es utilizado comúnmente para títulos de informe. el Generador de informes de VFP 9. los campos existentes son sobrecargados cuando es necesario. Band (OBJTYPE = 9): Un objeto banda band) se utiliza para representar una banda individual de un informe.las bandas pie de grupo (objcode = 5) se agregan en el orden opuesto al que aparecen en el cuadro de diálogo Agrupar datos. Los datos pueden ser un campo de una tabla o el resultado de una expresión. resumen. que es el siguiente: y y Registro Definición de informe (OBJTYPE = 1) Registros de bandas (OBJTYPE = 9). se agrega el conjunto de bandas de la segunda banda de detalle. summary.. Variable (OBJTYPE = 18): Un objeto variable se utiliza para representar una variable individual del informe. 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). encabezado de detalle y pie de detalle (title. con las siguientes excepciones: o Cuando se definen en el informe múltiples grupos de datos. detalle y pie de página (page header. o Field (OBJTYPE = 8): Un objeto campo (field) es uno de los objetos más comúnmente utilizados en un informe. 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). Como mínimo. Todas las propiedades y métodos del entorno de datos se almacenan en este registro. detail header. Entonces. Las bandas se agregan a la tabla en orden ascendente del campo OBJCODE. data group header. Cada objeto line en un informe se representa por un registro de la tabla. Se utiliza para imprimir datos en un informe. pie de columna.. Data Environment (OBJTYPE = 25): Un objeto entorno de datos (data environment) se utiliza para representar el entorno de datos de un informe. o Picture (OBJTYPE = 17): Un objeto imagen (picture) se utiliza para representar un control Picture/ActiveX Bound en un informe. Puede utilizar el comando SORT para copiar los registros a tablas temporales y luego devolverlos a la tabla del informe en el orden correcto. las bandas encabezado. donde el objeto que se encuentra arriba de todos se agrega primero. Cada Picture/ActiveX en un informe se representa por un registro de la tabla. o 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..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. column footer. y detail footer). existe un objeto font (para la fuente predeterminada). Se puede utilizar incluso cálculos internos que trae el Generador de informes de VFP para obtener los resultados. Cada variable en un informe se representa por un registro de la tabla.. Cada objeto cursor o relation que esté definido en el Entorno de datos de un informe se representa por un registro de la tabla.. data group footer. 7. Como mínimo. encabezado de columna. 8 y 17) se agregan en el orden de su Z-Order. encabezado de grupo. o Cuando se definen múltiples bandas de detalle en un informe. Registros de objetos Grupo (OBJTYPE = 10) Registros de variables de informe (OBJTYPE = 18). pie de grupo. Los objetos del informe (OBJTYPE = 5. Existe un registro data environment para cada tabla FRX. . la primera banda de detalles. etc. Font (OBJTYPE = 23): Un objeto fuente (font) se utiliza para representar una única fuente utilizada en cualquier lugar del informe.y y y y y y Line (OBJTYPE = 6): Un objeto línea (line) es utilizado para representar líneas horizontales y verticales en un informe. Cada field en un informe se representa por un registro de la tabla. column header.. detalle y pie se agregan como un conjunto. y page footer). Data (OBJTYPE = 26): Un objeto dato (data) se utiliza para representar lo mismo un objeto cursor o un objeto relación. y y y y y y . 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. Un informe puede contener además varias bandas opcionales título. 6. todos los informes tienen tres objetos de banda: encabezado de página. . detail. Cada shape en un informe se representa por un registro de la tabla. Cada tipo diferente de fuente del informe es representada por un registro de objeto font. o Shape (OBJTYPE = 7): Un objeto forma (shape) se utiliza para representar rectángulos y rectángulos redondeados en un informe. Si el sistema está fijado en centímetros. La Tabla 2 lista cada campo y el significado para los diferentes tipos de objetos.0 y se localiza en el directorio HOME() + 'toolsfilespec'. Si el sistema está fijado en pulgadas.x) 23-Font 25-Data Environment 26-Data Siempre "WINDOWS" Es el identificador único de la mayoría de los registros. Descripción TIMESTAMP Información sobre cuándo fue modificado el registro por última vez. el VPOS del objeto y entonces determina en que banda entra un VPOS determinado. en dependencia del OBJTYPE particular para cada registro. 50-99 disponibles para uso del usuario.La unidad de medida Visual FoxPro utiliza su propia unidad de medida FoxPro Report Units (FRU).x reports) 5 = Label 6 = Line 7 = Shape . Campo PLATFORM UNIQUEID OBJTYPE Todos Todos excepto: 0-Comment 23-Font 25-Data Environment 26-Data Todos excepto: 21-Printer driver (2. 0 = Comment 1 = Report Definition 2 = Work area (2. la unidad de medida es 1/1. El valor para la altura de la banda gris es 2083. Puede utilizar SYS(2015) para crear un valor personalizado al agregar registros. OBJTYPE 0-49 reservados para uso nativo.16666667 al utilizar centímetros. Microsoft proporciona una DBF que contiene información sobre las tablas FRX. La posición No existen campos en la tabla que representen a que banda pertenece cada objeto.x reports) 4 = Relations (2. Los campos Describir lo que representa cada campo es difícil porque los campos pueden ser utilizados con diferentes propósitos.x reports) 3 = Index (2. al referirse al tamaño y ubicación de los objetos en el informe.000 de un centímetro. la unidad de medida es 1/10. Al mirar a la altura de cada banda. En su ugar Visual l FoxPro determina la banda calculando la altura definida para cada banda.33333333 al utilizar pulgadas y 529. 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. Esta DBF ha sido actualizada para VFP 9. Además de la Tabla 2.000 de una pulgada. Área de trabajo de tabla hija. Relation. o cursor adapter) OBJCODE Cuando el campo OBJTYPE no es suficiente para identificar un tipo de registro. NAME 2-Work area (2. 1-Report Definition Siempre 53. Siempre 0.x) 3-Index (2. Encabezado en tiempo de diseño. Área de trabajo del IDX. Siempre 4. Nombre del archivo IDX. 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 Nombre del archivo de la tabla.x) 5-Label 6-Line 8-Field 10-Group 17-Picture 7-Shape 9-Band Área de trabajo de la tabla. se utiliza el campo OBJCODE para identificación adicional del registro.x) 4-Relation (2.x) 3-Index (2. 2-Work area (2.x) 8-Field .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. x) 25-Data Environment 26-Data "dataenvironment" "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. 10-Group Este número representa el primer objeto incluido en este grupo. Si se define como (Picture from Field). . Cuando ocurre esto. contiene la expresión. y se selecciona un archivo de imagen (picture file). los objetos agrupados pueden pertenecer a otros objetos agrupados.x) 4-Relation (2. contiene el nombre del campo general. Expresión de Agrupación de datos (Data Group). Nombre de las variables. Si se define como Imagen desde archivo (Picture from File). está en blanco. y se introduce una expresión. VPOS 1-Report Definition Cantidad de conjuntos de columnas. Texto de los objetos etiqueta (Label). el grupo de objetos entero se cuenta únicamente una vez que se haya determinado este número.x) 5-Label 8-Field 9-Band/Group Header 9-Band/Detail 18-Variables 25-Data Environment 26-Data Expresión de orden. Nombre de la impresora configurada. 3-Index (2. Expresión de Alias destino. Expresión de relación. Se basa en el Z-Order de los objetos del informe. 18-Variables 21-Printer driver (2. Propiedades del Entorno de datos o del objeto Data. Expresión de objeto campo (Field). Sin embargo. Expresión de Almacenar valor (Value to store).17-Picture Si se define como Imagen desde archivo (Picture from File). 9-Band/Detail 9-Band/Group Header 23-Font Report objects 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. en FRUs. FONTMETRIC(6). Altura de los objetos. El ancho promedio de los caracteres en pixels. FRUs. PICTURE 5-Label .Raised L = Subíndice . contiene el XML con el entorno de datos.Italic R = Sobreíndice . FONTMETRIC(1). WIDTH 1-Report Definition Ancho de cada columna.x report objects B = Negrita . Relativo al margen de impresión si se selecciona Página imprimible (Printable page). 9-Band 23-Font Report objects Altura de la banda. Sin embargo si los objetos agrupados se incluyen en otro grupo. 1-Report Definition Margen izquierdo. Lo que sube el carácter en pixels. 10-Group Este número representa el total de objetos de informe en este grupo. en FRUs. en FRUs. Posición vertical de los objetos.23-Font Report objects HPOS Altura de los caracteres.Lowered J = Alineada a la derecha C = Alineada al centro Contiene el formato de alineación de los caracteres. Ancho de los objetos.Bold I = Cursuva . en FRUs. 2. en FRUs. todo el grupo se cuenta como un único objeto. Ancho máximo de caracteres en pixels. Posición horizontal de los objetos en. 23-Font Report objects HEIGHT 1-Report Definition Espacio entre columnas. Relativo al borde físico del papel si se selecciona Toda la página (Whole page). FONTMETRIC(2). en FRUs. en FRUs. en pixels. STYLE 1-Report Definition Si el informe utiliza una clase DataEnvironment o ha copiado el Entorno de datos de otro informe. FONTMETRIC(7). No permitir agrupaciones de datos 10. = Sesión de datos Privada . 2048. 4. Si se definió como Picture from File. Se corresponde con el cuadro de edición Comentarios (Comments). No mostrar Configurar página 12. 8. y se escogió un archivo de imagen. significado) 0. 16. Si se selecciona Interleave. 1. Si se definió como Picture from Field. 512. No imprimir 16. significado) 7.T. No eliminar 3. 16384. significado) 4. 17-Picture ORDER Todos anterior a VFP 9. No permitir bandas opcionales 9. No permitir variables 11. No se utiliza. = Informe permanente 2-Work area (2. 2. 4096. No modificar 14. la expresión de formato inicia con @R. No modificar 6.F. valor. No mostrar Entorno de datos 15. = Sesión de datos Predeterminada 18-Variable COMMENT ENVIRON Todos 25-Data Environment . 256. valor.T.0 Continene un valor de caracteres que representa un valor numérico (las marcas binarias sumadas) para identificar niveles de protección.0 Todos VFP 9. valor.F.F. No permitir selección múltiple 13. 1024. 128. está en blanco. Si se definió como Picture from File. Lock (movido o redimensionado) 1. ay se introduce una expresión. este contiene la ruta relativa y nombre del archivo.T. No seleccionar Bandas (bit. No hacer presentación preliminar 8.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). 8192. está en blanco. 32768. 65536. = Informe generado temporalmente por el asistente . .x) . No permitir Informe rápido UNIQUE 1-Report Definition . 64. Objectos (bit. = Existe un índice activo para esta área de trabajo . = No existe un índice activo para esta área de trabajo 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). Hide (visible) 2. No redimensionar Informe (bit. Tamaño del borde (cuando selecciona Borde (Pen) desde el menú Formato (Format) y escoge uno de los trazos de línea sólida). N para campos numéricos. Margen extra en pixels. Contiene el código de eventos y métodos. Color de primer plano Blue como en RGB(). Color de fondo Green como en RGB().x) 9-Band 18-Variable 25-Data Environment 26-Data Alias del área de trabajo. Color de fondo Blue como en RGB(). FONTMETRIC(3). Contiene el código compilado de eventos y métodos. TAG2 1-Report Definition Información binaria del controlador de impresora. D para campos Fecha. Valor inicial (Initial value). Valor de la expresión Al entrar (On Entry). Color de primer plano Red como en RGB(). FONTMETRIC(5). Color de fondo Red como en in RGB(). Color de primer plano Green como en RGB(). 9-Band 25-Data Environment 26-Data Valor de la expresión Al salir (On Exit). TAG 1-Report Definition Información binaria del controlador de impresora.BOXCHAR FILLCHAR Todos 8-Field No se utiliza C para campos de caracteres. 0 = Trazo fino 1 = 1 Punto 2 = 2 Puntos 4 = 4 Puntos PENGREEN 23-Font Report objects PENBLUE FILLRED FILLGREEN FILLBLUE PENSIZE Report objects Report objects Report objects Report objects 6-Line 7-Shape . 2-Work area (2. PENRED 23-Font Report objects Lo que baja el carácter en pixels. 167).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. 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. 5-Label 8-Field 23-Font Nombre de la fuente. 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 Patrón de relleno (Seleccionar Relleno (Fill) del menú Format (Format). 5-Label 8-Field 23-Font 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. ladeadas a la izquierda 5 = Líneas diagonales. MODE . 0 = Ninguno 1 = Sólido 2 = Líneas horizontales 3 = Líneas verticales 4 = Líneas diagonales. FONTSIZE 1-Report Definition Tamaño de la fuente. ladeadas a la derecha 6 = Cuadrícula (líneas horizontales y verticales) 7 = Trama (líneas diagonales a izquierda y derecha) FILLPAT 7-Shape FONTFACE 1-Report Definition Nombre de la fuente para la Fuente predeterminada. 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). Report objects Valor de la opción Flotante (Float) del cuadro del diálogo Propiedades (Property) del objeto. append ellipsis) RULERLINES GRID 1-Report Definition . = Está activado Ajustar a la cuadrícula (Snap to Grid) .F.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 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).F.T.T. = El área imprimible es Toda la página (Whole page) . 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. 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. en pixels. 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. 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 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 GRIDV GRIDH FLOAT STRETCH 6-Line 7-Shape 8-Field STRETCHTOP 6-Line 7-Shape TOP 1-Report Definition . = No está activado Ajustar a la cuadrícula 1-Report Definition Espacio vertical de las líneas de cuadrícula. 1-Report Definition Espacio horizontal de las líneas de cuadrícula. = 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 . en pixels. 9-Band/Group Footer . Coincide con el registro encabezado de grupo. Coincide con el registro encabezado de detalle. Se imprime la banda Título en una página propia. = Conjunto de múltiples columnas se imprimen en el orden de izquierda a derecha . No se utiliza. SUPTYPE SUPREST NOREPEAT Todos Todos Report objects 9-Bands/Detail RESETRPT PAGEBREAK Todos 9-Band/Title 9-Band/Group Header 9-Band/Group Footer 9-Band/Summary 9-Band/Detail Header 9-Band/Detail Footer COLBREAK 9-Band/Group Header Se imprime la banda Resumen en una página propia. No se utiliza.F.T. 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). 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).el cuadro de diálogo (Property) para el objeto BOTTOM 1-Report Definition . 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). Coincide con el registro encabezado de Grupo. 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). No se utiliza. 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). = 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). 5 2 = Doble Siempre es 0. 9-Band/Group Footer 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). Coincide con el registro encabezado de detalle. SPACING 5-Label 8-Field DOUBLE 17-Pictures 1-Report Definition . No se utiliza. Imprimir pie de página. . rellenar el marco (Scale and fill frame) 0 = Sencillo 1 = 1. Coincide con el registro encabezado de grupo. 9-Band/Detail Footer GENERAL 17-Pictures Configuración de recorte/ escala (Clip/Scale): 0 = Recortar imagen (Clip) 1 = Cambiar la escala de la imagen. indica el FontCharSet aplicado a este objeto (Ver RESOID) Report objects SWAPHEADER Todos SWAPFOOTER Todos EJECTBEFOR EJECTAFTER 9-Band/Summary 9-Band/Summary No se utiliza.T. 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). 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.9-Band/Detail Header 9-Band/Detail Footer RESETPAGE 9-Band/Group Header Se corresponde con el valor de la casilla de verificación (Start on a new column) en el cuadro de diálogo (Detail). Coincide con el registro encabezado de la banda detalle. Imprimir encabezado de página. conservar la forma (Scale retain shape) 2 = Cambiar la escala de la imagen. 24.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). . 7 reinicia el OFFSET 8-Field 17-Picture TOPMARGIN BOTMARGIN TOTALTYPE Todos Todos 8-Field 18-Variable RESETTOTAL Cuando TOTALTYPE<>0 8-Field 18-Variable . No se utiliza. (Un valor de . si se seleccionó Nunca agregar alias (Never add alias) (Un valor . en el campo PLAIN tiene preferencia sobre este valor. 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 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. si se seleccionó Siempre agregar alias (Always add alias). .F. = Altura de banda constante No se utiliza. y 99). 32. 0 = Alinear a la izquierda 1 = Alinear a la derecha 2 = Alinear al centro 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) No se utiliza.T.T. SUMMARY ADDALIAS Todos 1-Report Definition Se corresponde con el valor de Aliases en el cuadro de diálogo (Expression Builder Options). tiene prioridad sobre el valor de ADDALIAS.) 6-Line 7-Shape Siempre 1. Radio utilizado en objetos cuadrados redondeados (los cuadros de diálogo predeterminados utilizados son 12.) 9-Band . 6 reinicia el cálculo para el Grupo de datos 1.T.T. 16. ) 79+ = Al final de la banda de detalle es el número de la banda de detalle (por ejemplo. = Mostrar posición está en OFF 7-Shape Se corresponde con el valor de Imprimir valores repetidos (Print repeated values) en el cuadro de diálogo (Print when). .T. etc. = Si Se corresponde con el valor de (When detail overflows to new page/column) check box en el cuadro de diálogo (Print when).) 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 1 = Reiniciar al final del informe Cuando TOTALTYPE=0 18-Variable RESOID 1-Report Definition Indica que el FontCharSet aplica para este objeto (o todo el informe).F. pero el al revés (observe que este campo y el campo SUPVALCHG se establecen para formas . 81 reinicia el cálculo al conjunto de detalle 2.T. Report objects 1-Report Definition . 80 reinicia el cálculo al conjunto de detalle 1. = No . etc.cálculo para el Grupo de datos 2. = Mostrar posición está en ON . Se corresponde con el valor de (In first whole CURPOS SUPALWAYS SUPOVFLOW Report objects SUPRCOL Report objects .shapes).F.
Copyright © 2024 DOKUMEN.SITE Inc.