Category: Crystal Report

Jan 08 2007

Crystal Report: Los campos memo

Otra cosica que me ha pasado. Por X razones tenía que meter un campo memo de una tabla en un informe de crystal, con la peculiaridad de que tenía que ir precedido por un texto fijo, y finalizado con la ciudad y la fecha, usea otro texto “medio” fijo.

Tenía dos posibilidades, o bien meter esas dos líneas desde vb direstamente en el campo (cosa que no me mola una mierda) o bien currarmelo en el Crystal. La opción 2 sin duda, además, pense, me curro una fórmula, donde hago algo tal que asi: texto + campo memo + texto. To feliz lo intento y… “los campos memo no pueden utilizarse en fórmulas”, mecagüensupu…

Lasai, hay solución, así que le doy la vuelta, si no puedo meter el campo memo en una fórmula, quizás me deje meterlo en un texto… y voila! funciona (v 8.0.1.0 del Crystal), quedando perfectamente diseñado.

¿Que qué es eso de meterlo en un texto? Tu pon una label en tu informe, luego añade un campo de la tabla en el informe para arrastralo poniendolo encima del label de texto, así, el crystal te los une, convirtiéndolos en una sola entidad.

Dec 18 2006

Crystal Reports: Tablas cruzadas.

La historia es que tenía que hacer un listado de clientes, con el acumulado de facturación por meses, y presentarlo en un crystal, de forma que se viese en una sola línea la facturación del cliente, mes a mes y durante un período de tiempo de x años, así como el subtotal del año y de los meses. Lo que he hecho ha sido crearme una tabla temporal con los campos cliente, año, mes, literalmes y total que vienen de una inner de varias tablas de la BBDD.

Hasta aquí sin problemas (estoy contra Acces97, así que olvidaus de procedimientos almacenados o de fliparla con PL/SQL, además, es más fácil así ;).

Tablas cruzadas en Crystal Reports
La tabla de marras.

La dificultad venía en la forma en que teníamos que presentar los datos, usease, una línea por cliente y año donde apareciesen todos los datos del año, para lo cual, en el crystal hemos hecho tablas cruzadas, donde le indicas que campos de la tabla que me he creado son líneas, cuales columnas y cual el dato o campo resumido, quedando la mar de chulo.

Tablas cruzadas en Crystal Reports
Formulario que presenta el crystal para dar formato a tablas cruzadas.
Tablas cruzadas en Crystal Reports
Resultado del formato anterior en diseño.

[!] Si haceis click encima de los campos con el botón derecho, podemos jugar con ellos, jeje.

La putada era que me ordenaba los campos alfabéticamente y no por el orden natural de los meses, pero visto el problema la solución era fácil. Como podeis ver, le hemos dicho que para las columnas hemos puesto el número de mes, pero luego, seleccionando ese campo y dándole al botoncico de opciones de grupo, se abre un formulario, a través del cual, le hemos puesto una fórmula para que, en vez de mostrar ese campo, muestre el campo del literal del mes y… han cantado línea, señores!

Tablas cruzadas en Crystal Reports
Detalle del informe con los datos cruzados.

Si cuando Mónica dice que crystal está bien es por algo… herejes, que sois unos herejes!

Oct 06 2006

.NET: Llamar a un report de Crystal

Dentro de las temáticas a explicar en el cursillo, también están, como no, los informes. Para ello quieren utilizar CrystalReport, el que viene ya embebido en el Visual Studio.

Una vez que nos hallamos creado un informe con crystal (en este caso lo cree con ODBC como forma de conexión y con el nombre de MiReport.rpt, que a su vez, al crearlo desde el visual studio, genera una clase llamada igual que el report MiReport.vb), la forma de poner dicho report en nuestro formulario es la siguiente:

Dim MiCristal As New MiReport
Dim Log As New CrystalDecisions.Shared.TableLogOnInfo
Log.ConnectionInfo.ServerName = "Servidoir/ODBC"
Log.ConnectionInfo.UserID = "Usuario"
Log.ConnectionInfo.Password = "Password"
Log.ConnectionInfo.DatabaseName = "BBDD"
MiCristal.Database.Tables(0).ApplyLogOnInfo(Log)
If txtCodigo.Text.Trim <> "" Then
MiCristal.RecordSelectionFormula = "{tusuarios.codigo}='" & txtCodigo.Text.Trim & "'"
End If
Me.crvUsuarios.ReportSource = MiCristal

¿Que es lo que hemos hecho?

Primero instanciamos el report (a traves del vb que comentamos antes) que hemos creado:
Dim MiCristal As New MiReport

Luego le damos los parámetros de conexión:
Dim Log As New CrystalDecisions.Shared.TableLogOnInfo
Log.ConnectionInfo.ServerName = "NombreServidor"
Log.ConnectionInfo.UserID = "Usuario"
Log.ConnectionInfo.Password = "Password"
Log.ConnectionInfo.DatabaseName = "BBDD"

[!] En nuestro ejemplo, en vez del nombre del servidor pondremos el nombre del ODBC que nos hemos creado, pues hemos construido el report con dicho ODBC como conexión a la BBDD.

Le aplicamos a nuestro report dichos parámetros de conexión:
MiCristal.Database.Tables(0).ApplyLogOnInfo(Log)

Ahora, si queremos, le pasamos filtros al report, de cara a limitar los registros a sacar:
If txtCodigo.Text.Trim <> "" Then
MiCristal.RecordSelectionFormula = "{tusuarios.codigo}='" & txtCodigo.Text.Trim & "'"
End If

De esta forma, si no meto nada en la txt del código me sacaría a todos los usuarios dados de alta en la tabla.

Y ya por último solo tenemos que decirle al visualizador de crystal que hemos puesto en nuestro formulario qué crystal debe cargar en su interior:
Me.crvUsuarios.ReportSource = MiCristal

Y de esta forma tendríamos el informe requerido dentro de nuestro formulario.