Rellenar Visual FoxPro informes con datos sobre la marcha

Resumen:
 informe de Visual FoxPro escritor es un escritor de gran alcance informe completo que proporciona todas las herramientas que necesita para crear y enviar informes convincentes con su solicitud. En la mayoría de ocasiones, puede crear informes de Visual FoxPro basada únicamente en datos que ya existe (por ejemplo, una tabla existente, consulta o vista). Sin embargo, imaginar que los datos que necesita para llenar su informe con no existe como una tabla que puede ser fácilmente añadido al entorno de datos de su informe ni existe como un conjunto de cuadros en los que se puede ejecutar una recta de avance de consultas SQL o vista! En este artículo se describe cómo se puede rellenar un informe de Visual FoxPro en tiempo de ejecución mediante la recopilación de los criterios del informe de los usuarios, extraer los datos de las tablas sobre la base de que los criterios, la creación de un cursor y luego introducir el cursor con los datos derivados todos en tiempo de ejecución.
 
 Quién debería leer este artículo?
 En este artículo se asume alguna familiaridad con la construcción y el desarrollo de aplicaciones con Microsoft Visual FoxPro 9
 Introducción:
 Una de las principales ventajas de la utilización de Visual FoxPro como su principal herramienta de desarrollo es que proporciona todas las herramientas necesarias para crear aplicaciones de gran alcance, obligando a todas las funciones que son rápidos y con multitud de funciones!
 Una de las características de Visual FoxPro que hace esto posible es el escritor informe recientemente renovado que se incluye con Visual FoxPro 9! Debido a la necesidad de proporcionar o facilitar datos para el informe o la etiqueta antes de imprimirla, el Report Writer ofrece una variedad de maneras de hacer que los datos fácilmente disponibles para su informe.
 Un método para hacer que los datos disponibles para su informe y por cierto el más usado es escribir un informe que se basa siempre en las mismas fuentes de datos. Este método en realidad sería necesario agregar tablas o vistas al entorno de datos de un informe o utilizar un comando DO query en el evento Init del entorno de datos del informe. Como alternativa, puede ejecutar una consulta mediante la creación de una ejecución de una instrucción SQL en el evento Init del entorno de datos del informe.
 Un segundo método es cuando usted necesita para crear un informe que utiliza conjuntos separados de fuentes de datos para el informe. En este caso, de forma dinámica abriría las fuentes de datos en tiempo de ejecución mediante el uso de un table USO, view USO, query DO o SQL SELECT para el evento click de un botón u otro código que se ejecutar antes de que emitan un informe o un comando ETIQUETA.
 Sin embargo, lo que ocurre cuando los datos de su informe no está en una tabla que se puede consultar de forma dinámica con una instrucción SELECT de SQL ni está en una forma que sólo tiene que abrir con un comando USE! La riqueza de la lengua de programación Visual FoxPro le permite resolver fácilmente este problema, ya que este artículo se demuestran. Para demostrar el concepto bajo discusión, imagine que usted necesita para imprimir o para generar los ingresos y informe de gastos para su empresa como en un día determinado! Esto significaría que usted necesita para mantener un saldo diario de funcionamiento de cada cuenta en su carta General Ledger de cuentas en una tabla que tal vez la palabra ActGLDayTot. En las secciones siguientes se describen cómo crear estas tablas y su estructura, así como el código que genera el informe.
 Impresión de informes en Visual FoxPro
 Como ya se señaló, es necesario disponer de datos para un informe antes de proceder a imprimir el informe. Para imprimir un informe en Visual FoxPro, se necesita ejecutar el comando REPORT FORM reportname . Para la sintaxis completa del comando REPORT FORM, consulte la documentación de Visual FoxPro 9 ayuda en línea.
 Si ejecutas el comando REPORT FORM sin tablas en el entorno de datos y no las fuentes de datos abiertas en el entorno de datos del informe, el informe sólo aparece a parpadear y luego volver a cerrar! Para evitar esta situación, usted tendrá que añadir datos al entorno de datos o utilizar el evento Init del entorno de datos para que los datos disponibles en el entorno de datos antes de imprimir. Cuando los datos no existe en una consulta o en una forma que pueda ser consultado directamente, ¿qué vas a hacer?
 Poner a disposición datos sobre la marcha
 Dado que los datos deben ser los primeros puestos a disposición antes de ejecutar un informe, deberá emitir una instrucción SELECT de SQL o abrir una mesa de por lo menos en el evento Init del entorno de datos del informe. Sin embargo, si sus datos no existe en una forma en que usted puede construir fácilmente una vista sobre ella o una consulta sobre el mismo y si no existe en una forma en que se puede agregar como una tabla, entonces ninguno de los métodos descritos la medida se obtendrán los resultados deseados!
 Esto significa que usted debe encontrar una nueva forma de hacer los datos disponibles para su programa. Un examen más detenido de cómo se utiliza la instrucción SELECT de SQL proporciona una idea de cómo usted puede hacer esto. La forma general de la sintaxis de la instrucción SELECT de SQL que queremos considerar es el siguiente:
 
 
 SELECT [TODOS | DISTINCT] [TOP nExpr [por ciento]] Select_List_Item [...]
 
 DESDE [FORCE] [Table_List_Item, ...]
 
 [WHERE JoinCondition | [FilterCondition y | o JoinCondition | FilterCondition]] ...
 
 [EN | StorageDestination A] DisplayDestination
 
 
 Esta forma de la sintaxis indica que la instrucción SELECT de SQL crea una consulta y luego obtiene la información requerida de la tabla en un destino de almacenamiento más generalmente, un cursor (tabla temporal), tabla o matriz. El cursor que representa el destino de almacenamiento se utiliza como la fuente de datos para el informe. Con base en esta realidad, podemos deducir que nuestro informe se ejecutará si creamos un cursor objeto con el cursor CREATE o una tabla temporal mediante CREATE TABLE en el evento Init del entorno de datos. Esto haría que los datos disponibles para el informe y por tanto, impediría el informe de cierre de nuevo inmediatamente después de ser abierto.
 ¿Cómo esta realidad en la práctica?
 1. Crear un informe: En primer lugar, habría que crear un informe de un informe en el Diseñador de informes. Usted puede hacer esto mediante la elección del nodo Informes en el Administrador de Proyecto y eligiendo el botón Nuevo. Cuando se muestra el cuadro de diálogo Nuevo informe, usted elegiría un nuevo informe. Visual FoxPro entonces crear un informe nuevo en blanco llamado Informe1 y abrirlo en el Diseñador de informes
 2. Diseño de informe ": Ahora que el diseñador de informes está abierta, puede comenzar a trazar su informe. Por lo general, debería hacerlo arrastrando los campos desde el entorno de datos hasta el lienzo informe. Pero en este caso, no tiene datos en el entorno de datos por lo que debe establecer las propiedades del informe manualmente. Por lo tanto, debe mostrar la barra de herramientas Controles de informes al elegir los informes de control Barra de herramientas desde el menú Ver principal. Una vez que la barra de herramientas muestra, usted puede planear la distribución de la superficie de informe mediante la realización de las siguientes actuaciones:
 a. Seleccione un control de la caja de herramientas para ser colocado en su informe. Si selecciona un control como un control de cuadro de texto y luego haga clic en la banda de detalle del informe, Visual FoxPro abre automáticamente el cuadro de diálogo Propiedades de campo lo que puede establecer no sólo la fuente de datos para el campo, sino también otras características del sobre el terreno.
 b. En el cuadro Expresión en la ficha General, introduzca la expresión que se servidor como una fuente de datos para el informe. Usted va a entrar en el cursorname.fieldname formato de cursor donde representará al nombre del cursor que va a crear (por supuesto que no la ha creado aún de lo contrario simplemente habría elegido el botón ... para que usted lo seleccione en el generador de expresiones [i]). Si hace clic en un control como un control Label, que en cualquier lugar sobre el informe ya continuación, escriba en el punto de inserción para agregar una etiqueta descriptiva. Por ejemplo, haga clic en un control de etiqueta en el informe ya continuación, agregue una etiqueta descriptiva para cada cuadro de texto en el encabezado de la página. Puede agregar descripciones como Campo Uno y Campo Dos. Puede agregar un título del informe (por ejemplo, el informe de prueba) haciendo clic en el control Label y, a continuación haciendo clic en la posición adecuada en el encabezado del informe. Para establecer los estilos y tamaños de fuente para los títulos, haga clic en el título adecuado, elija Propiedades y seleccione el estilo de página con fichas. En el estilo de página con fichas, puede hacer los ajustes apropiados en el cuadro Fuente o hacer cualquier otra configuración que sea necesario. Recuerde guardar su trabajo como usted va adelante.
 c. Ahora que usted ha recibido campos en su informe, se puede aplicar el formato habitual con el informe, como los campos calculados, líneas, etc
 3. Establecer las propiedades del entorno de datos: Usted todavía desea evitar que su informe de proyector se apaga automáticamente cuando intenta ejecutarlo de manera que debe establecer las propiedades del entorno de datos de la siguiente manera:
 a. Haga clic en su informe y luego elija el comando de menú Entorno de datos desde el menú contextual que aparece. El entorno de datos - Diseñador de informes se abre. Está vacío, mostrando que no hay fuentes de datos se han agregado a ella.
 b. Haga clic dentro del entorno de datos ya continuación, elija el comando de menú Propiedades para mostrar la hoja de propiedades para el entorno de datos.
 c. Establezca la propiedad AutoOpenTables en false. Cuando se establece esta propiedad en false, el informe no trate de abrir las tablas o vistas en el entorno de datos después de ejecutar el informe. Si esto llegara a suceder, el informe sólo se encontraba con que el entorno de datos no contiene ningún dato y, a continuación el informe se cierre abrupto. Ahora está listo para agregar código para el informe tal como se describe en el próximo paso (paso 4 - Escribir código para que los datos disponibles).
 4. Escritura de código para hacer que los datos disponibles: Recuerde que los datos a ser leída o puestos a disposición sólo en tiempo de ejecución. Así que ahora hay que escribir el código que hará que estos datos estén disponibles para su informe. Para ello, haga en el evento Init del entorno de datos al escribir código como:
 a. Localice el Init caso de que el entorno de datos en la hoja de propiedades y haga doble clic en él para abrir la ventana de código.
 b. En la ventana de código, escriba el código que crea el cursor utilizando el comando CREATE CURSOR y también escribir código para agregar varios registros a que el cursor mediante el comando APPEND. Este código podría ser el siguiente:
 
 CREATE CURSOR Testcursor (Campo1 c (10) único, Campo2 i)
 APPEND BLANK
 REEMPLAZAR CON TestCursor.Field1 "TEST"
 REEMPLAZAR CON 50 TestCursor.Field2
 APPEND BLANK
 REEMPLAZAR CON TestCursor.Field1 "TEST2"
 REEMPLAZAR CON 100 TestCursor.Field2
 APPEND BLANK
 REEMPLAZAR CON TestCursor.Field1 "TEST3"
 REEMPLAZAR CON TestCursor.Field2 150
 
 
 c. Cierre la ventana de código y cerrar el entorno de datos de diseño
 d. Pruebe rápidamente su informe seleccionando el botón Vista preliminar en la barra de herramientas. En el informe se debe abrir en modo Vista preliminar.
 5. Guardar y ejecutar el informe: Ahora que ha creado su informe y los datos generados en tiempo de ejecución, tendrá que guardar el informe y luego para ejecutarlo. Puede probar si su informe se ejecute mediante la realización de las siguientes actuaciones:
 a. Seleccione el botón Guardar en la barra de herramientas para garantizar que haya guardado el informe.
 b. Cierre el informe seleccionando el botón Cerrar. El informe aparece en el nodo Informes en el Gestor del Proyecto.
 c. Para elaborar este informe, seleccione el informe (Informe1) en el gestor de proyecto y luego elija el botón de vista previa. El informe se abre en el modo de vista previa de impresión.
 6. Realización de informes a través de la interfaz de usuario: lo más habitual es que su informe a disposición de los usuarios de su aplicación a través de la interfaz de usuario de la aplicación. Por ejemplo, puede proporcionar una forma a través del cual los usuarios pueden seleccionar su informe ya continuación, presione ya sea una vista previa o un botón de impresión. Para ello, tendrá que utilizar el comando REPORT FORM para ejecutar el informe mediante programación. Si usted quiere que su informe esté disponible a través de la interfaz de usuario de la aplicación, tendrá que llevar a cabo las siguientes actuaciones:
 a. Seleccione el nodo de formularios en los Documentos con fichas de página del gestor de proyecto de Visual FoxPro y, a continuación, elija el botón Nuevo. El nuevo formulario de diálogo muestra el cuadro.
 b. Seleccione el botón Nuevo formulario. Visual FoxPro crea un nuevo formulario denominado Form1 y lo abre en el Diseñador de formularios.
 c. Muestra el Cuadro de controles de formularios si no es que ya hemos mostrado mediante la elección del menú Controles de formulario barra de herramientas en el menú ver.
 d. Seleccione el botón de comando de control en la caja de herramientas de control de formularios y haga clic en el formulario. Visual FoxPro creará un nuevo botón de comando denominado Command1.
 e. Haga doble clic en Command1 para mostrar la ventana Código para su evento Click.
 f. Ahora puede introducir el siguiente código:
 
 INFORME Report4.frx FORMA PREVIA NOCONSOLE
 
 g. Haga clic en el botón Guardar en la barra de botones para guardar el formulario que ha creado.
 h. Ejecute el formulario, ya sea pulsando Ctrl + E o seleccionando el botón de la barra de herramientas Ejecutar en la barra de herramientas. El formulario se ejecuta.
 i. Ahora haga clic en el botón de comando para ejecutar el informe. El informe aparece en la ventana de vista previa de impresión.
 La aplicación del concepto a una situación de la Vida Real
 En el ejemplo se ha explicado ya se ha mantenido deliberadamente simple. Ahora bien, esto se debe aplicar en una situación en la vida real. En el ejemplo mostrado, el cursor se rellena mediante la emisión de comandos APPEND BLANK. En una aplicación real de la vida sin embargo, puede ser posible que sus datos pueden ya existir, necesitando solamente para ser leído de nuevo y volver a ordenarse en un formato que su informe se puede imprimir. Vamos a ilustrar esto con la construcción de un Informe de Balance como en un día determinado (balances de prueba deben ser impresos en un momento dado como fecha de fin de período).
 Para poder imprimir este equilibrio sendero, que tendría que saber el saldo de una cuenta como en un día determinado. Vamos ahora aceptan que estos datos se almacena día a día como las transacciones se pasan en una tabla denominada ActGLDayTot y esta tabla se podría crear con la siguiente instrucción SQL:
 CREAR UN CUADRO ActGLDayTot (BatchNo c (20) PRIMARY KEY, c accountcode (15),;
 ValueDate D, CurrYear i, i NextYear, PeriodNumb i, i MonthNumb, Y Debitamt,;
 Y CreditAmt, Y Balance)
 
 Por cada cuenta en el archivo Libro mayor Maestro, queremos obtener los saldos de la cuenta como en el día especificado de manera que vamos a ser capaces de construir la balanza de comprobación. Ahora imagine que su libro mayor general tabla maestra se podría crear con la siguiente instrucción SQL:
 CREAR UN CUADRO ActGLMast (c accountcode (15) PRIMARY KEY, c AccountName (50),;
 AccountType c (40), Y CurrBal)
 El siguiente código se coloca en el evento Init del entorno de datos de nuestro informe:
 * Este Código Construye el cursor utilizado en el Informe
 LOCAL dValueDate como la fecha, cBranchCode como carácter, intNoOfRows como Integer, ODT como objeto, como Lógica lAnswer
 DIMENSIÓN arrTR (1,9)
 STORE "" TO cBranchCode
 TIENDA ((/ /)) dValueDate A
 CONSERVACIÓN DE 0 A intNoOfRows
 
 * 1) Abrir el formulario y obtener los parámetros
 NO FORMA frmMgtTBalByDate.Scx VINCULADAS
 dValueDate = frmMgtTBalByDate.txtValueDate.Value
 cBranchCode = frmMgtTBalByDate.txtBranchCode.Value
 frmMgtTBalbyDate.RELEASE
 * OPENTABLES ()
 
 ODT = CREATEOBJECT ('ActGLDayTot')
 lAnswer = oDT.GetTransByDate (dValueDate, cBranchCode, arrTR, intNoOfRows, chrProgTitle)
 CREATE CURSOR MgtTBalByDate (c accountcode (20), c AccountName (50), c AccountType (50), TBalDate D, Y MTDDebit, MTDCredit Y, Y YTDDebit, YTDCredit Y, C Usuario (10))
 SELECCIONAR MgtTBalByDate
 APPEND FROM ARRAY arrTR
 This.OpenTables ()
 
 En el código anterior se declaran las variables de memoria que será utilizado por la tenencia de los criterios del informe del usuario o para almacenar y transportar datos. El comando DIMENSIÓN crea una matriz que se utiliza para devolver datos de una clase de datos que encapsula Consciente de la funcionalidad de la tabla ActGLDayTot. Otra cosa a tener en cuenta es la forma en que han permitido a los usuarios especificar los datos que deben incluirse en el informe, indicando la fecha especificada para los que quieren un balance de comprobación. Para solicitar esta información a los usuarios, la línea NO FORMA frmMgtTBalByDate.Scx corre el formulario de parámetro de informe para que los usuarios pueden introducir los criterios. Cuando el usuario hace clic en el botón Ok en esa forma, un comando THISFORM.Hide ocultan temporalmente la forma del usuario mientras que las líneas inmediatamente después del comando DO FORM recoger la información en el formulario. El frmMgtTBalByDate.RELEASE línea se quita el formulario de memoria.
 
 A continuación, la línea ODT = CREATEOBJECT ('ActGLDayTot') crea una instancia de la clase ActGLDayTot y almacena una referencia a ella en la ODT objeto variable. El lAnswer = línea GetTransByDate ... llama al método en la clase para devolver los datos específicos que queremos, pasando los parámetros necesarios recogieron de usuario junto con la matriz que se utilizará para almacenar y transportar los datos a nuestro informe.
 
 Como lo hicimos anteriormente, a continuación, utilice un comando CREATE CURSOR MgtTBalByDate para crear un cursor con los campos necesarios. La línea APPEND FROM ARRAY arrTR rellena la tabla. En el informe se hace entonces a reconocer este cursor en su entorno de datos con la THIS.OpenTables línea ().
 
 Al separar el código que hace la recogida y tratamiento de la información de propio evento Init del informe, podemos hacer que el código siempre disponible desde múltiples ubicaciones, ya que está contenida en un conocimiento de datos de clase. El código que figura en el método de la clase GetTransByDate ActGLDayTot es el siguiente:
 
 * Obtener las transacciones por Fecha
 PARÁMETROS dTranDate, cBranchCode, arrTR, intNoOfRows, chrProgTitle
 LOCAL cmsg como carácter, intRows AS Integer, lGLMastInUse tan lógico
 lGLDayTotInUse LOCAL como Lógica
 
 * Inicializa las variables de los tipos correctos para evitar cualquier error
 STORE "" TO cmsg
 CONSERVACIÓN DE 0 A intRows
 
 IF TYPE ('dTranDate') 'D'
 cmsg = "Debe introducir la fecha de transacción!"
 MESSAGEBOX (cmsg, 48, chrProgTitle)
 RETORNO. F.
 ENDIF
 
 IF TYPE ('intNoOfRows') "N"
 RETORNO. F.
 ENDIF
 
 IF TYPE ('arrTR', 1) "A"
 cmsg = "matriz de transacciones que no se encuentra!"
 MESSAGEBOX (cmsg, 48, chrProgTitle)
 RETORNO. F.
 ENDIF
 
 IF TYPE ('cBranchCode') "C"
 cmsg = "ALL"
 ELSE
 cmsg = "PARA BranchCode = '" + cBranchCode + "'"
 ENDIF
 
 Si se utiliza ('ActGLMast')
 lGLMastInUse =. T.
 ELSE
 USO EN ActGLMast 0
 lGLMastInUse =. F.
 ENDIF
 SELECCIONAR ActGLMast
 GO TOP
 
 Si se utiliza ('ActGLDayTot')
 lGLDayTotInUse =. T.
 ELSE
 USO EN ActGLDayTot 0
 lGLDayTotInUse =. F.
 ENDIF
 SELECCIONAR ActGLMast
 GO TOP
 Escaneo y cmsg
 intRows intRows = + 1
 DIMENSIÓN arrTR (intRows, 9)
 arrTR (intRows, 1) = ActGLMast.AccountCode
 arrTR (intRows, 2) = ActGLMast.AccountName
 arrTR (intRows, 3) = ActGLMast.AccountType
 HACER CASO
 CASO ActGLMast.CurrBal 0
 arrTR (intRows, 7) = ActGLMast.CurrBal
 arrTR (intRows, 8) = 0
 CASO ActGLMast.CurrBal 0
 arrTR (intRows, 7) = 0
 arrTR (intRows, 8) = ActGLMast.CurrBal
 EN OTRO LUGAR
 arrTR (intRows, 7) = 0 & & Débito YTD
 arrTR (intRows, 8) = 0 & & YTD de crédito
 ENDCASE
 SELECCIONAR ActGLDayTot
 GO TOP
 * LOCATE FOR ALLTRIM (ActGLDayTot.AccountCode) = ALLTRIM (cAccountCode) Y = ActGLDayTot.ValueDate dTranDate
 LOCATE FOR ActGLDayTot.ValueDate = dTranDate
 IF FOUND ()
 HACER CASO
 CASO ActGLDayTot.Balance 0
 arrTR (intRows, 5) = ActGLDayTot.Balance
 arrTR (intRows, 6) = 0
 CASO ActGLDayTot.Balance 0
 arrTR (intRows, 5) = 0
 arrTR (intRows, 6) = ActGLDayTot.Balance
 EN OTRO LUGAR
 arrTR (intRows, 5) = 0
 arrTR (intRows, 6) = 0
 ENDCASE
 ELSE
 arrTR (intRows, 5) = 0 & & Débito MTD
 arrTR (intRows, 6) = 0 & & MTD de crédito
 ENDIF
 ENDSCAN
 intNoOfRows = intRows
 * Ahora cierra todas las tablas que no necesita
 SI NO lGLMastInUse
 USO EN ActGLMast
 ENDIF
 SI NO lGLDayTotInUse
 USO EN ActGLDayTot
 ENDIF
 RETORNO. T.
 
 El comando parámetros que comienza el método identifica los parámetros pasados a la clase. El programa utiliza un bucle SCAN ... ENDSCAN que pasar por la mesa ActGLMast para aislar todas las cuentas que cumplan con los criterios y luego para rellenar la matriz con datos coincidentes de la tabla ActGlDayTot. Al final, el programa retorna. T. si el método se realiza correctamente. Ahora puede ejecutar este informe con un comando REPORT FORM tal como lo hicimos ya sea de una forma o en el menú de Visual FoxPro.
 
 Conclusión
 
 lenguaje de Visual FoxPro de manipulación de datos es una de las cosas que hace que Visual FoxPro destacado entre los numerosos productos en su clase. Este artículo ha demostrado cómo la riqueza del lenguaje Visual FoxPro y entorno de desarrollo permite a los desarrolladores para compilar los datos necesarios para un informe en tiempo de ejecución y aún así ser capaces de controlar más o menos el proceso de generación de informes. A pesar de que este artículo ha asumido que el programador está construyendo un "zorro" puro "de aplicación (después de todo, Visual FoxPro le ofrece casi todo lo que necesitas para construir aplicaciones robustas de gestión completa de datos), con una afinación poco y cambios, puede utilizar este método para obtener los datos de poderosos servidores SQL Server, como Oracle, servidor de Microsoft, SQL o Advantage Database Server para su uso dentro de un informe de Visual FoxPro. Si lo puedes imaginar, Visual FoxPro le permite construirlo.
 
 
 [I] Si desea ser capaz de utilizar el edificio de expresión para seleccionar de una lista de campos con un selector de campo, entonces puede que tenga que escribir un comando en la ventana de comandos que crea el cursor por adelantado antes de proceder al diseño del informe diseñador. Si usted hace esto, los campos del cursor estará disponible para vosotros desde la creación de expresión. Por ejemplo, podría escribir lo siguiente en la ventana de comandos:
 CREATE CURSOR Testcursor (Campo1 c (10) único, Campo2 i)
 Una vez hecho esto, se encuentran los campos de tu cursor que figuran en la lista de campos en el generador de expresiones, por lo que sólo puede hacer clic en el campo que se desea añadir al informe.