###Guía para desarrollar reportes

####¿Qué es Códice FX? 

Es una plataforma basada en Windows para el diseño, procesamiento y despliegue de informes constituida por un diseñador de reportes (reporteador) y un conjunto de componentes para su ejecución (motor en tiempo de ejecución) y presentación (visor). 

El reporteador permite construir la especificación de un reporte, el motor en tiempo de ejecución la interpreta y produce una salida (informe), mientras que el visor se encarga de la presentación para el usuario. 

Las especificaciones de los reportes de Códice están formados por: 

- **Orígenes de datos.** Estos se construyen a partir de una conexión y consultas SQL que permiten obtener un conjunto de registros, los cuales serán impresos de acuerdo a los formatos de impresión diseñados. 
- **Parámetros.** Permiten especificar datos que pueden ser usados como criterios de filtro en las consultas SQL.  
- **Diálogos.**  Ofrecen  una  interfaz  de  usuario  con  el  principal  propósito  de  solicitar información que se asigna a los parámetros del reporte.  
- **Formatos de impresión.** Es el diseño que tendrán los datos en el papel al ser impresos. 
- **Sub-programa.** Consiste en un conjunto de rutinas en lenguaje Visual Basic Script que el usuario  puede  definir  para  aumentar  la  funcionalidad  del  reporte,  ya  sea  realizando cálculos complejos, acciones sobre los datos o interceptando y respondiendo a eventos durante la ejecución.  
- **Otros recursos.** Consisten en texto simple o imágenes que la especificación del reporte contiene para que los utilice durante la ejecución.  

La especificación del reporte se almacena en archivos con extensión XPD cuyo formato es abierto. Por su parte, el motor en tiempo de ejecución produce un documento a partir del archivo XPD que contiene los datos y es finalmente un informe. Los informes pueden almacenarse en archivos con extensión XPR y desplegarse a través de un visor para este formato.  
Es importante apuntar que los formatos XPD y XPR están basados en XML, lo que facilita su comprensión, adecuación, adopción y posible implementación en otros sistemas operativos. 

####¿Qué se puede hacer con Códice FX? 

Construir reportes que presenten información basada en parámetros que sean suministrados por el usuario o por otra aplicación.  

Códice FX proporciona mecanismos para generar reportes con parámetros que permitan filtrar el conjunto de resultados o incrustarse en las consultas SQL.  

En Códice FX se pueden construir cuadros de diálogo (ventanas) que permitan al usuario introducir los  valores  requeridos  a  través  de  controles  con  amplias  características,  Códigos  de  barras, imágenes  y  gráficas.  Códice  FX  permite  construir  reportes  que  incluyan  códigos  de  barras (EAN/UPC/Code 39/Code128) con solo dibujarlos.   

Los reportes pueden incluir imágenes que estén almacenadas en la base de datos o en cualquier ubicación  (externa  o  interna  al  reporte).  También  es  posible  incorporar  gráficas (barras/líneas/pastel/etc.) de los datos con unos cuantos clics. 

#####Elementos que forman un reporte 

**Conexiones** 

Códice FX utiliza la tecnología OLE DB para establecer la conexión y recuperar conjuntos de registros. Para crear una conexión a una base de datos puede hacerlo de dos formas. 

- Haga clic en el menú *Proyecto* seleccione *Insertar objeto* y seleccione *Conexión a  base de datos*  
- Si desea hacerlo por el explorador de proyectos, haga clic en *Insertar* y selecciones *Conexión a base de datos*.   

En el cuadro de dialogo conexión, establezca un nombre para la conexión. Seleccione *Cadena de conexión OLE DB*, y haga clic en *Diseñar*, indique una cadena de conexión seleccionando el proveedor OLE DB de acuerdo al Motor de base de datos que se esté utilizando.  

#####Origen de registros  

Un origen de registros le permite obtener el contenido de una base de datos mediante una consulta SQL. Si no ha creado una conexión no se podrá insertar un origen de registros. Una conexión puede contener uno o más orígenes de registros y estos a su vez también pueden tener orígenes de registros dependientes. 

Propiedades de un origen de registros: 

- Escriba el nombre del origen de registros (no puede existir dos orígenes de registros con el mismo nombre) 
- Especifique un tipo de origen de donde obtendrá los datos 
- Diseñe la consulta SQL que le servirá para filtrar los datos   
- Especifique los filtros y cadenas de ordenación en caso de que sean necesarias  

En caso de lo requiera podrá poner orígenes de registro dependientes, así como parámetros  para los mismos que podrá configurar en las pestañas correspondientes. 

#####Parámetros 

Códice FX permite definir parámetros para los reportes, un parámetro es la identificación por nombre de un valor que regularmente proviene del exterior y que se utiliza internamente en una condición de filtro en consultas SQL. Permiten especificar datos que pueden ser usados como criterios de filtro. 

Puede agregar parámetros de dos maneras:  

- Desde el menú *Proyecto* selecciones *Insertar objeto* y seleccione *Parámetro*   
- Desde  el  explorador  de  proyectos,  seleccionando  *Insertar*  y  haciendo  clic  en *Parámetro*.  

En la ventana de parámetros deberá definir un nombre, un tipo de dato y si desea puede agregarle un valor predeterminado. 

#####Diálogos 

Los diálogos ofrecen una interfaz de usuario con el principal propósito de solicitar información que se asigna a los parámetros del reporte, esta información servirá para restringir o filtrar los datos de la consulta SQL, pueden ser de diferentes tipos, como rango de fechas, rango de horas, un valor numérico o cadena.  

Puede agregar un diálogo de dos formas: 

