Skip to content

Informes con Crystal Reports a partir de consulta a Base de Datos

April 12, 2012
Una parte muy importante en al construcción de aplicaciones de gestión són los informes, ya que a menudo se hace necesario en las tareas diarias administrativas o de producción de cualquier empresa, la generación de documentación impresa.
En este caso vamos a mostrar un ejemplo senzillo de creación de un informe con Crystal Reports. Ahí va:
1. Creamos un nuevo documento de Crystal agregando un componente de Reporting / Crystal Reports
2. A continuación con el asistente, tenemos que crear la conexión con los datos. Aquí tenemos que escojer un tipo de conexión y configurar con los parámetros de acceso pertinentes
3. Siguiendo con el asistente vamos a seleccionar los campos de la tabla requeridos
4. Podemos configurar el formato y la disposición de los datos y campos, y camviar la vista, para comprobar como va quedando el aspecto
5. Agregamos un botón que llame a un procedimiento que ejecutará el Informe, un código de ejemplo podría ser el que sigue a continuación:

  Private Sub printPartides_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles printPartides.Click

        ‘ Fer la consulta “a mà” abans de cridar el REPORT, passant el diaACarregar com a paràmetre
        Dim rpt As New Informe()
        Dim crLogonInfo As New CrystalDecisions.Shared.TableLogOnInfo()

        rpt.Refresh()

        ‘ Esborrem les dades existents i carreguem a la taula temporal #DEV_InformePP les dades necessàries a imprimir
        Try
            Dim sSQL As String = “DELETE FROM TABLA “

            Dim idReader As SqlDataReader = New SqlCommand(cmdText:=sSQL, Connection:=g_cn).ExecuteReader()
            idReader.Close()

            Dim sSQL2 As String = “INSERT INTO
TABLA (dd, cc, aa, pt, pr, qtt) ” & _
                                  “SELECT dd, cc, aa, pt, pr, qtt ” & _
                                  “FROM TABLAORIGEN”                               


            Dim idReader2 As SqlDataReader = New SqlCommand(cmdText:=sSQL2, Connection:=g_cn).ExecuteReader()
            idReader2.Close()

        Catch
            MsgBox(Err.Number & ” ” & Err.Description, vbOKOnly, “ERROR”)
            Exit Sub
        End Try

        ‘ Entrem les dades de la conexió per no haber d’entrar Login al llistats
        crLogonInfo = rpt.Database.Tables(0).LogOnInfo
        With crLogonInfo
            .ConnectionInfo.ServerName = “xxx”
            .ConnectionInfo.UserID = “sxxxx”
            .ConnectionInfo.Password = “xxxx”
            .ConnectionInfo.DatabaseName = “xxxxxxx”
        End With

        rpt.Database.Tables(0).ApplyLogOnInfo(crLogonInfo)
        rpt.PrintToPrinter(1, False, 0, 10)


    End Sub

En el anterior código vemos la estrategia utilizada: ya que para filtrar datos con Crystal Reports es algo complejo si tenemos que pasarle un parámetro contenido en una variable, he optado por crear primero la classe informe, donde voy a diseñar la vista. Seguidamente creo un objeto de esa clase y a continuación le paso al objeto de reporte creado, la consulta con los datos ya filtrados para presentarlos al usuario de una tabla temporal que es alimentada a partir de los datos de la tabla origen.
También cabe resaltar tres aspectos a tener en cuenta para el correcto funcionamiento. El primero es que si hemos imbricado un documento de CR en un formulario, estos dos componentes deben estar situados en el mismo directorio. El segundo aspecto a tener en cuenta es como vemos en el ejemplo, que se hace necesario pasar los datos de conexión al nuevo objeto de informe creado, ya que si no lo hacemos así, le va a pedir los datos de conexión al usuario. Por último hay que tener en cuenta de instalar el “runtime” a las máquinas clientes donde irá la aplicación final. Desde aquí se puede conseguir la versión correcta del “runtime”.

From → Informes

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: