Вы находитесь на странице: 1из 7

Crystal Reports – NET (win y web)

La Güeb de Joaquín
Programación Visual Basic .NET

Crystal Reports

Como se utiliza Crystal Reports en VB .NET


Sumario
Este documento describe como se emplea el control Crystal Reports en Visual Basic NET

Índice de contenidos
Como se utiliza Crystal Reports en VB .NET......................................................................... 1
En documentos Windows................................................................................................... 1
A) Utilizar un control CristalReportViewer .................................................................... 2
b) Impresión directa en la impresora............................................................................... 3
c) Generando un fichero con formato PDF ..................................................................... 3
En documentos ASP NET.................................................................................................. 5
A) Utilizar un control CristalReportViewer .................................................................... 5
b) Impresión directa en la impresora............................................................................... 6
c) Generando un fichero con formato PDF ..................................................................... 6

Fecha de última impresión: 23/02/2005 22:48:09


Autor.: joaquin Medina Serrano (joaquin@medina.name)
URL de este documento:
http://jms32.eresmas.net/tacticos/programacion/
VBNet/VBN03/alg_CrystalReports/ CrystalReportsyNET.pdf

En documentos Windows

En principio para utilizar Crystal Reports hay que importar los espacios de nombres

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

A continuación hay que generar el informe, cosa que no voy a explicar aquí como se hace,
porque si no sabes como se hace no debes leer este documento porque que no entenderás ni
nada de nada

Una vez generado el informe, para utilizarlo hay varias maneras, o bien se utiliza un control
CristalReportViewer, y se realiza una vista previa del informe, o bien se imprime
directamente el informe en la impresora.

1
Crystal Reports – NET (win y web)

A) Utilizar un control CristalReportViewer


Después de haberlo dejado en el formulario, y suponiendo que el control se llame
CristalReportViewer1, y que el informe se llame CrystalReportAutores el código que hay que
incluir es el siguiente.

La función siguiente es un poco especial, en el sentido de que los datos que se cargan en el
control no son los que selecciona el informe, sino que los pasamos en un DataSet y ese
conjunto de datos son los que se representan en el informe. Por ejemplo, supongamos que el
informe imprime todos los autores de libros de España, con esta función podemos utilizar el
mismo informe para imprimir únicamente los autores de Zaragoza, o los de Valencia, según
los datos que se pasen en el DataSet del parámetro.

Mostrar una vista previa con un control CrystalReportViewer


Public Sub Accion_ImprimirDatosVistaPrevia( _
ByRef ConjuntoDeDatos As DataSet)

CrystalReportViewer1.Visible = True
Dim miInforme As New CrystalReportAutores
miInforme.SetDataSource(ConjuntoDeDatos)
CrystalReportViewer1.ReportSource = miInforme
End Sub

El código siguiente es el que presenta la ayuda MSDN, realiza el mismo trabajo pero tiene el
inconveniente de que estamos accediendo a un recurso que esta en una dirección física del
disco, con lo que la portabilidad del código es menor

Mostrar una vista previa según la ayuda MSDN (mejor no emplear)


' Ayuda MSDN, entrada
' Opciones de enlace de informes de Windows Forms Viewers

' Imports CrystalDecisions.CrystalReports.Engine


Public WithEvents oRpt As ReportDocument

Public Sub Accion_imprimirDatos( _


ByRef ConjuntoDeDatos As DataSet)

CrystalReportViewer1.Visible = True
oRpt = New ReportDocument
oRpt.Load("../informes/CrystalReportAutores.rpt")

'Utilizar el modelo de objetos Report Engine


'para pasar conjuntos de datos llenos al informe
oRpt.SetDataSource(ConjuntoDeDatos)

' enlazar el objeto de informe con datos a


' Web Forms Viewer
CrystalReportViewer1.ReportSource = oRpt
End Sub

2
Crystal Reports – NET (win y web)

b) Impresión directa en la impresora

Imprimir directamente en la impresora predeterminada


