Hola a todos, a ver si alquien me puede ayudar, soy nuevo utilizando Crystal Report 8.0, tengo algunos informes/reportes q me trabajan de maravilla desde codigo. Los reportes los tengo en una carpeta "X" y los llamo desde VB con puro codigo, trabajo con ADO y paso las sentencias SQL a un Form q contiene el control CRViewer para visualizar todos los reportes que tengo. A continuacion pongo el codigo para conocimientos y aprendizaje para otros usuarios.
(Por cierto mi base de datos esta en formato de Access).
Mi problema radica en que he realizado algunos informes que contienen detalles, por ejemplo: una factura contiene "detalles o items", en un informe llamado "FacturaDetalle.rpt" se ven el registro como fecha,hora, cliente y mas abajo aparecen los items de dicha factura como por ejemplo: codigo prod, descripcion precio etc etc, mostrandose para cada registro.
En la parte del diseño con el Crystal Report me resulta y obtengo lo que quiero, pero se me esta haciendo muy dificil llamar a dicho archivo de reporte desde VB, cuando quito los detalles/items del reporte se carga el reporte y se visualiza el reporte, de lo contrario no.
Necesito una muestra de codigo VB que realice lo que necesito, me urge mucho.
Por favor, si alguien posee un ejemplo de ello enviarmelo a la sgte direccion
cpriveram@hotmail.com o postearlo aqui mismo para aprendizaje de otros.
He trabajado con codigo sencillo para ver resultados y nada de nada
Ayuda por favor.
-------------------------------------------------
Public cnx As New ADODB.Connection
En el load del Form va lo sgte:
cnx.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\MiBasedeDatos.mdb" & ";Persist Security Info=False;Jet OLEDB:Database Password=Mi_password"
-------------------------------------------------
Se utilizan las sgtes Referencias en el proyecto:
Para Crystal en Proyecto (en mi caso tengo Crystal 8.0) en referencias:
Crystal Report engine 8 Object Library (En mi caso es 8 por mi version)
Crystal Report Viewer Control
Crystal Report 8.5 ActiveX Desingner Run time library
Crystal Report 8.5 ActiveX Designer Desingn and Run time library
En un Form coloco el CRViewer
-------------------------------------------------
Cuando se manda a llamar a "Imprimir" por ej. un boton pon:
frmReportViewer.Show 1 'suponiendo que asi se llama el Form donde esta el control.
En el modulo (esto viene en la pagina de Crystal en los ejemplos):
Global crxApplication As New CRAXDRT.Application
' Declare report object
Global crxReport As CRAXDRT.Report
' Declare database objects
Global crxDatabase As CRAXDRT.Database
Global crxDatabaseTables As CRAXDRT.DatabaseTables
Global crxDatabaseTable As CRAXDRT.DatabaseTable
' Declare the section objects
Global crxSections As CRAXDRT.Sections
Global crxSection As CRAXDRT.Section
' Declare the subreport objects
Global crxSubreport As CRAXDRT.Report
Global crxSubreportObject As SubreportObject
' Declare a Font Object.
Global crxFont As IFontDisp
' Declare our Field Object.
Global crxFieldObject As CRAXDRT.FieldObject
Global crxTextObject As CRAXDRT.TextObject
Public rst As New ADODB.Recordset
En el Form con en control:
en el Load:
sentencia = "tu sentencia SQL"
Set rst = cn.Execute(sentencia)
Screen.MousePointer = vbHourglass
Set crxReport = crxApplication.OpenReport(App.Path "\Mi_reporte.Rpt")
crxReport.DiscardSavedData
Set crxDatabase = crxReport.Database
Set crxDatabaseTables = crxDatabase.Tables
crxReport.Database.SetDataSource rs
CRViewer1.ReportSource = crxReport
CRViewer1.EnableExportButton = True
CRViewer1.DisplayGroupTree = False
CRViewer1.ViewReport
frmReportViewer.WindowState = vbMaximized
CRViewer1.Zoom 100
Screen.MousePointer = vbDefault
en el Resize de la forma:
With CRViewer1
.Top = 0
.Left = 0
.Width = Me.ScaleWidth
.Height = Me.ScaleHeight
End With
En el Unload del Form:
Set crxReport = Nothing
Set crxApplication = Nothing
Set crxDatabase = Nothing
Set crxDatabaseTable = Nothing
Set crxDatabaseTables = Nothing
Set crxSubreport = Nothing
Set crxSubreportObject = Nothing
Set CrSubreport = Nothing
Set CrSubreport1 = Nothing
Set CrSubreport2 = Nothing
rst.close:Set rst= Nothing
cnx.close:Set cnx= Nothing
Gracias al que me quiera ayudar.