jueves, 28 de febrero de 2013

DBReport para Realbasic (II)

Para entender cómo funciona el DBReport tenemos que entender el concepto de bandas, en las cuales se basa este componente.

Una banda es un recuadro donde colocamos objetos, la banda más importante es "Detalle" la cual es la única que no puede borrar. Esta se imprime por cáda fila o registro del RecordSet, es decir, si tenemos 10 filas o registros vamos a tener 10 bandas "Detalle".

La banda "cabecera de página" se imprime de primero en la parte superior de la página por cada página que se genere en el reporte.

La banda "Pie de página" se imprime en la parte inferior de la página por cada página que se genere en el reporte.

La banda "Introducción" se imprime después de la banda "Cabecera de página" en la primera página del reporte.

La banda "Resumen" se imprime justo después de la última banda impresa en la página final del reporte.

Las bandas Grupo son bandas que se imprimen antes de la banda "Detalle" como "Encabezado de grupo" y después como "Pie de grupo". Se imprimen al cambiar el grupo o al inicio del reporte en el caso de "Encabezado de grupo" o al final del reporte en caso de "Pie de grupo". Se pueden tener tantas bandas de grupo como se necesiten.

Los objetos que se pueden colocar en las bandas son:
  • Etiquetas: son texto como "Títulos del reporte", o la Fecha del sistema como "#date" o número de página como "#pag" o parámetros o Fórmulas.
  • Campos: nombre del campo como "nombre" o "id".
  • Líneas: horizontales, verticales u oblicuas.
  • Recuadros o Recuadros redondeados.
  • Imágenes: Pueden ser imágen de un archivo o de un campo del RecordSet.
En este video se muestra algunos aspectos de lo anterior:

Unable to display content. Adobe Flash is required.

Los parámetros son cadenas (en el momento de escribir este blog, sólo se soporta parámetros tipo "String") que se necesitan en el reporte pero no se encuentran en el RecordSet como por ejemplo el nombre de la empresa o el usuario que imprime el reporte. Estos se asignan antes de imprimir o antes de mostrar el "Designer" con la instrucción (ej):

rpt.Parameter("Empresa")= "Nombre de la Empresa"

En este video se muestra parámetros y otras cosas:

Unable to display content. Adobe Flash is required.

Este video vemos grupos:

Unable to display content. Adobe Flash is required.

La información se proporciona "como-está". Todas las marcas, logos, etc pertenecen a sus respectivos dueños.

DBReport para RealBasic (I)

DBReport es un componente hecho en RealBasic para generar, editar e imprimir reportes en tiempo de ejecución; a diferencia del componente Report que viene con el RealStudio, el cual tiene funciones básicas para reporting sobre bases de datos, no tiene un editor en tiempo de ejecución, se pueden cambiar reportes en tiempo de diseño; esto adicionado a falta de grupos, fórmulas, parámetros y otras características me llevó a escribir este componente.

Estas son algunas de características más importantes:

* Edición de reportes en tiempo de ejecución.
* Prevista del Reporte.
* Vista de datos del RecordSet.
* Ancho, alto y márgenes de página configurables y/o importado desde impresora.
* Bandas cabecera y pié página, Introducción y resumen reporte.
* Bandas de grupos, n grupos.
* Etiquetas, campos, líneas, rectángulos, imágenes.
* Función suma, contador, subtotal.
* Fórmulas.
* Parámetros.


Para instalar el componente, agregamos todos los archivos, incluyendo imágenes, a nuestro proyecto cómo se muestra en el siguente video:

Unable to display content. Adobe Flash is required.

El componente se puede utilizar en su forma más básica:

  Dim f as FolderItem= SpecialFolder.Documents.Child("DBReport.xml")
  Dim rpt As New DBReport
 
  If f.Exists Then rpt.LoadXML(f)

  rpt.RecordSet= rs
  rpt.Designer
  rpt.SaveXML(f)

Se presume que exista un RecordSet llamado "rs" (consulte la documentación de RealBasic) y que el componente DBReport esté en nuestro proyecto.

La primera línea declara un objeto f de nombre "DBReport.xml" (puede ser cualquier nombre de archivo válido) que se encuentra en la carpeta "Mis documentos" (en el caso de windows).

La segunda línea declara un objeto llamado "rpt" de tipo DBReport.

En la siguente línea carga el reporte desde el archivo sólo si existe, esto es conveniente la primera vez que ejecutamos el reporte, pues el archivo no existe en ese momento.

El siguiente comando asigna el objeto RecorSet (antes declarado e inicializado) al objeto reporte.

El siguiente comando muestra una ventana con el diseñador DBReport. en esta ventana es que cambiamos nuestro reporte.

Y el último comando graba lo que acabamos de cambiar en el objeto "f" que es nuestro archivo.

Aquí podemos ver el anterior código:

Unable to display content. Adobe Flash is required.

En próximos artículos veremos los cómo diseñar reportes, por el momento quiero aclarar algunos conceptos:

* Los archivos que genera DBReport están en formato XML y pueden colocarle el nombre y la extensión que quieran.