Protected Overrides Sub Accion_ImprimirDirectoEnImpresora()
Dim oDataSet As New DataSet
oDataSet.Merge(Me.AuthorData)
Dim MiInforme As New CrystalReportAutores

' enganchar los datos a imprimir


MiInforme.SetDataSource(oDataSet)

' Imprimir el informe. Establecer los parámetros


‘ startPageN y endPageN en 0 para imprimir todas las páginas.
MiInforme.PrintToPrinter(1, False, 0, 0)
End Sub

c) Generando un fichero con formato PDF

Por ultimo tenemos otra opción que consiste en imprimir el informe en un documento PDF o
RTF, y guardarlo en disco. La forma de hacerlo se muestra en la siguiente función, como en
los ejemplos anteriores se pasa el conjunto de datos que se quieren imprimir

Imprimir en un fichero PDF


'/** ******************************************************
' Función : InformeCrystal_Forms_ImprimirDatosFormatoPDF
'----------------------------------------------------------
' Propósito .............:
' Genera un fichero FDF a partir de un informe Cristal
' Parámetros .............:
' Necesita recibir a través de los parámetros
' * El conjunto de datos a imprimir (DataSet)
' * El informe que utiliza para imprimir(Crystal Report)
' * El nombre del fichero para el documento PDF
' Observación ............:
' Solo funciona con Formularios Windows
' Necesita una referencia al espacio de nombres
' * CrystalDecisions.Shared
' * CrystalDecisions.CrystalReports.Engine
'----------------------------------------------------------
'*/
Public Sub InformeCrystal_Forms_ImprimirDatosFormatoPDF( _
ByVal pConjuntoDeDatos As System.Data.DataSet, _
ByVal pInformeCrystal As _
CrystalDecisions.CrystalReports.Engine.ReportDocument, _
ByVal pNombreFichero As System.String)

Try
' informacion para el control "SaveFileDialog"

' enganchar los datos a imprimir


pInformeCrystal.SetDataSource(pConjuntoDeDatos)

3
Crystal Reports – NET (win y web)

' indicamos que el destino será un archivo del disco


Dim diskOpts As New CrystalDecisions.Shared. _
DiskFileDestinationOptions

' establecer el nombre del archivo de disco


diskOpts.DiskFileName = pNombreFichero

'establecer el formato de exportación


With pInformeCrystal.ExportOptions
'opciones de archivo de disco
.DestinationOptions = diskOpts

' documento PDF


.ExportFormatType = CrystalDecisions.Shared. _
ExportFormatType.PortableDocFormat
' documento rtf
'.ExportFormatType = ExportFormatType.RichText
' documento Doc
'.ExportFormatType = ExportFormatType.WordForWindows

' en disco
.ExportDestinationType = CrystalDecisions.Shared. _
ExportDestinationType.DiskFile
End With

' exportamos el informe


pInformeCrystal.Export()

' informar de que se ha hecho sin problemas


MessageBox.Show( _
"Terminada la grabación en disco del fichero" & _
ControlChars.CrLf & "[" & pNombreFichero & "]", _
"Proceso de Grabacion", _
MessageBoxButtons.OK, _
MessageBoxIcon.Information, _
MessageBoxDefaultButton.Button1, _
MessageBoxOptions.DefaultDesktopOnly)
' continua en el Finally

'-----------------------------------------------------------
' ayuda MSDN
' Entrada [ExportToDisk]
'El siguiente ejemplo exporta el informe a disco
'como documento RTF.
'[Visual Basic]
' Report.ExportToDisk(ExportFormatType.RichText, "report.rtf")
'-----------------------------------------------------------

Catch ex As Exception
' informar de la excepcion antes de enviarla hacia arriba
MessageBox.Show( _
"ERROR" & ControlChars.CrLf & _
"Durante el proceso de generación del documento PDF" & _
" ha aparecido el siguiente error:" & _
ControlChars.CrLf & ex.Message, _
"Proceso de Grabacion", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1, _
MessageBoxOptions.DefaultDesktopOnly)

