A ver si alguien puede ayudarme :P
Tengo un dataset que cargo con ciertos datos en tiempo de ejecución con una consulta SQL a "x" base de datos (ponganle no se, apretando un boton).
Hasta ahi todo bien... ahora, lo que yo quiero hacer es asignarle ese dataset a un reporte Crystal y elegir yo el formato del reporte... onda:
***********************************
NroCliente Nombre Apellido Total a pagar
***********************************
Les quería preguntar si podrían orientarme un poco, porque estuve toda la noche buscando y probando y no encuentro nada concreto como para hacer esto.
Una de las cosas que encontré me hablaban de agregar un objeto de tipo "Dataset" desde el cuadro de heramientas, luego asignarle un origen de datos con el asistente y listo.
Pero yo cargo el dataset en tiempo de ejecución a través de una consulta.
Todo esto es para, por ejemplo, imprimir cierta factura en donde ID_Cliente=1.
No se si se entiende, cualquier cosa avisen y desde ya muchas gracias!!!
PD: Probé el asistente de Crystal para la creación de un informe asignando filtros (como ID_Cliente=1) pero el tema es que yo la quiero hacer en tiempo de ejecución (la asignación del filtro).
hardrocker: Yo no usé nunca CrystalReport pero lo que estas tratando de hacer es basico para cualquier generador de informes, en la googleando un poco encontré algunas cosas que capaz te sirven.
Citar
Lo primero que se debe hacer es genera el informe, supongo que eso ya lo tienes.
Despues para usarlo puedes utilizar el control CristalReportViewer o imprimirlo directamente:
Suponiendo que tus datos los tienes en el dataSet "ds1", para generar una vista previa:
CrystalReportViewer1.Visible=True
Dim vistaInforme as New ArchivoCrystalRepor 'es decir, el archivo .rpt
vistaInforme.SetDataSource(ds1)
CrystalReportViewer1.ReportSource=vistaInforme
y ahora si deseas imprimirlo:
Dim informeImpreso As New ArchivoCrystalReport 'es decir el archivo .rpt
informeImpreso.SetDataSource(ds1)
informeImpreso.PrintToPrinter(1,False,0,0)
Este es el link (http://forums.microsoft.com/MSDN-ES/ShowPost.aspx?PostID=1555209&SiteID=11) al post de donde saqué esta info, alli hay mas info y links interesantes, cualquier cosa avisame que trato de instalar Visual Studio para poder hacer pruebas.
EDIT: Acá (http://www.elguille.info/colabora/NET2005/TheKin_proReportes.htm) hay un tutorial paso a paso de Crystal Report, quizas te sirve.
Saludos
Gracias rosti.
Claro, lo que le dicen al pibe ahi es que agregue el dataset al proyecto desde la barra de herramientas, pero yo tengo el dataset definido en tiempo de ejecución... y si quiero asignarle ese Dataset al crylstal como fuente de datos me salta un error que dice "El reporte no contiene tablas".
O sea, lo que yo hago es realizar una consulta SQL y cargarle al Dataset (definido en tiempo de ejecución como "Dim ds as new Dataset", por ejemplo) el resultado de esa consulta.
Después cuando llegue a casa sigo probando, gracias Rosti.
ok hardrocker, yo te entiendo perfecto lo que queres hacer, pensé que con el SetDataSource se solucionaba.
Cualquier cosa lo que puedo hacer es conectarme por VNC a tu maquina y capaz que viendo las cosas ahi mismo entre los 2 podemos encontrarle la solución, te mando por MP mi MSN.
Saludos.
pregunta
la consulta cambia o entendí mal?
en cuanto a lo del parámetro, desde visual podés pasarle parámetros a crystal
éste código que te paso hace todo con crystal en el form_load. setea los parámetros y abre el reporte.
espero que sirva
Private Sub Form_Load()
Dim crParamDefs As CRAXDRT.ParameterFieldDefinitions
Dim crParamDef As CRAXDRT.ParameterFieldDefinition
On Error GoTo ErrHandler
'Abrir el reporte
Screen.MousePointer = vbHourglass
mflgContinuar = True
Set crReport = crApp.OpenReport(App.Path & nomListado, 1)
' Parametros del reporte
Set crParamDefs = crReport.ParameterFields
For Each crParamDef In crParamDefs
Select Case crParamDef.ParameterFieldName
Case "idCurso"
crParamDef.AddCurrentValue (idCurso)
Case "año"
crParamDef.AddCurrentValue (anioLectivo)
Case "nomCurso"
crParamDef.AddCurrentValue (nomCurso)
Case "idMateria"
crParamDef.AddCurrentValue (idMateria)
Case "FechaDesde"
crParamDef.AddCurrentValue (fechaDesde)
Case "FechaHasta"
crParamDef.AddCurrentValue (fechaHasta)
Case "legajo"
crParamDef.AddCurrentValue (legajo)
End Select
Next
CRViewer.ReportSource = crReport
CRViewer.DisplayGroupTree = False
CRViewer.ViewReport
Screen.MousePointer = vbDefault
Set crParamDefs = Nothing
Set crParamDef = Nothing
Exit Sub
ErrHandler:
If Err.Number = -2147206461 Then
MsgBox "El archivo de reporte no se encuentra, restáurelo de los discos de instalación", vbCritical + vbOKOnly
Else
MsgBox Err.Description, vbCritical + vbOKOnly
End If
mflgContinuar = False
Screen.MousePointer = vbDefault
End Sub
Bueno antes que nada, gracias a los dos se re portaron posta.
Lugolu justo ya había terminado las cosas cuando ví tu código, pero lo tendré en cuenta para la próxima.
En fin, luego de muchas puteadas al Crystal le encontré la vuelta respecto a lo que yo quería.
1- Creé una conexión con "Orígenes de datos" a mi BD.
2- Agregué los campos convenientes a un nuevo reporte y lo diseñé como pude.
3- Usé este código:
Dim Ocom As New OleDbConnection
Ocom.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DiplomaBD.mdb"
Dim dsPc As New DiplomaBDDataSet
Dim StrCommCate As String = "SELECT * FROM Cliente WHERE clie_nro_cliente=1"
Dim das As New OleDbDataAdapter
Dim comando As New OleDbCommand
das.SelectCommand = comando
das.SelectCommand.Connection = Ocom
comando.CommandText = StrCommCate
das.Fill(dsPc, "Cliente")
Dim info As New CrystalReport1
info.SetDataSource(dsPc)
Me.CrystalReportViewer1.ReportSource = info
Y listo.
Aca dejo una captura, lo hice BIEN BIEN SIMPLE luego de muchas pruebas como para ver si andaba y va todo OK. Lo que me queda para en unos dias es adaptarlo a tres capas y listo.
Aca dejo una captura por las dudas.
Gracias de nuevo!!
(http://img249.imagevenue.com/loc558/th_28531_111111_122_558lo.JPG) (http://img249.imagevenue.com/img.php?image=28531_111111_122_558lo.JPG)
el código que te pasé es vb6, no sé si servirá para .net
recién veo
Jajaja no importa gracias igual!!
Lo leí por arriba porque como te dije, ya lo había resuelto, pero todo sirve a pesar de que haya diferencias entre VB6 y .NET.
Recien hoy terminé de adaptar todo, y la verdad aprendí bastante :P