• No se han encontrado resultados

Crystal Reports NET (win y web) Crystal Reports. Sumario Este documento describe como se emplea el control Crystal Reports en Visual Basic NET

N/A
N/A
Protected

Academic year: 2021

Share "Crystal Reports NET (win y web) Crystal Reports. Sumario Este documento describe como se emplea el control Crystal Reports en Visual Basic NET"

Copied!
7
0
0

Texto completo

(1)

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 ([email protected])

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

(2)

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

(3)

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

(4)

' 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)

(5)

' 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

(6)

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)

(7)

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

Referencias

Documento similar

¿Cómo se traduce la incorporación de ésta en la idea de museo?; ¿Es útil un museo si no puede concebirse como un proyecto cultural colectivo?; ¿Cómo puede ayudar el procomún

Período de realización (indicar meses ou períodos posibles de realización e xornada laboral: tempo completo ou parcial).. Do 01 de abril ao 30 de setembro en horario de

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

4.- Másteres del ámbito de la Biología Molecular y Biotecnología (9% de los títulos. Destaca el de Biotecnología Molecular de la UB con un 4% y se incluyen otros

Pero cuando vio a Mar sacar el fuego de bajo su ala, voló de vuelta a su tribu a contarles lo que había visto.... Justo antes de que el sol saliera, Tatkanna se despertó y comenzó

o esperar la resolución expresa" (artículo 94 de la Ley de procedimiento administrativo). Luego si opta por esperar la resolución expresa, todo queda supeditado a que se

- Un curso formativo para los técnicos de laboratorio de la UPV sobre la prevención de los residuos en los laboratorios, que se llevará a cabo los días 23, 24, 25, 26 y 27

Esta formación se produce mediante el doctorado (13 alumnos, lo que significa el 32% de los encuestados), diferentes másteres entre los que destacan de nuevo el de Profesorado