none
Como crear reportes con cristal report usando parametros en visual basic 2005 RRS feed

  • Pregunta

  • tengo una tabla kardex de almacen donde contiene los saldos de los productos en almacen pero quiero filtrarlos que me vayan mostrando por tipo de producto
    es decir en un combo box lleno los tipos de productos que hay de mi tabla tipo de productos por ejemplo pieles, quimicos y quiero que me vaya filtrando x esos tipos, cuando seleccione pieles en el combo box me reporte todos los saldo de productos que son pieles y asi para los quimicos.
    estoy utilizando el siguiente store procedure:
    create procedure ReporteStockProductos
    @tipoproducto int=null
    as
    select TipoProducto.tipo, Productos.nproducto, KardexAlmacen.saldo 
    from TipoProducto inner join Productos on  TipoProducto.ntipoproducto= Productos.ntipoproducto inner join KardexAlmacen on KardexAlmacen.nproducto = Productos.nproducto
    WHERE (dbo.TipoProducto.tipo = @tipoproducto) 
    esto me permite mostrar todo los saldos de los productos pero que sean filtrados por el tipo de producto
    estoy utilizando capas y esto es lo que hice en la capa datos:
      Public Function ReportarStockProductos(ByVal ntipoproducto As Integer) As DataTable
            Try
                Dim cnn As New SqlConnection
                cnn.ConnectionString = conexion.instancia.cadenaconexion
                cnn.Open()
                Dim ConsultaSQL As New SqlCommand("ReporteStockProductos", cnn)
                ConsultaSQL.CommandType = CommandType.StoredProcedure
                ConsultaSQL.Parameters.Add("@tipoproducto", SqlDbType.Int).Value = ntipoproducto
                Dim Adaptador As New SqlDataAdapter(ConsultaSQL)
                Dim Dt As New DataTable
                Adaptador.Fill(Dt)
                cnn.Close()
                cnn.Dispose()
                Return Dt
            Catch ex As Exception
                Throw New Exception(ex.Message)
            Finally
            End Try
        End Function
    y esta funcion para llenar mi combo box tipo producto:
     Public Function listartipoproducto() As DataTable
            Try
                Dim dtTmp As New DataTable()
                Dim CNN As New SqlConnection(conexion.instancia.cadenaconexion)
                CNN.Open()
                Dim ConsultaSQL As New SqlCommand("Select ntipoproducto, tipo from TipoProducto", CNN)
                ConsultaSQL.CommandType = CommandType.Text
                Dim dap As New SqlDataAdapter(ConsultaSQL)
                dap.Fill(dtTmp)
                CNN.Close()
                CNN.Dispose()
                Return dtTmp
            Catch ex As Exception
                Throw New Exception(ex.Message)
            Finally
            End Try

        End Function

    y en la capa presentacion hago esta funcion para llenar el combobox tipoproducto:
    Private Sub llenarcombo()
            With cbtipoproducto
                .DataSource = kardexdalc.instancia.listartipoproducto()
                .ValueMember = kardexdalc.instancia.listartipoproducto().Columns(0).ColumnName
                .DisplayMember = kardexdalc.instancia.listartipoproducto().Columns(1).ColumnName
            End With
        End Sub
    pero de aqui nose como mostrarlo en el report viewer una de las herramientas del visual basic 2005 o otra herramienta q me puedan recomendar para reporte.
    espero me puedan ayudar muchas gracias.
    • Cambiado Fran DiazModerator miércoles, 17 de junio de 2009 6:45 - ([Loc]From:Lenguaje VB.NET)
    • Cambiado Fran DiazModerator viernes, 19 de agosto de 2011 12:21 Es de CR (De:SQL Server Reporting Services)
    jueves, 11 de junio de 2009 17:40

Respuestas

  • hola,

    si sigues los pasos detallados en el link que te pase en el post podrias hacer lo que quieres, por supuesto deberas adaptarlo a con tu consulta a tu db especifica pero basicamente similar.

    Deberas crear el reporte con al aconsulta a tu db, en dodne tenga un parametro por tipo, este parametro sera aplicado al query que filtrara el reporte.

    En el ejemplo del link en realidad esta basado en una aplicacion webform, pero basicamente los pasos son similares.

    Aunque tambien tienes estos otros links que te pdoran ayudar:

    Crystal Report Basics and Integration with DataSet
    Creating Crystal Reports using C# with Datasets

    Como veras aqui si podrias cargar tu dataset filtrado por tipo desde tu aplicacion, sin necesidad siquiere de filtrar el reporte.
    Esto es asi porque tu ya filtrarias el DataSet

    saludos
    Leandro Tuttini

    Work: Iceberg Solutions
    Blog
    Buenos Aires
    Argentina
    sábado, 13 de junio de 2009 20:10

