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@[Link])
URL de este documento:
[Link]
VBNet/VBN03/alg_CrystalReports/ [Link]
En documentos Windows
En principio para utilizar Crystal Reports hay que importar los espacios de nombres
Imports [Link]
Imports [Link]
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)
[Link] = True
Dim miInforme As New CrystalReportAutores
[Link](ConjuntoDeDatos)
[Link] = 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 [Link]
Public WithEvents oRpt As ReportDocument
Public Sub Accion_imprimirDatos( _
ByRef ConjuntoDeDatos As DataSet)
[Link] = True
oRpt = New ReportDocument
[Link]("../informes/[Link]")
'Utilizar el modelo de objetos Report Engine
'para pasar conjuntos de datos llenos al informe
[Link](ConjuntoDeDatos)
' enlazar el objeto de informe con datos a
' Web Forms Viewer
[Link] = 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
[Link]([Link])
Dim MiInforme As New CrystalReportAutores
' enganchar los datos a imprimir
[Link](oDataSet)
' Imprimir el informe. Establecer los parámetros
‘ startPageN y endPageN en 0 para imprimir todas las páginas.
[Link](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
' * [Link]
' * [Link]
'----------------------------------------------------------
'*/
Public Sub InformeCrystal_Forms_ImprimirDatosFormatoPDF( _
ByVal pConjuntoDeDatos As [Link], _
ByVal pInformeCrystal As _
[Link], _
ByVal pNombreFichero As [Link])
Try
' informacion para el control "SaveFileDialog"
' enganchar los datos a imprimir
[Link](pConjuntoDeDatos)
3
Crystal Reports – NET (win y web)
' indicamos que el destino será un archivo del disco
Dim diskOpts As New [Link]. _
DiskFileDestinationOptions
' establecer el nombre del archivo de disco
[Link] = pNombreFichero
'establecer el formato de exportación
With [Link]
'opciones de archivo de disco
.DestinationOptions = diskOpts
' documento PDF
.ExportFormatType = [Link]. _
[Link]
' documento rtf
'.ExportFormatType = [Link]
' documento Doc
'.ExportFormatType = [Link]
' en disco
.ExportDestinationType = [Link]. _
[Link]
End With
' exportamos el informe
[Link]()
' informar de que se ha hecho sin problemas
[Link]( _
"Terminada la grabación en disco del fichero" & _
[Link] & "[" & pNombreFichero & "]", _
"Proceso de Grabacion", _
[Link], _
[Link], _
MessageBoxDefaultButton.Button1, _
[Link])
' continua en el Finally
'-----------------------------------------------------------
' ayuda MSDN
' Entrada [ExportToDisk]
'El siguiente ejemplo exporta el informe a disco
'como documento RTF.
'[Visual Basic]
' [Link]([Link], "[Link]")
'-----------------------------------------------------------
Catch ex As Exception
' informar de la excepcion antes de enviarla hacia arriba
[Link]( _
"ERROR" & [Link] & _
"Durante el proceso de generación del documento PDF" & _
" ha aparecido el siguiente error:" & _
[Link] & [Link], _
"Proceso de Grabacion", _
[Link], _
[Link], _
MessageBoxDefaultButton.Button1, _
[Link])
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
[Link]()
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)
[Link] = True
Dim miInforme As New CrystalReportAutoresWeb
[Link](ConjuntoDeDatos)
[Link] = 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
[Link](ConjuntoDeDatos)
' Seleccionar la impresora.
[Link] = [Link]
' Imprimir el informe. Establecer los parámetros
' startPageN y endPageN en 0 para imprimir todas las páginas.
[Link](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
[Link](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)
' [Link]
' 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 = [Link]
With crExportOptions
.FormatOptions = New PdfRtfWordFormatOptions
.ExportFormatType = [Link]
End With
Dim req As ExportRequestContext = New ExportRequestContext
[Link] = crExportOptions
Dim st As [Link]
st = [Link](req)
[Link]()
[Link]()
[Link] = "application/pdf"
Dim ln As Integer = 0
ln = CInt([Link])
Dim b(ln) As Byte
[Link](b, 0, ln)
[Link](b)
[Link]()
End Sub
Referencias Bibliográficas
• Liberia MSDN de Microsoft
• [Link] documento.: Export Crystal Reports to PDF