- Desde el menú *Proyecto* seleccionando la opción *Insertar objeto*  y haciendo clic en  la opción *Dialogo***.**  
- Desde el explorador de proyecto dando clic en *Insertar* y seleccionando *Diálogo*  

Para cambiar el nombre de un diálogo o el título de la ventana podrá hacerlo en la barra superior del diseñador de diálogo. 

#####Formatos de impresión 

Un formato de impresión es utilizado para realizar el diseño del reporte. El principal elemento que se dibuja sobre un formato de impresión es la cuadrícula de detalle en la cual se integran los campos de una base de datos.  

En  el  formato  de  impresión  se  definen  el  tamaño  de  papel  para  la  impresión,  puede seleccionarse un tamaño personalizado o un tamaño estándar como el tamaño carta u oficio, también se define el tamaño de los  márgenes, la unidad de medida (centímetros, milímetros o pulgadas), la orientación de la hoja y si lo desea un formato de contraportada que se ejecutará después del formato principal. 

Si  desea  crear  etiquetas  puede  dividir  la  hoja  en  el  número  de  filas  y  columnas  que  se requieran.  

Configurar el formato de impresión:  

- Tamaño de papel: El tamaño del formato de impresión sobre el cual se hará el diseño del reporte. 
- Orientación:  Configure  esta  opción  de  acuerdo  a  la  forma  que  desea  imprimir  su reporte, ya que con esta propiedad se configura la orientación de la impresora. 
- Márgenes. Muestra una guía para delimitar la hoja. 

Códice FX permite grabar tarjetas con banda magnética o Smart-cards, así que si el formato de impresión que está configurando es para una tarjeta, seleccione el botón *Banda magnética, smart-card y otras opciones avanzadas* donde podrá realizar las configuraciones e incluir los datos que desea grabar. 

#####Imágenes y textos  

El diseñador de reportes de Códice FX incluye dos elementos importantes, imágenes y textos,  estos son recursos internos que una vez agregados al proyecto pueden ser utilizados cuando se desee. 

Los recursos internos pueden utilizarse para agregarlos al diseño del reporte dentro de un control. Por ejemplo puede crear un control imagen y elegir la opción de recurso interno y seleccionar una imagen de las que haya agregado. 

Las imágenes y textos se pueden agregar de dos formas: 

- Desde  el  menú  *Proyecto*  seleccionando  *Insertar  objeto*  y  haciendo  clic  en  *Texto*  o *Imagen* 
- O bien desde el explorador de proyectos en *Insertar* y seleccionando *Imagen* o *Texto*.  

#####Subprograma 

El subprograma permite agregar código en lenguaje Visual Basic Script y Java Script. El código se ejecuta durante la ejecución del reporte. Esto permite agregar funcionalidad al reporte ejecutando métodos, interceptando eventos, agregando objetos o utilizando los propios del motor en tiempo de ejecución. 

**¿Qué se puede hacer?** 

- Controlar el ingreso de datos en los diálogos. 
- Interceptar eventos de un diálogo, eventos de los controles de diálogo y  eventos que suceden durante la ejecución del reporte. 
- Utilizar  la  biblioteca  de  Códice  FX  para  acceder  a  la  especificación  del  reporte mediante el objeto XPD. Con esto es posible obtener orígenes de registro, valores de parámetros, imágenes incluidas en el reporte, etc. 
- Modificar o crear nuevos objetos dentro del reporte. Por ejemplo, puede crear un nuevo parámetro, o modificar los valores de un control dentro de un diálogo o un formato de impresión. 

**¿Qué necesito saber para empezar?** 

- Códice FX permite escribir un subprograma en lenguaje Visual Basic Script o JavaScript, por lo que lo primero que necesita es tener conocimiento básico de estos lenguajes.  
- La  biblioteca  de  funciones  que  están  disponibles  en  un  subprograma  contiene  los  siguientes  objetos:  eBasic,  XPD,  XPREngine  y  eDigitalDoc.  Estos  objetos  permiten tener acceso a los componentes del reporte y a funciones de propósito general.  
- El tipo de lenguaje se configura en propiedades del proyecto donde puede seleccionar Visual Basic Script o JavaScript.  

####Explorando la interfaz del usuario (Ejemplo: Hola mundo) 

1. Crear un nuevo proyecto 
2. Seleccionar el control texto estático y dibujarlo sobre el formato de impresión.  
3. Escriba el texto “Hola Mundo” en la venta de propiedades del control.  
4. Presione Cerrar 
5. Ejecutar el proyecto (vista previa, puede hacerlo de la siguiente forma):   
6. Seleccione en el menú *Proyecto* y haga clic en *Ejecutar*. 
7. Presione la tecla *F5*. 
8. Seleccione en el menú *Archivo* y haga clic en *Vista preliminar*.   
9. Guardar el documento generado (XPR)   
10. Haga clic sobre el botón Guardar  la barra de herramientas del visor. 
11. Escriba el nombre del archivo y seleccione guardar. 

El archivo se guarda con extensión XPR. 

**Nota:** el documento generado (archivo con extensión xpr)  puede ser abierto con el visor de reportes de Códice y también con el diseñador de Códice. 


###Conexión, obtención y presentación de datos 

####Administrando conexiones a Bases de Datos  

Códice FX permite crear conexiones con múltiples bases de datos como son: MS Access, MS SQL Server,  MySQL,  Paradox,  Firebird,  dBase  etc.  El  diseñador  de  conexiones  le  permite  agregar conexiones al proyecto de diferentes formas:   