Todas las respuestas

  • hola,

    La verdad no queda muy claro cual es el objetivo que quieres lograr.
    O sea el titulo del post habla de parametro en un reporte, la explicacion del codigo habla del llenado de un combo, pero al final quieres mostrar un reporte.

    El codigo que utilizas para llenar el combo esta correcto, para su funcion, ahora bien como se conectaria esto con un reporte ?

    O sea quieres mostrar un listado de Productos ?

    A ver si me explico un reporte te mostrara un listado, no podras poner un combo en un reporte, puedes pasarle filtros al reporte para limitar el listado, pero no mostrarlo en el reporte.


    Por ahi este link te de una idea:

    Page 2 - Working with Parameters with Crystal Reports and ASP.NET 2.0

    Como veras en la tabla de contenido empieza de cero al creacion del reporte, puedes seguirlo a ver si te orienta.


    Otro tema cuando nombras el "Report Viewer" ten en cuanta que es es el visualizador de reportes de Reporting Services, o sea no es el visualizador de Crystal Reports.


    saludos
    Leandro Tuttini

    Work: Iceberg Solutions
    Blog
    Buenos Aires
    Argentina
    jueves, 11 de junio de 2009 18:36
  • osea lo que quiero es hacer un reporte pero de la tabla kardex que es de donde quiero sacar ese reporte tiene los campos tipoproductos, productos, entrada, salida y saldo pero yo solo quiero mostrar en el reporte los saldos de los productos pero por tipos de productos, osea cuando seleccione en el combo box que tenga en mi formulario el tipo de producto1 entonces que solo me muestre en el reporte los saldos de productos de tipo1 y cuando seleccione en el combo el tipo de producto2 entonces que solo me muestre en el reporte los saldos de los productos de tipo2 y asi sucesivamente.
    es lo que quiero lograr. espero su ayuda gracias
    sábado, 13 de junio de 2009 16:57
  • hola,

    si sigues los pasos detallados en el link que te pase en el post podrias hacer lo que quieres, por supuesto deberas adaptarlo a con tu consulta a tu db especifica pero basicamente similar.

    Deberas crear el reporte con al aconsulta a tu db, en dodne tenga un parametro por tipo, este parametro sera aplicado al query que filtrara el reporte.

    En el ejemplo del link en realidad esta basado en una aplicacion webform, pero basicamente los pasos son similares.

    Aunque tambien tienes estos otros links que te pdoran ayudar:

    Crystal Report Basics and Integration with DataSet
    Creating Crystal Reports using C# with Datasets

    Como veras aqui si podrias cargar tu dataset filtrado por tipo desde tu aplicacion, sin necesidad siquiere de filtrar el reporte.
    Esto es asi porque tu ya filtrarias el DataSet

    saludos
    Leandro Tuttini

    Work: Iceberg Solutions
    Blog
    Buenos Aires
    Argentina
    sábado, 13 de junio de 2009 20:10
  • muchas gracias ya pude hacer mis reportes con un dataset. ;-)
    jueves, 18 de junio de 2009 14:39
  • Lo que tiene esta bien solo te falta presentalo en el reporte, te doy un ejemplo de como mostrarlo usando un dataset y un Store Procedure;

      Private Function LlenarDatosReporteSP() As DataTable

             Dim cn As New SqlConnection (Cls_Conexion.CadenaConexion)

            Dim dt As New DataTable

            Dim Prcmd As New SqlCommand ("SP_Productos" , cn)

            Prcmd.CommandType = CommandType .StoredProcedure

     

            Prcmd.Parameters.Clear()

            Prcmd.Parameters.Add("@estado" , SqlDbType .Char, 10).Value = CStr (Me .txtcodigo.Text)

            cn.Open()

            Prcmd.ExecuteNonQuery()

     

     

            Dim ad As New SqlDataAdapter (Prcmd)

            dt.Rows.Clear()

            ad.Fill(dt)

            cn.Close()

              Return dt

        End Function

    '        Create  proc SP_Productos

            '@estado CHAR(10)

            'as

            'select * from dbo.PRODUCTO

            'where estado=@estado

     

        Private Sub BtnImprimir_Click(ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles BtnImprimir3.Click

            Dim VisorRpt As New Form2 'Creo un formulario Visor para mostrar cualquier reporte; CrystalReportViewer

            ' LlenarDatosReporte() con DATASET y sp

     

            Dim oRep As New CrystalDecisions.CrystalReports.Engine.ReportDocument

            oRep.Load("\PRUEBAS\Reports\" + "ReportProductos.RPT" ) ' NombreDelReporte.RPT

            Dim otbl As CrystalDecisions.CrystalReports.Engine.Table

            Dim olog As CrystalDecisions.Shared.TableLogOnInfo

            For Each otbl In oRep.Database.Tables

                olog = otbl.LogOnInfo

                olog.ConnectionInfo.ServerName = Cls_Conexion.mServer

                olog.ConnectionInfo.DatabaseName = Cls_Conexion.mDb

                 olog.ConnectionInfo.UserID = Cls_Conexion.mUser

                olog.ConnectionInfo.Password = Cls_Conexion.mPass

                otbl.ApplyLogOnInfo(olog)

     

            Next

            oRep.SetDataSource(LlenarDatosReporteSP())

            VisorRpt.CrystalReportViewer1.ReportSource = oRep

            VisorRpt.Text = Me .Text

            VisorRpt.ShowDialog()

     

     

        End Sub

    domingo, 30 de enero de 2011 17:06