sábado, 8 de diciembre de 2007

VS2005 y Crystal Reports XI Release 2 con SP3

Próximamente....

Visual Basic 6.0 y Crystal Reports 8.0


En este articulo pretendo entregar los detalles para incorporar en aplicaciones desarrolladas con Visual Basic 6.0 SP6 reportes de calidad empleando Crystal Reports.

En primer lugar a nuestro proyecto visual basic, hay que agregarle el componente denominado Crystal Report control, el cual se carga al momento de instalar Crystal. Pues bien una vez agregado nuestro componente, lo seleccionamos desde nuestro barra lateral de herramientas y lo ubicamos en nuestro formulario.

Una vez realizado lo anterior nos vamos de lleno a nuestro código. Tenemos entonces nuestro botón Imprimir. Dentro de este botón tenemos el siguiente código.

-----------------------------------------------------------------
CrystalReport1.Reset
CrystalReport1.WindowState = crptMaximized

ruta = App.Path & "\Reportes\" & "Informe.rpt"
CrystalReport1.ReportFileName = ruta
CrystalReport1.Action = 1
-----------------------------------------------------------------
Lo que nos permiten las instrucciones del nivel superior, son resetear nuestro control antes de comenzar, y darle una posición a nuestro reporte al momento de ser invocado.

Posteriormente tenemos una variable, aconsejo que esta sea declarada en algún módulo para que la reconozcan todos los formularios, Denominada Ruta. Esta variable contiene la ruta donde esta ubicado nuestro report, asignándoselo inmediatamente a nuestro objeto. Finalmente nuestra llamada final al reporte para ejecutarlo.

En algunas ocasiones es necesario pasarle parámetros a nuestro reporte, como por ejemplo nombres de usuarios, algún estado, etc. Para realizar lo anterior se emplean los denominados parámetros. El funcionamiento de estos parámetros, es en primer lugar, crearlos en nuestro respectivo reporte y en orden, asignándole un tipo de datos. Posteriormente, en nuestra aplicación, asignarle los valores que deseamos.

-----------------------------------------------------------
CrystalReport1.Reset
CrystalReport1.WindowState = crptMaximized

ruta = App.Path & "\Reportes\" & "Informe.rpt"
CrystalReport1.ReportFileName = ruta
CrystalReport1.ParameterFields(0) = "codigo;" & Combobox1.Text & ";True"
CrystalReport1.ParameterFields(1) = "usuario;' " & Textbox2.Text & " ';True"

CrystalReport1.Action = 1
-----------------------------------------------------------

Es muy común en nuestro reporte, que tengamos que realizar alguna selección algo más especifica, como por ejemplo. Traer la información de una personal en particular, dependiendo del código entregado por un usuario. Para realizar lo anterior ocupamos lo que en Crystal se denomina Formulas. Estas formular son de selección y se ubican en nuestra aplicación, ya antes de que se despliegue nuestro reporte donde queremos hacer la selección. Un ejemplo de esto es el código siguiente:

-----------------------------------------------------------
CrystalReport1.Reset
CrystalReport1.WindowState = crptMaximized

ruta = App.Path & "\Reportes\" & "Informe.rpt"
CrystalReport1.ReportFileName = ruta
CrystalReport1.ParameterFields(0) = "codigo;" & Combobox1.Text & ";True"
CrystalReport1.ParameterFields(1) = "usuario;' " & Textbox2.Text & " ';True"

CrystalReport1.SelectionFormula = "{Tabla.Codigo}= '" & TextBox1.Text & "'"

CrystalReport1.Action = 1
-----------------------------------------------------------

Podemos también entregarle a nuestro reporte formulas de selección un poco más complejas. Decirle tal vez que nos entregue los registro de una fecha en particular

-----------------------------------------------------------
CrystalReport1.SelectionFormula = "{Tabla.fecha}= #" & Format(dtp_fecha.CurrentDate, "yyyy/mm/dd") & "# "
'
-----------------------------------------------------------


En Crystal se da en ocasiones la necesidad de crear subinformes o subreportes. Los Subinformes por lo general se crean cuando necesito valores para poder procesar un informe principal, o tambien por ejemplo cuando en nuestro informe principal tenemos información que proviene de tablas que tal ves no podamos relacionar o referenciar, o sencillamente por casos de diseño del informe principal. Lo importante es saber manejar estos subinformes desde nuestro código. Veamos el siguiente ejemplo.

-----------------------------------------------------------
ruta = App.Path & "\Reportes\" & "Liquidaciones.rpt"
CrystalReport1.ReportFileName = ruta
CrystalReport1.SelectionFormula = ""
CrystalReport1.SelectionFormula = "{tb_estadistica.fecha} in Date (" & Year(lbl_fecha_inicio.Caption) & ", " & Month(lbl_fecha_inicio.Caption) & ", " & Day(lbl_fecha_inicio.Caption) & ") to Date (" & Year(lbl_fecha_termino.Caption) & ", " & Month(lbl_fecha_termino.Caption) & ", " & Day(lbl_fecha_termino.Caption) & ")"
CrystalReport1.SubreportToChange = "Abonos"
CrystalReport1.SelectionFormula = ""
CrystalReport1.SelectionFormula = "{tb_asignaciones.fechacargo} in Date (" & Year(lbl_fecha_inicio.Caption) & ", " & Month(lbl_fecha_inicio.Caption) & ", " & Day(lbl_fecha_inicio.Caption) & ") to Date (" & Year(lbl_fecha_termino.Caption) & ", " & Month(lbl_fecha_termino.Caption) & ", " & Day(lbl_fecha_termino.Caption) & ")"
CrystalReport1.SubreportToChange = ""
CrystalReport1.Action = 1

-----------------------------------------------------------------

Bueno en el ejemplo anterior, podrán apreciar, que primeramente al informe principal se le entrega una formula de selección, que en este caso corresponde a una selección de tipo "between" que para el caso de crystal es la anterior. Posteriormente a ello realizamos un cambio de Reporte y le asignamos el nombre de nuestro subreporte, que para este caso es "Abono" y finalmente le entregamos otra formula de selección. Entonces nos trae el subreporte con los datos que necesitamos mostrar en el informe principal.

En crystal se manejan también las formulas interiores de la aplicación, es decir aquellas que se crean dentro del reporte. Estas fórmulas tienen para mi, otra finalidad, y que es procesar información una vez que el reporte ya viene filtrado y en camino. Espero haber contribuido en algo con este articulo, próximamente colocaré un articulo sobre el manejo de VS2005 y Crystal Reports XI Release 2 SP3, el cual cambia bastante y aprovecharé de colocar algunos ejemplos y consideraciones a la hora de crear un proyecto de instalación y distribución.