- Con el administrador de conexiones en el cual se crea un grupo de aplicaciones donde se pueden crear una o más conexiones que pueden ser utilizadas en cualquier proyecto que desee sin necesidad que crear de nuevo la conexión.  
- Con  el  eAdaptador  para  MaxiComercio  y  Déminus  el  cual  se  utiliza  para  crean  una conexión con la base de datos de estos productos (sólo versión 2006 y anteriores). Si tiene instalados cualquiera de estos productos sólo debe seleccionar esta opción  y se creará una conexión con su base de datos.  

El adaptador para Academium funciona de la misma manera que la opción anterior solo que se crea una conexión con la base de datos de este Academium de las versiones 2005 y 2006.  

Para conectarse a cualquier base de datos diseñando una cadena de conexión  seleccione Cadena de conexión OLE DB.  

####Uso del administrador de Conexiones de Grupo Execom 

Esta es la mejor forma de identificar la información de conexión que será usada en la elaboración de reportes.  

- Indicar una conexión al reporte usando el administrador de conexiones  
1. Inserte una nueva conexión al proyecto (Menú *Proyecto*->*Insertar*->*Conexión a base de datos*)  seleccione  la  aplicación  en  la  lista  desplegable  de  la  cual  se  usara  la  conexión predeterminada    

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.001.png"/>

Nota: el nombre de una aplicación sirve para clasificar un grupo de conexiones.  

2. Seleccione  o  cree  una  nueva  conexión  al  proyecto  presionando  el  botón  *Configurar*, aparecerá la siguiente pantalla 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.003.png"/>

Para crear una conexión a una base de datos, debe dar clic en el botón *Nueva conexión,* aparecerá la siguiente pantalla, proporcione los valores que solicita la ventana de propiedades de conexión.   

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.002.png"/>

- **Propiedades del registro de conexión**  
- Nombre de la conexión: Es el identificar de la conexión.  
- Aplicación: Es el nombre del grupo en el que se clasificará.  
- Nombre de usuario y contraseña: Son las credenciales de acceso al servidor de la base de datos.  
- Conexión  predeterminada  para  esta  aplicación:  Permite  indicar  la  conexión  a utilizar por defecto cuando se solicite acceso a una aplicación.  
- Acerca de las conexiones registradas  

Cada  conexión  se  identifica  con  un  nombre  que  no  debería  contener  espacios  en blanco ni caracteres especiales.  

Códice FX y en general cualquier aplicación puede establecer conexión a  un origen de datos por nombre de aplicación esto significa que se usaría la configuración de la conexión marcada como predeterminada si no existiera ninguna predeterminada se tomara la configuración de la primera que se encuentre. Cada aplicación puede tener una conexión predeterminada.  

Cada conexión registrada puede estar clasificada por el nombre de la aplicación que la utiliza. Grupo Execom define los siguientes nombres de administración para mantener compatibilidad con versiones anteriores de otros productos, las cuales son:  