* El Componente no graba automáticamente, es responsabilidad del programador, por ejemplo al utilizar el método "SaveXML" o al clic en "actualizar" (hay que escribir código para que grabe). Se puede utilizar este punto para escribir un código para por ejemplo "Guardar cómo...".

* Necesitan incluir los archivos generados por DBReport en su app para poder utilizarlos.


La información se proporciona "como-está". Todas las marcas, logos, etc pertenecen a sus respectivos dueños.

martes, 26 de febrero de 2013

DBUpdater para RealBasic

Hoy voy a hablar del componente DBUpdater.

Es un componente hecho en RealBasic y funciona con RealStudio 2011r4.3 en adelante y postgreSQL 9 en adelante.

Hasta el momento DBUpdater actualiza los siguientes objetos:

Secuencias
Tablas
Vistas
Procedimientos almacenados (funciones)
Desencadenantes (Triggers)
Tipos


El DBUpdater funciona así: Primero se crea un archivo .xml (o cualquier extensión) y después se actualiza la Base de Datos con el archivo .xml

Esta es la forma de crear el XML:

Unable to display content. Adobe Flash is required.

Esta es la forma de actualizar la db con la info del XML:

Unable to display content. Adobe Flash is required.

La información se proporciona "como-está". Todas las marcas, logos, etc pertenecen a sus respectivos dueños.
 

jueves, 21 de febrero de 2013

Inicio



Bienvenidos.

Inicio este blog para compartir ideas y conocimiento acerca de arquitectura de datos, arquitectura de software, lenguajes de programación, bases de datos y en general a tecnologías de la información.

Voy a empezar con un poco de historia: En estos momentos no soy programador tiempo completo, más bien soy consultor, si cabe el título a una persona que le hacen consultas técnicas acerca de proyectos de software, sin embargo hace más de 10 años no programo. Mi primer acercamiento fue allá en los 90 del siglo pasado con FoxPro para windows, hice una aplicación contable que en su momento era de las primeras en plataforma windows, después me involucré de lleno con la web en el auge de las punto com acá en Colombia, después de varios proyectos fallidos, hice páginas web a los amigos y me consultaban acerca de nuevos proyectos, mientras tanto un amigo: Rodrigo, siguió con programas de escritorio para pequeñas empresas; como creo le ha ocurrido a muchos en el área de programación para plataformas windows, cada cierto tiempo cambian las herramientas.

Después de FoxPro vino Visual FoxPro (descontinuaron ese producto) después Visual Basic 6 a lo cual sucedió .NET con sus versiones y en estos momentos viene Windows 8 con toda la extención para pantallas táctiles y móbiles.

Todas esas herramientas incompatibles entre sí a nivel de código; claro, se podía escribir librerías que se usaran en otra plataforma, pero si ud. quería crear aplicaciones en .NET, por ejemplo, tenía que aprender .NET, y aunque la curva de aprendizaje de nuevos lenguajes ha ido mejorando, no podemos olvidar que son productos complejos, tienen unas decenas de comandos pero miles de librerías e interfaces que toca dominar para hacer un producto decente.

Lo que nos lleva a RealBasic. Mi amigo escogió esa herramienta hace un tiempo para migrar sus aplicaciones. Yo independientemente y a nivel de estudio escogí C++ y librerías de código abierto como WxWindgets y Poco. Sin embargo como ayuda a mi amigo también estudio RealBasic a la sazón unos seis meses. No voy a hablar sobre fortalezas o debilidades de RealBasic, hay mucha información en la web, voy a hablar es de dos componentes que he hecho y que pueden comercializarse: DBUpdater y DBReport.

DBUpdater es para actualizar la estructura de la base de datos en Postgres. Los que hacen programas para escritorio saben que además de actualizar los archivos binarios de una aplicación, es necesario actualizar la estructura o esquema de las base de datos, por ejemplo adicionar tablas, campos, vistas, procedimientos almacenados, etc.

DBReport por otro lado, es un generador de Reportes para RealBasic. Hay muchos generadores de reportes en RealBasic, inclusive el RealStudio trae uno, el problema es que no se pueden cambiar en tiempo de ejecución, y si por ejemplo, la factura de venta, ud. puede tener una plantilla que cubre el %90 de las necesidades de sus clientes, ese %10 toca cambiarlo a nivel binario, es decir, cambiar el ejecutable. Lo cual es engorroso, difícil de mantener y en general, mala práctica. Así que si ud. necesita cambiar un reporte, indudablemente necesita un diseñador en tiempo de ejecución. Eso es lo que hace DBReport.

En próximos artículos voy a hablar más en detalle con ejemplos y tutoriales.

Adicionalmente quiero empezar una comunidad de programadores de RealBasic acá en Colombia y en general en español, un sitio donde pueda intercambiar información además de opciones de trabajo, por que al parecer hay muy pocos programadores en RealBasic, lo que puede convertirse en una oportunidad o una error, depende de donde se mire. Y sí, ya sé que hay sitios como realbasichispano.es y similares, pero hablo en Colombia y con proyección a empleo.

Hasta una próxima entrega. Chao, chao.