(SOL)Crystal report y dataset VB.NET

Publicado por hardrocker, Octubre 08, 2008, 01:34:25

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

hardrocker

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).
-·=»‡«=·- M€ÐÏØ€VØ-·=»‡«=·-

elrosti

#1
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 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á hay un tutorial paso a paso de Crystal Report, quizas te sirve.

Saludos
Yo no lo quería creer..... pero ella me convenció.

hardrocker

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.
-·=»‡«=·- M€ÐÏØ€VØ-·=»‡«=·-

elrosti

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.
Yo no lo quería creer..... pero ella me convenció.

lugolu

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
de todo un poco

hardrocker

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!!

-·=»‡«=·- M€ÐÏØ€VØ-·=»‡«=·-

lugolu

el código que te pasé es vb6, no sé si servirá para .net

recién veo
de todo un poco

hardrocker

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
-·=»‡«=·- M€ÐÏØ€VØ-·=»‡«=·-