- **Nombres reservados de aplicaciones**  
- *oldDeminus* para acceder a las bases de datos (Access 97) de las aplicaciones Déminus 2006 y MaxiComercio 2006 [(www.deminus.com.mx ](http://www.deminus.com.mx/)y www.maxicomercio.com.mx)   
- *oldAcademium*  para  acceder  a  las  bases  de  datos  (Access  97)  de  la  aplicación Academium versiones anteriores a 2006 [(www.academium.com.mx ](http://www.academium.com.mx/))  

####Diseñando un origen de registros (Uso del diseñador de consultas) 

Un origen de registros permite obtener un conjunto de registros de una base de datos mediante una  consulta  SQL.  Puede  crear  un  origen  de  registros  de  varias  formas:  desde  una  tabla,  un procedimiento  almacenado  o  creando  una  consulta  SQL  manualmente.  Una  conexión  puede contener uno o más orígenes de registros y estos asu vez tambien pueden tener origenes de registros dependientes. 

**Propiedades de un origen de registros:** 

1. Escriba el nombre del origen de registros (no puede existir dos orígenes de registros con el mismo nombre). 
1. Especifique un tipo de origen de donde obtendrá los datos. 
1. Diseñe la consulta SQL que le servirá para filtrar los datos. 
1. Especifique los filtros y cadenas de ordenación en caso de que sean necesarias 

En caso de lo requiera podrá poner orígenes de registro dependientes, así como parámetros  para los mismos que podrá configurar en las pestañas correspondientes. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.004.jpeg"/>

####El diseñador de consultas SQL

El diseñador de consultas SQL permite mediante un entorno visual construir consultas SQL que permitan obtener los conjuntos de registros necesarios. Esta es una herramienta de dos vías, lo cual significa que puede “dibujar” la consulta y obtener código SQL o a la inversa, escribir SQL y ver su representación gráfica. La ventana del diseñador está formada por varias partes que permiten realizar todas las tareas necesarias. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.005.png"/>

1. *Esquema de la base de datos*. Muestra en forma jerárquica las tablas y vistas disponibles en la conexión actual. Al desplegar un elemento se muestran los campos (columnas) que lo forman, indicándose claves primarias y claves foráneas.  
2. *Información  del  elemento  seleccio*nado.  Presenta  información  detallada  acerca  del elemento seleccionado en el Esquela de la base de datos. Su propósito es meramente informativo.  
3. *Botones de acción*. Permiten realizar las siguientes acciones: 
    - Agregar  tabla  al  diagrama.  Muestra  una  lista  seleccionable  de  tablas  y  vistas disponibles para que sean incluidas en el Área de diseño. 
    - Ver árbol de sintaxis. Despliega una vista jerárquica (árbol) de los elementos que forman la instrucción SQL correspondiente al diseño actual, esta vista es muy útil para analizar la lógica de expresiones de filtro (WHERE) por ejemplo. 
    - Ejecutar  consulta  (Vista  previa  de  los  datos).  Ejecuta  la  consulta  que  se  está diseñando y muestra el conjunto de resultados.  
4. *Área de diseño*. Está formada por dos pestañas: 
    - Vista de diseño. Permite diseñar el diagrama de la consulta, es decir marcar los campos a mostrar, trazar uniones entre tablas, etc. 
    - Consulta  SQL.  Contiene  el  código  SQL  correspondiente  a  la  vista  de  diseño, cualquier cambio en el diagrama se reflejará en el código y viceversa.  
5. *Propiedades de columnas*. Esta cuadrícula permite establecer los “alias”, agrupaciones y condiciones de filtro a las columnas seleccionadas para formar parte de la consulta SQL. 

###Manejo de parámetros 

####Parámetros en los reportes de Códice FX

Códice FX permite definir parámetros para los reportes, un parámetro es la identificación por nombre de un valor variable que regularmente proviene del exterior y que se utiliza internamente en una condición de filtro en consultas SQL o para cualquier otra cosa que sea necesario. 

Generalmente deberá especificar parámetros para:  

- Establecer los criterios de filtro (Where/Having) de una consulta SQL, por ejemplo indicar un rango de fechas, un valor de límite, etc.  
- Realizar  cálculos  o  procesos  que  dependan  de  un  valor  variable  usando  código VBS/Javascript en el interior del reporte. 

**Tipos de los parámetros** 

Los valores que contiene un parámetro usualmente son textos, números o fechas/horas, debido a que  pueden  ser  pasados  directamente  al  motor  de  la  base  de  datos  se  permite  especificar exactamente el tipo OLE DB al que pertenecen. 

De manera predeterminada Códice FX asigna el tipo VarChar para parámetros de texto, Double para parámetros numéricos y ofrece la opción de tratar como VarChar o como Date, DateTime o DBDate a las fechas/horas.  

Consulte  la  documentación  de  ADO  (OLE  DB)  para  conocer  mejor  los  tipos  existentes  y  la documentación del motor de la base de datos para conocer los tipos soportados.  

Si no va a utilizar los parámetros para ser enviados al motor de la base de datos y solo serán empleados como macros en las consultas SQL o dentro del código de sub-programa del reporte, realmente no es significativo el tipo OLE DB ya que son procesados como cualquier variable del entorno de programación sin tipos (VBS/Javascript). 

####Sintaxis embebida en SQL

Los parámetros se asemejan a las variables en que pueden contener valores que cambian, pero se diferencian por el hecho de que sirven de interfaz con el exterior del reporte (pueden ser establecidos por la aplicación que invoca al reporte, por ejemplo) y tienen un tipo definido de OLE DB. 

***Ejemplo*:**  Suponiendo  que  se  requiere  un  informe que  muestre  las ventas  que  sobrepasen  un determinado monto en un período de tiempo, sería necesario indicarle al reporte que existen 3 valores cambiantes que deben ser tomados en cuenta para la obtención del conjunto de registros a imprimir. Esto 3 valores cambiantes (parámetros) serían: Monto, Fecha Inicial y Fecha final. 

Establecer el valor para estos 3 parámetros puede hacerse de dos maneras:  

- Creando un diálogo en el reporte que permita al usuario capturarlos (interno). 
- Dejando  que  la  aplicación  que  invoca  al  reporte  los  establezca  mediante  código  de programa (externo). 

Para el primer caso debería agregar un Diálogo al reporte, colocar un control eNumberField para el Monto y dos controles eDateField para las fechas.  

En  el  segundo  caso,  en  algún  lugar  de  la  aplicación  que  invoca  al  reporte  debería  haber  3  sentencias similares a: *objeto*.GetParameter(”nombre\_parametro”).Value=*Valor*  

Utilizar los valores de los parámetros para establecer el filtro de la consulta SQL podría realizarse a través de una macro o el paso del parámetro como tal al motor de la base de datos, en el caso de usarse como macro habría una cláusula *Where* similar a esta: Where Monto>@Monto. 

####Manejo de parámetros de fecha  

Actualmente no existe un formato de fecha/hora que sea compatible con todos los motores de bases de datos con plena seguridad, esto se debe a que cada DBMS implementa el manejo e interpretación de valores de tiempo como mejor lo considera.  

Aunque existen estándares internacionales, no hay ninguna garantía de que el motor que esté usando se alinea a ellos.  

Para clarificar esta situación vamos a ilustrar con ejemplos.  

En Access se puede indicar una fecha hora con el formato yyyy-mm-dd hh:mm:ss, este mismo formato funciona sin problemas en MySQL 5.x, aunque curiosamente en MS SQLServer no, ya que MS SQL Server interpreta esta cadena dependiendo de la configuración de idioma del servidor.  

Esto trae el problema de que el valor 10 de Enero de 2007 14:00:00 en Access y MySQL 5.x será almacenado adecuadamente, pero en MS SQL Server si el idioma del servidor es Ingles Estados Unidos se interpretará como Octubre 10 de 2007 14:00:00.  

Para agravar la situación, el utilizar un tipo OLE DB de fecha/hora como DBDate, Date o DateTime no resuelve el problema.  

La mejor solución es en algunos casos, configurar en Códice FX el parámetro que va a contener valores de fecha/hora indicando que se traten como cadenas y especificando un formato que sea válido para el motor que se esté usando. Como se puede observar en la siguiente imagen: 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.006.png"/>

Utilice la siguiente tabla como guía para configurar sus parámetros de fecha/hora. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.006.1.png"/>

###Cuadros de diálogo y parámetros

####¿Qué son los cuadros de diálogo? 

Los diálogos ofrecen una interfaz de usuario con el principal propósito de solicitar información que se asigna a los parámetros del reporte, esta información servirá para restringir o filtrar los datos de la consulta SQL, pueden ser de diferentes tipos, como rango de fechas, rango de horas, un valor numérico o cadena.  

Puede agregar un diálogo de dos formas:  

- Desde el menú *Proyecto* seleccionando la opción *Insertar objeto*  y haciendo clic en  la opción *Dialogo***.****   
- Desde el explorador de proyecto dando clic en *Insertar* y seleccionando *Diálogo*  

Ejemplo de un cuadro de diálogo: 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.007.png"/>

Para cambiar el nombre de un diálogo o el título de la ventana podrá hacerlo en la barra superior del diseñador de diálogo. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.008.png"/>

**Propiedades principales de un cuadro de diálogo** 

En ventana de propiedades de diálogo se muestran las propiedades generales que se pueden configurar para cada uno de los diálogos que incluya en el reporte. 

- **Nombre:** Es un identificador del diálogo.  
- **Color de fondo:** Seleccione un color de fondo del diálogo.  
- **Titulo:** Escriba el título de la venta de diálogo, este se muestra en la barra superior del diálogo. 
- **Métodos a ejecutar:** Estas propiedades se utilizan para indicar el nombre de un método en el subprograma que se ejecutará cuando ocurra un evento durante la ejecución del diálogo  

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.009.png"/>)

###Controles comunes 

La ventana de diálogos cuenta con una caja de controles que permite seleccionar un control y dibujarlo sobre la ventana de dialogo. Estos controles hacen posible personalizar el diálogo agregando campos de texto estático, campos de texto, campos numéricos, campos memo, campo fecha, campo hora, campos selección, casillas de verificación, selector de registros, botón comando e imagen. 

Cada control cuenta con varias propiedades, las cuales se pueden modificar para adaptarlas a sus preferencias como son color de texto, tamaño, formato, etc. Haga clic en el menú Formato y luego en propiedades de elemento para mostrar la ventana de propiedades o puede hacer clic sobre el botón <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.010.png"/> de la barra de herramientas. 

A continuación se describen los controles que puede dibujar en un diálogo. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.011.png"/>

- **Texto estático.**  

Permite escribir un texto en la ventana de dialogo que no podrá ser modificado cuando se ejecuta el proyecto,  

Si desea agregar un texto estático sobre la ventana de dialogo selecciónelo haciendo clic sobre el icono en la barra de controles de dialogo  <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.012.png"/> y dibuje sobre la ventana de dialogo el tamaño que desea ocupar para el cuadro del texto. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.013.png"/>

Para modificar el texto que desea mostrar en el control haga clic en titulo sobre la ventana de dialogo. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.014.png"/>

- **Campo de texto** 

El campo de texto permite ser asociado a un parámetro para que al momento de ejecutar el proyecto el usuario pueda escribir un texto y así realizar un filtrado sobre un conjunto de registros.  

Puede agregar un campo de texto a la ventana de diálogo seleccionando <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.015.png"/> luego dibuje sobre la ventana de diálogo el control campo de texto haciendo clic y arrastrando el puntero hasta la posición deseada. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.016.png"/>

Cuando se crea un campo de texto abre la ventana de propiedades donde se definen las propiedades del campo como son nombre, título, el parámetro asociado, el formato de salida del parámetro 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.017.png"/>

- **Campo numérico** 

El control de campo numérico permite agregar números al proyecto al momento de estar en ejecución que son asociados a un parámetro para realizar filtros. El campo numérico tiene dos campos internos uno para texto que servirá para escribir el mensaje que visualizara el usuario y el segundo donde recibirá el parámetro ingresado. 

Puede agregar un campo numero a la ventana de dialogo seleccionando <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.018.png"/>  en la barra de controles de dialogo, dibuje sobre la ventana de dialogo el tamaño que desea para el campo numérico. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.019.png"/>

Cuando se crea un campo numérico abre la ventana de propiedades donde se definen los datos y características principales  del campo como: nombre, titulo, el parámetro asociado, el formato de salida etc., así como las propiedades de diseño del título. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.020.png"/>

- **Campo memo** 

El campo memo es un campo de texto multi-linea que permite asociarlo a un parámetro, al ejecutar el proyecto este puede recibir un texto multi-linea, y hacer el filtrado de la consulta por medio del parámetro asociado.  

Puede agregar un campo memo a la ventana de dialogo seleccionando <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.022.png"/> en la barra de controles de dialogo, dibuje sobre la ventana de dialogo el tamaño que desea para el control.  <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.022.png"/>

Cuando se crea un campo memo abre la ventana de propiedades donde se definen los datos y características principales  como nombre, titulo y parámetro asociado, así como la apariencia del diseño del título. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.023.png"/>

- **Campo fecha** 

El campo fecha es un campo que permite seleccionar una fecha y asociarla a un parámetro especifico, para hacer una consulta con una restricción de fecha usando la introducida por el usuario ya sea de una fecha específica o de un rango de fechas.  

El control fecha contiene dos propiedades que son **fecha inicial** y **fecha final**, las cuales siendo iguales el control permitirá que se seleccione cualquier fecha. Cuando la fecha inicial y la fecha final son diferentes el control solo permitirá que se seleccione una fecha dentro del rango marcado por ambas fechas. 

El control cuenta con botones de dirección <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.024.png"/> para navegar entre los meses del año ya sea hacia delante o hacia atrás hasta encontrar la fecha desea y seleccionarla. 

Puede agregar un campo fecha a la ventana de dialogo seleccionando  en la barra de <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.025.png"/> controles de dialogo, dibuje sobre la ventana de dialogo el control arrastrando el puntero y manteniéndolo presionado hasta dibujarlo del tamaño deseado. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.026.png"/>  <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.027.png"/>

Cuando se crea un campo fecha abre la ventana de propiedades donde se define nombre del dialogo, titulo, parámetro asociado, formato, así como la apariencia del título. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.028.png"/>

- **Campo hora** 

El campo hora es un campo que permite seleccionar una hora y asociarla a un parámetro especifico, para hacer una consulta con una restricción por hora usando la introducida por el usuario ya sea una hora especifica o de un rango de horas.  

El control cuenta con botones de flechas <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.029.png"/> para buscar la hora ya sea hacia arriba o hacia abajo hasta encontrar la hora desea y seleccionarla. 

Puede agregar un campo hora a la ventana de dialogo seleccionando <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.030.png"/> en la barra de controles de dialogo, dibuje sobre la ventana de dialogo el tamaño que desea ocupar para el campo hora. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.031.png"/>

Cuando se crea un campo hora abre la ventana de propiedades donde se define nombre del dialogo, titulo, parámetro asociado y el formato de salida, asi como la apariencia del título. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.032.png"/>

- **Campo selección** 

El campo selección permite agregar una lista de opciones para seleccionar entre las opciones de la lista y realizar una acción deseada asociada a un parámetro. Tiene dos campos internos uno permite agregar texto que será el titulo del campo. 

Puede agregar un campo selección a la ventana de dialogo seleccionando <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.033.png"/> y haciendo clic sobre él en la barra de controles de dialogo, dibuje sobre la ventana de dialogo el tamaño que desea ocupar para el campo selección. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.034.png"/>  <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.035.png"/>

Cuando se crea un campo selección abre la ventana de propiedades de selección que tiene tres pestañas de configuración en la pestaña general es donde se define nombre del dialogo, titulo, 

parámetro asociado que al hacer clic en el botón <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.036.png"/>  desplegara la lista de parámetros agregados al proyecto. En la segunda pestaña de configuración Apariencia definimos el diseño del texto. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.037.png"/>

En la tercer pestaña lista de opción es donde definimos la lista de opción que podrán ser elegidas al momento de estar en ejecución el proyecto a cada una de estos opciones  se le asocia un valor. El control permite agregar nuevas opciones a la lista, eliminar y modificar el orden. 

Este control es útil para mostrar al usuario una lista de opciones, al seleccionar una el valor de la opción seleccionada se asigna a un parámetro asociado. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.038.png"/>

- **Casilla de verificación** 

El campo casilla de verificación permite permite activar o desactivar una opción vinculada a un parámetro por ejemplo para activar o desactivar la impresión de uno o todo un conjunto de registros.  Puede  agregar  un  campo  casilla  de  verificación  a  la  ventana  de  dialogo 

seleccionando  <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.039.png"/>   en  la  barra  de  controles  de  dialogo,  dibuje  sobre  la ventana de dialogo el tamaño que desea ocupar para la casilla de verificación. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.040.png"/>

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.041.png"/>

- **Selector de registros** 

El control selector de registro es útil para mostrar el contenido de un origen de registros y darle la posibilidad al usuario de elegir un  registro de la base datos para asignarlo como parámetro. Permite realizar búsquedas a través de un campo principal y también mostrar el contenido completo del conjunto de datos que devuelve un origen de registros. 

Puede  agregar  un  campo  selector  de  registro  a  la  ventana  de  dialogo  seleccionando ![](Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.042.png) en la barra de controles de dialogo, dibuje sobre la ventana de dialogo el tamaño que desea para el control selector de registro. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.043.png"/>

Cuando cree un campo selector de registros se abrirá la ventana de propiedades del campo donde puede indicar el nombre del control, el titulo que desea que aparezca en pantalla al momento de la ejecución. En fuentes de registro vinculadas podrá seleccionar el origen de registro que estará asociado a este campo y de donde tomara los registros para listarlos, este campo estará asociado a un parámetro. 

El *campo de búsqueda principal* es aquel por el cual se realizara la búsqueda en el conjunto de registros, el *campo se búsqueda secundario* es el resultado de la búsqueda listada para mayor comprensión  del  usuario.  El  *valor  de  retorno*  representa  el  valor  que  el  control  asignara  al parámetro.   ![](Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.044.png)

- **Botón de comando** 

El botón de comando solo es posible agregarle funcionalidad desde código en el subprograma. Para agregar un botón de comando a la ventana de dialogo seleccione ![](Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.045.png) en la barra de controles de dialogo, dibuje sobre la ventana de dialogo el tamaño que desea ocupar para el botón de comando. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.046.png"/>

Para cambiar el diseño del título o estilo de texto haga clic en muestra de fuente en la barra de estilo  en  la  parte  inferior  derecha  de  la  pantalla,  para  modificar  el  estilo  del  texto.  Para cambiar el nombre del control y el titulo cámbielos en la barra sobre el dialogo. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.047.png"/>

- **Imagen** 

El control de imagen permite agregar imágenes en la ventana de diálogo. Las imágenes puedes ser del tipo jpg, bmp, gif, wmf y  emf.  

Para  agregar  una  imagen  a  la  ventana  de  dialogo  seleccione  <img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.048.png"/>  en  la  barra  de controles de dialogo, dibuje sobre la ventana de dialogo el tamaño que desea.

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.049.png"/>

En  la  ventana  de  propiedades  escriba  el  nombre  del  control  para  identificar  la  imagen. También puede elegir entre las opciones: 

- **Ajustar imagen a control:** Redimensiona la imagen adaptándola al tamaño del control dibujado en el diálogo. 
- **Ajustar control a imagen:** Redimensiona el control adaptándolo al tamaño de la imagen. 
- **Pestaña Recurso Interno:** Un recurso interno es un archivo agregado al proyecto desde una ubicación en el equipo. En esta pestaña se muestra una lista de la imágenes que ya ha agregado al proyecto, seleccione una para insertarla al control o presione el botón *Importar  imagen*** para** buscar una imagen en el equipo.  

Una vez agregada la imagen al reporte, Códice hace una copia que se guardará dentro del archivo XPD (definición del reporte), por lo que cualquier cambio al archivo original no se reflejará en el resultado del informe, esto es particularmente útil pues a la hora de distribuir el proyecto (archivo XPD) no necesita preocuparse de llevar los archivos de imágenes. 

###Orígenes de registros para los cuadros de diálogo 

Para que un cuadro de diálogo cumpla su función de filtrar, agrupar, o resumir la información que mostrará el reporte, debe tener un origen de registros con una consulta SQL.  

###El diseñador de formatos de impresión 

Un formato de impresión es utilizado para realizar el diseño del reporte. El principal elemento que se dibuja sobre un formato de impresión es la cuadrícula de detalle en la cual se integran los campos de una base de datos. 

En el formato de impresión se definen el tamaño de papel para la impresión, puede seleccionarse un tamaño personalizado o un tamaño estándar como el tamaño carta u oficio, también se define el  tamaño  de  los   márgenes,  la  unidad  de  medida  (centímetros,  milímetros  o  pulgadas),  la orientación de la hoja y si lo desea un formato de contraportada que se ejecutará después del formato principal. 

Si desea crear etiquetas puede dividir la hoja en el número de filas y columnas que se requieran.  

####Filas y Columnas

Las filas son las que están de manera horizontal y las columnas son las que están de manera vertical.  Un  *registro*  (también  llamado  *fila*  o  *tupla*)  representa  un  ítem  único  de  datos implícitamente estructurados en una tabla. Cada fila de una tabla representa un conjunto de datos relacionados, y todas las filas de la misma tabla tienen la misma estructura. 

Una *columna* es un conjunto de valores de datos de un simple tipo particular, uno por cada fila de la tabla. Las columnas proporcionan la estructura según la cual se componen las filas. 

####Portada y Contraportada 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.050.jpeg"/>

La *Portada* es el área de trabajo que aparece predeterminada al crear un nuevo reporte en Códice FX y es lo que se imprimirá al ejecutar el reporte. De forma predeterminada viene configurada en tamaño carta.   

- **Tamaño de papel:** Elija el tamaño que desea para la hoja. Para cambiar el tamaño manualmente elija Personalizado, los cuadros de alto y ancho se activarán y ahora puede modificar sus valores para adecuarlos a su preferencia.    
- **Medida:** Elija el tipo de unidad de medida para representar la hoja, estos pueden ser  centímetros, milímetros o pulgadas.  
- **Ancho y Alto:** Modifique estos valores para personalizar el tamaño de la hoja. Elija primero tamaño de hoja Personalizado para poder hacer cambios. 
- **Orientación:** Indique la orientación de la hoja (horizontal o vertical), de forma predeterminada al imprimirse el diseño del formato se ajustará la configuración de la impresora.  
- **Márgenes:** El margen dibuja  una guía en el formato de  impresión para delimitar la hoja.  
- **Etiquetas:** Para imprimir etiquetas modifique el valor de filas y columnas en el cuadro “Etiquetas” de acuerdo al número de etiquetas que desea crear. También puede modificar el tamaño de la etiqueta cambiando los valores de alto y ancho.  

Si configura el formato de impresión para imprimir etiquetas el tamaño de la hoja que se mostrará para el diseño será el tamaño de una solo etiqueta. Cuando ejecute el reporte se verán todas las etiquetas en una sola hoja. 

La *Contraportada* le permite agregar en la creación del reporte un formato que se imprimirá a continuación del formato que lo contiene. Por ejemplo si desea imprimir credenciales, la cara de la credencial será un formato de impresión con los datos de la persona y éste tendrá  asignado un formato  de  contraportada  con  otros  detalles  como  por  ejemplo  un  código  de  barras.  Así  al ejecutar el reporte se imprimirá una hoja con el frente de la credencial y la siguiente hoja será el formato de contraportada. 

###Algoritmo general de ejecución 

El motor en tiempo de ejecución de Códice FX  tiene diferentes métodos de realizar las tareas comunes  de  procesamiento  de  consultas  SQL.  En  los  siguientes   apartados  se  muestra  las diferentes formas de hacer un proceso específico con Orígenes de registro como por ejemplo la utilización de parámetros, esto permite al usuario elegir el método que más le convenga. 

####Paso de parámetros y uso de macros 

Los parámetros son usados para realizar un filtro en la consulta realizada a la base de datos, un parámetro puede obtener su valor cuando el usuario se lo asigna (puede ser por medio de un diálogo) o asignarte un valor predeterminado. Así, se hace la consulta de acuerdo al valor de dicho parámetro. 

Es posible utilizar los parámetros de dos maneras diferentes. La primera es agregando el símbolo de interrogación en la consulta SQL y la segunda es agregando el nombre de un parámetro precedido del signo @. 

**Ejemplo:** 
~~~
SELECT \* FROM Clientes WHERE TipoCliente=? 
~~~
La consulta SQL anterior recibe un parámetro, por lo tanto es necesario mandar un valor para realizar la consulta correctamente. La manera de funcionar en esta forma es la siguiente: El motor en tiempo de ejecución manda la consulta y el parámetro a la base de datos para obtener el conjunto de registros. De esta forma el motor de la base de datos hace el trabajo de entender la consulta y sustituir el valor del parámetro. 

` `El **uso de macros** se muestra a continuación: 

` `SELECT \* FROM Clientes WHERE TipoCliente=@Parametro1 

Cuando se utilizan macros en las consultas el proceso que realiza el motor en tiempo de ejecución es diferente: Primero se obtiene el valor de parámetro, luego se sustituye pone ese valor en la consulta SLQ, es decir se modifica la consulta y en lugar del nombre del parámetro se coloca su valor. Por último, se envía al motor de la base de datos la consulta completa. 


###Agrupaciones y Gráficos

####Funcionamiento de las agrupaciones

Una de las operaciones más útiles sobre una base de datos es realizar filtros para obtener los datos deseados sin campos extras que no se desean ver. Las cláusulas WHERE y HAVING realizan estas operaciones en una consulta SQL, pero a demás de estas Códice FX incluye un diseñador de filtros para hacer más fácil esta tarea. 

- **Diferencias entre Filtros y Cláusulas WHERE/HAVING** 

Las cláusulas Where y Having son instrucciones SQL las cuales se agregan en una consulta para realizar  un  filtro  en  un  conjunto  de  registros  de  la  base  de  datos.  Los  datos  obtenidos mediante un origen de registros que tenga incluido es su consulta estas cláusulas  serán solo los que se hayan indicado. Por ejemplo, se tiene una consulta como la siguiente:  

SELECT \* FROM Clientes WHERE Tipo=1001  

Esta consulta regresa un conjunto de registros donde los datos serán solo aquellos clientes que tengan un tipo de cliente igual a 1001, si un cliente pertenece a otro tipo entonces no se mostrarán los datos de ese cliente.  

- **Filtros**  

Las expresiones de filtro del diseñador de orígenes de registros permiten realizar filtros en una consulta de manera  fácil. A diferencia de Where o Having, los **Filtros** realizan su tarea des pues de obtener el conjunto de datos. Por ejemplo si tenemos un origen de registros que obtiene los datos de una tabla y se desea hace un filtro, se agregaría una expresión de filtro como sigue: 

- **Origen de datos:** 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.051.png"/>

- **Expresión de filtrado:** 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.052.png"/>

Las expresiones de filtrados se puede hacer por medio del editor de filtros. 

- **Expresiones de ordenación VS Order By** 

Los  métodos  de  ordenación  se  utilizan  para  obtener  un  conjunto  registros  de  manera ordenada de acuerdo a las especificaciones que se indiquen en un origen de registro. Códice FX tiene dos maneras de realizar las ordenaciones, por medio de “Order By” o escribiendo expresiones de ordenación.  

- **Order By**  

Esta instrucción se utiliza directamente en las consultas SQL lo que permite obtener un conjunto de registros ya ordenados desde la base de datos, es decir, cuando el origen de registros realice la consulta los datos obtenidos estarán en el orden como se indicó.   

Se  puede  incluir  la  expresión  Order  By  de  dos  maneras.  La  primera  es  utilizando  el diseñador de consultas y la segunda es añadiéndola directamente sobre la consulta SQL.  

- **Expresiones de ordenación** 

A diferencia del método Order By las Expresiones de Ordenación se añaden como una propiedad de un origen de registros, por lo tanto cuando el origen de registros obtenga los datos de la base de datos estos estarán tal como fueron capturados, es decir no estarán ordenados, el método de ordenación se aplica cuando el origen de registros ya tiene el conjunto de datos.  

Tomando en cuenta lo anterior la manera más eficaz de realizar una ordenación de los datos es  a  través  de  Order  By  ya  que  obtiene  los  datos  ya  ordenados  de  la  base  de  datos,  a diferencia  de  las  expresiones  de  ordenación  que  después  de  obtener  los  datos  aplica  el método de ordenación. 

####El control de gráficos

El  control  gráfica  le  permite  dibujar  una  gráfica  y  asignarle  un  origen  de  registros  de  donde obtendrá los datos. Solo debe configurar las propiedades como son el tipo de gráfica las leyendas, etc. y el resultado se verá al ejecutar el reporte. 

` `**Pestaña general**  **Gráfica:**  

- **Tipo de gráfica:** Permite elegir el tipo de gráfica que desea crear ya sea de Barras, Líneas, Pastel etc. 
- **Borde:** Permite elegir el tipo de borde de la gráfica ya sea línea simple, doble etc.  

` `**Fondo:**  

- **Fondo:** Permite definir el color del fondo de la gráfica. 
- **Color de borde:** Permite definir el color de borde de la gráfica  

**Serie de datos en filas:** Al activar la casilla **muestra los datos en filas**  

**Mostrar leyendas:** Al activar la casilla muestra el texto agregado como leyendas en la gráfica.

**Mostrar marcadores:** Al activar la casilla muestra marcadores en la gráfica generada.  

**Sombra:** Al activar la casilla muestra una sombra en la gráfica 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.053.png"/>

**Pestaña datos** 

**Conexiones:** 

- **Conexión:** Muestra la conexión hacia la base de datos.   
- **Origen de registro:** Indica el origen de registro que se graficará.   

**Mostrar escalas:** Permite activar o desactivar la impresión de escalas en los ejes de la grafica 

**Escala:** Permite definir la escala, si se realizara de manera automática o con limites definidos por el usuario. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.054.png"/>

**Pestaña título:** Permite definir los títulos de la grafica, los ejes etc. Asi como diseñar el formato de texto. 

<img src="img/Aspose.Words.a509e4e1-7515-4c2e-80c1-cbb120b18496.055.png"/>