4
Crystal Reports – NET (win y web)

' lanzar el error hacia arriba


Throw

Finally
' cargarme las variables empleadas
' cerrar el informe
If Not pInformeCrystal Is Nothing Then
pInformeCrystal.Close()
pInformeCrystal = Nothing
End If

If Not pConjuntoDeDatos Is Nothing Then


pConjuntoDeDatos = Nothing
End If

If Not pNombreFichero Is Nothing Then


pNombreFichero = Nothing
End If
End Try

End Sub

En documentos ASP NET

También se pueden emplear el control CrystalReport en documentos ASP Net pero el código
tiene algunas diferencias sutiles.

A) Utilizar un control CristalReportViewer

Mostrar una vista previa con un control CrystalReportViewer


Public Sub Accion_ImprimirDatosVistaPrevia( _
ByRef ConjuntoDeDatos As DataSet)

CrystalReportViewer1.Visible = True
Dim miInforme As New CrystalReportAutoresWeb
miInforme.SetDataSource(ConjuntoDeDatos)
CrystalReportViewer1.ReportSource = miInforme
End Sub

5
Crystal Reports – NET (win y web)

b) Impresión directa en la impresora

### FALTA ###


Esta mal hay un error
Public Sub Accion_ImprimirImpresora( _
ByRef ConjuntoDeDatos As DataSet)

'--------------------------
' no consigo hacerla funionar
' me da el problema de que no reconoce la impresora por defecto
Exit Sub
'--------------------------

Dim miInforme As New CrystalReportAutoresWeb


' enganchar los datos a imprimir
miInforme.SetDataSource(ConjuntoDeDatos)

' Seleccionar la impresora.


miInforme.PrintOptions.PrinterName = String.Empty

' Imprimir el informe. Establecer los parámetros


' startPageN y endPageN en 0 para imprimir todas las páginas.
miInforme.PrintToPrinter(1, False, 0, 0)

End Sub

c) Generando un fichero con formato PDF

En realidad no es un fichero, sino una descarga directa al navegador de un documento PDF


Es una de las partes más difíciles
Aún no estoy convencido de que este código este libre de errores,

Funcion preparatoria
Public Sub Accion_imprimirDatos_FormatoPDF()
' instancia de un nuevo informe
Dim MiInforme As New CrystalReportAutoresWeb
' enganchar los datos a imprimir
MiInforme.SetDataSource(oDataSet)
' llamar a la funcion que hace el trabajo
ExportToPDF(MiInforme)
End Sub

6
Crystal Reports – NET (win y web)

Exportar en formato PDF


Private Sub ExportToPDF(ByVal oRpt As ReportDocument)
'------------------------------------------------------------------
' origen de este código (18/02/2005)
' http://www.devx.com/tips/Tip/18010
' Export Crystal Reports to PDF
' Use this code when you're developing Web pages and you need to
' export Crystal Reports to PDF without creating their own files.
' The undocument FormatEngine property of ReportDocument class
' (you can see it using ObjectBrowser or ILDASM) gets the job done:
'-------------------------------------------------------------------

Dim crExportOptions As ExportOptions

crExportOptions = oRpt.ExportOptions

With crExportOptions
.FormatOptions = New PdfRtfWordFormatOptions
.ExportFormatType = ExportFormatType.PortableDocFormat
End With

Dim req As ExportRequestContext = New ExportRequestContext


req.ExportInfo = crExportOptions

Dim st As System.IO.Stream
st = oRpt.FormatEngine.ExportToStream(req)

Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"

Dim ln As Integer = 0
ln = CInt(st.Length)

Dim b(ln) As Byte


st.Read(b, 0, ln)
Response.BinaryWrite(b)

Response.End()
End Sub

Referencias Bibliográficas
• Liberia MSDN de Microsoft
• http://www.devx.com/tips/Tip/18010, documento.: Export Crystal Reports to PDF

Вам также может понравиться