Uso de crystal reports en VB.NET
Bueno... tomando en cuenta todos los problemas que puede llegar a dar el manejo de reportes, es viable apuntar que tanto CrystalRepots Como .Net hacen una gran pareja para el trabajo ordenado y confiable.
Iniciemos
1- Elaboro un reporte fuera de .NET [osea desde el mismo CR] , el cual lleva absolutamente todo lo que necesito osea que si lo ejecuto desde CR este dara los resultados deseados, el reporte puede haber sido creado partiendo de un procedimiento almacenado[SP] o directamente de un grupo de tablas o vistas.
Ahora lo que necesitamos es que .Net deploye el reporte previamente elaborado.
Para el ejemplo elabore un reporte el cual fue hecho a partir de un SP [procedimiento almacenado], el cual solicita tres parametros, por ende dichos parametros tengo que enviarlos desde .Net para que sean a su vez capturados por CR y los pueda procesar.
parametros solicitados por el reporte
OK. OK.
Ahora en VB.Net crearemos un nuevo proyecto y en el formulario de inicio [Form1] agregaremos un control CrystalReportViewer1, en la propiedad Dock le colocamos Fill
Espacios de nombre utilizados:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
En el evento load del Fom1 colocaremos el siguiente codigo.
' ---------------------------By CesarL--------------
' SETEANDO CONEXION PARA CR
Dim oConexInfo As ConnectionInfo
Dim oListaTablas As Tables
Dim oTabla As Table
Dim oTablaConexInfo As TableLogOnInfo
' instanciar objeto para guardar datos de conexión
oConexInfo = New ConnectionInfo()
oConexInfo.ServerName = "NombreServidor"
oConexInfo.DatabaseName = "NombreBaseDatosODBC"
oConexInfo.UserID = "Usuario"
oConexInfo.Password = "Password"
Dim rpt_id As New ReportDocument
' Comprobamos la existencia del reporte, si el reporte no existe abortamos si no continuamos
Dim Reporte As String = Application.StartupPath & "Reporte.rpt"
If Not IO.File.Exists(Reporte) Then
MessageBox.Show("No se encontro reporte:" & vbCrLf & _
Reporte, "Report Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.Close()
Exit Sub
End If
'Una vez verificado el reporte procedemos a cargarlo
rpt_id.Load(Reporte)
oListaTablas = rpt_id.Database.Tables
For Each oTabla In oListaTablas
oTablaConexInfo = oTabla.LogOnInfo
oTablaConexInfo.ConnectionInfo = oConexInfo
oTabla.ApplyLogOnInfo(oTablaConexInfo)
'ENVIANDO VARIABLE A CR
rpt_id.SetParameterValue("@FechaInicio", "VariableFechaInicial")
rpt_id.SetParameterValue("@FechaFin", "VariableFechaFinal")
rpt_id.SetParameterValue("@Company", "VariableCompany")
Me.CrystalReportViewer1.ReportSource = rpt_id
Con esto el form1 cuando cargue hara lo siguiente
1- Seteara las variables de conexion
2- Comprobara la existencia del reporte
3- Si el reporte existe este creara una instancia de tipo CR y enviara los parametros de conexion y los parametros del reporte
4- Finalmente cargara el reporte.
Si quieres los fuentes, dudas o comentrios: cesarlopez1909@gmail.com
Reciba mis saludos cordiales, ha pasado ya 4 años después de esta publicación, pero resulta que estoy empezando con BV2012 y este no trae Cyrstal Reports integrado como si lo hací el vb2008, pero se puede agregar una cyrstal reports para esta versión, y se pueden realizar los reportes.
ResponderEliminarmi consulta es: a un sin tener esta opción en el VB2012 se puede realizar esta conexión?.
Gracias por tu respuesta
que significa rpt_id ??
ResponderEliminarBuenas Estimados, un gusto compartir con ustedes la solución para Uso de crystal reports en VB.NET 2012
ResponderEliminarImports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Private Sub imprimir()
RUTA = "..\..\Rpts\" & "rptutilidad" & ".rpt"
Dim rpt_id As New ReportDocument
Dim Reporte As String = RUTA 'Application.StartupPath & "Reporte.rpt"
If Not IO.File.Exists(Reporte) Then
MessageBox.Show("No se encontro reporte:" & vbCrLf & _
Reporte, "Report Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
rpt_id.Load(Reporte)
Dim dsVEN As New DataSet
Dim sql As String
sql = "SELECT *from lis_utilidad where idhac = '" & NUMHAC & "' "
Dim rsVEN As New MySqlDataAdapter(sql, Conexion)
dsVEN.Tables.Add("ventas")
rsVEN.Fill(dsVEN.Tables("ventas"))
rpt_id.SetDataSource(dsVEN.Tables("ventas"))
Me.crvfactura.ReportSource = rpt_id
End Sub