none
Repetición de Filas en Reporte RRS feed

  • Pregunta

  • Tengo un problema con un reporte en Crystal Reports el cual lleno con datos de cinco tablas diferentes. Es decir el reporte es como para realizar un factura pero al momento de probar mi consulta en el Sql Server toda funciona bien pero al momento de cargar el reporte se replican las filas.

    Estas son mis tablas :

    y  así de ve mi reporte:

    Nota no se si tenga que ver mi consulta o código, aquí lo dejo:

    Dim rpt As New ULTIMO()
            'The report you created.
            cmd = New SqlCommand()
            Dim myDA As New SqlDataAdapter()
            Dim myDS As New nuevo()
            'The DataSet you created.
            con = New SqlConnection(conexion.CadenaConexion)
            cmd.Connection = con
            cmd.CommandText = "SELECT DISTINCT F.id_factura,F.fecha_factura,F.id_venta,V.id_cliente,C.nombrecliente,V.fecha_venta,V.subtotal,V.iva,V.total,P.id_producto,A.nom_producto,A.descripcion,P.cantidad,P.precio From Facturas F INNER JOIN Ventas V ON V.id_venta=F.id_venta INNER JOIN Clientes C ON C.id_cliente=V.id_cliente INNER JOIN Partida_Ventas P ON P.id_venta=V.id_venta INNER JOIN Productos A ON A.id_producto=P.id_producto Where id_factura='" & TextBox2.Text & "'"
            cmd.CommandType = CommandType.Text
            myDA.SelectCommand = cmd
    
            myDA.Fill(myDS, "Facturas")
            myDA.Fill(myDS, "Ventas")
            myDA.Fill(myDS, "Clientes")
            myDA.Fill(myDS, "Partida_Ventas")
            myDA.Fill(myDS, "Productos")
    
            rpt.SetDataSource(myDS)
            Dim frm As New Form1()
            frm.CrystalReportViewer1.ReportSource = rpt
            frm.Show()

    Muchas gracias de antemano :)

    jueves, 2 de julio de 2015 20:50

Respuestas

  • A ver,

    Como mencionas que en SQL Server te muestra los registros correctos, te sugiero lo siguiente

    Revisa la sentencia SQL que genera Crystal Reports, desde:

    1. Menú Cyrstal Reports-> Base de datos.

    2. Selecciona Mostrar Consulta SQL,

    3. Verifica que esa consulta sea la correcta, de no ser así realiza alguna de las opciones:

    Opción A: Elimina tus tablas y agrega la consulta que tienes en SQL Server desde:

    - Abre el Asistente de Base de datos, despliega tu conexión actual y más arriba donde se muestra tus tablas, vistas, procedimientos almacenados hay una opción llamada Add Comand (Agregar comando).

    - Pega tu sentencia SQL ahí y aceptas todo y verás que se ha agregado y aparecen los mismos campos que tenías antes.

    Opción B: Elimina tus tablas y agrega un Stored Procedure, previamente crealo en SQL Server:

    - Ejecuta este script en SQL Server

    USE TUBaseDatos

    GO

    CREATE PROC FacturaSelId_Factura ( @IdFactura int --coloca el tipo de dato que tengas en tu tabla ) AS SELECT DISTINCT F.id_factura,F.fecha_factura,F.id_venta,V.id_cliente,C.nombrecliente,V.fecha_venta,V.subtotal,V.iva,V.total, P.id_producto,A.nom_producto,A.descripcion,P.cantidad,P.precio From Facturas F INNER JOIN Ventas V ON V.id_venta=F.id_venta INNER JOIN Clientes C ON C.id_cliente=V.id_cliente INNER JOIN Partida_Ventas P ON P.id_venta=V.id_venta INNER JOIN Productos A ON A.id_producto=P.id_producto Where id_factura=@IdFactura GO

    -Abre el Asistente de Base de datos, despliega tu conexión actual y despliega procedimientos almacenados, ahí encontrarás el stored que creaste en el paso anterior FacturaSelId_Factura, seleccionalo y acepta.

    - Aparecen los mismos campos que tenías antes.

    Prueba y nos comentas.


    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza







    • Editado Nathán XS miércoles, 8 de julio de 2015 0:23
    • Marcado como respuesta Ciao Manuel jueves, 9 de julio de 2015 1:23
    miércoles, 8 de julio de 2015 0:20

Todas las respuestas

  • Hola:
    En la imagen del CrystalReportViewer se visualizan 16 lineas de detalle.
    ¿ Si ejecutas la consulta en el SQL Server Management, cuantas lineas te salen ?

    Un saludo desde Bilbo
    Carlos

    viernes, 3 de julio de 2015 5:47
  • Si ejecuto la consulta en sql me salen dos registros que son los dos productos comprados por un cliente.



    • Editado Ciao Manuel viernes, 3 de julio de 2015 12:55
    viernes, 3 de julio de 2015 12:51
  • Hola:
    En un Form con 1 ReportDocument (rdInforme), 1 CrystaReportViewer (crvInforme) y 1 Button, copia y pega el siguiente codigo

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.rdInforme.Load(PATH_FICHERO_RPT)
            '
            Dim loDataTable As DataTable = lF_dtCrearDataTable()
            Me.rdInforme.SetDataSource(loDataTable)
            '
            Me.crvInforme.ReportSource = Me.rdInforme
        End Sub

        Private Function lF_dtCrearDataTable() As DataTable
            Dim loDataTable As DataTable = New DataTable
            Try
                Using loConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    Dim lsQuery As String = "SELECT DISTINCT F.id_factura,F.fecha_factura,F.id_venta,V.id_cliente,C.nombrecliente,V.fecha_venta,V.subtotal,V.iva,V.total,P.id_producto,A.nom_producto,A.descripcion,P.cantidad,P.precio From Facturas F INNER JOIN Ventas V ON V.id_venta=F.id_venta INNER JOIN Clientes C ON C.id_cliente=V.id_cliente INNER JOIN Partida_Ventas P ON P.id_venta=V.id_venta INNER JOIN Productos A ON A.id_producto=P.id_producto Where id_factura='" & TextBox2.Text & "'"
                    Dim loDataAdapter As SqlDataAdapter = New SqlDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "lF_dtCrearDataTable", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return loDataTable
        End Function

    Un saludo desde Bilbo
    Carlos

    lunes, 6 de julio de 2015 7:28
  • Me marca un error en esta parte

    Me.rdInforme.Load(PATH_FICHERO_RPT)

    Yo lo remplace por el nombre de mi reporte pero aun asi.

    Gracias de antemano

    lunes, 6 de julio de 2015 21:08
  • Hola,

    Puede que tus tablas no estén relacionadas en CR, prueba lo siguiente:

    1. Ve al Menú Base de Datos-> Asistente Experto de base de datos.

    2. Se visualiza tu conexión actual, sobre la pestaña Links (Enlaces), selecciona la opción automático.

    Al hacer eso, se reorganizará los enlaces y te mostrará sólo los registros que se muestra en SQL.

    Saludos,


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza


    • Editado Nathán XS lunes, 6 de julio de 2015 22:07
    lunes, 6 de julio de 2015 22:07
  • Gracias por responder, esto donde lo tengo que checar en el gestor de sql o en el IDE Visual studio?
    martes, 7 de julio de 2015 0:58
  • Lo que te recomiendo revísalo en tu reporte Crystal, si tienes tu reporte RPT embebido en el IDE Visual Studio, revísalo desde Visual Studio.

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza


    • Editado Nathán XS martes, 7 de julio de 2015 1:05
    martes, 7 de julio de 2015 1:04
  • Muchas gracias sería esto?:

    martes, 7 de julio de 2015 1:24
  • Correcto, prueba haciendo clic en Por Nombre y luego clic en Aceptar,

    Prueba y nos comentas cuantos registros te sale.

    Saludos.


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza


    • Editado Nathán XS martes, 7 de julio de 2015 1:49
    martes, 7 de julio de 2015 1:49
  • Siguen apareciendo  repetidos :(

    martes, 7 de julio de 2015 2:30
  • A veces se queda  pegado y sale ese comportamiento que tienes, prueba quitando las relaciones, luego selecciona Por Clave, luego clic en Autoorganizar. 

    Saludos.


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    martes, 7 de julio de 2015 2:33
  • Desgraciadamente sigue ocurriendo lo mismo a pesar de hacer lo que me pediste
    martes, 7 de julio de 2015 2:53
  • Bueno, te recomendaría crear un Stored Procedure para usarlo en CR en lugar de como lo estas haciendo, crea tu SP y agregalo a tu Reporte desde el Asistente Experto de Base de datos.

    Si no puedes ver los SP en tu conexión hazlo visible desde:

    Esta opción es desde Visual Studio

    1. Crystal Reports-> Diseño-> Configuración predeterminada

    2. Pestaña Base de datos-> Activa Procedimientos Almacenados,

    La opción desde la aplicación Crystal Reports esta en Archivo-> Configuración.

    3. Agrega el Store Procedure y lo podrás usar desde CR.

    Saludos.


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    martes, 7 de julio de 2015 3:31
  • Hola:
    Prueba con esto

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
             Me.rdInforme.Load(PATH_FICHERO_RPT)
             '
             Dim loDataTable As DataTable = lF_dtCrearDataTable()
             Me.rdInforme.SetDataSource(loDataTable)
             '
             Me.crvInforme.ReportSource = Me.rdInforme
        Catch Exp As Exception
      MessageBox.Show(Exp.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Try
    End Sub

    Y pon la descripcion del error.

    Un saludo desde Bilbo
    Carlos

    martes, 7 de julio de 2015 7:24
  • Buenos dias disculpa puedes mandar una copia de tu reporte en vista diseño para ver como estan formado los grupos
    martes, 7 de julio de 2015 12:43
  • Te refieres a esto?

    martes, 7 de julio de 2015 17:34
  • Simplemente me marca error en :

     Me.rdInforme.Load(PATH_FICHERO_RPT)

    Yo lo reemplazo con el nombre de mi reporte pero marcar error.

    martes, 7 de julio de 2015 17:56
  • Si tu intención es crear una factura de venta para mi concepto estas involucrando muchas tabla yo trabajaria solo con dos Ej: una llamada cabecera_factura donde se guardarían todo lo referente al encabezado de una factura serian los siguientes  item   Numero,fecha,id_cliente, Nombre_cliente , Dirrecion,ciudad ,Telefono ete y otra tabla llamada Detalle_factura ay colocaria el id_delproducto, nombre_poducto, cantidad,precio ete mi coreo es cedlcf40@gmail.com 

    mira esta imagen

    martes, 7 de julio de 2015 21:32
  • Muchas gracias por tu sugerencia el problema es que es parte de un práctica y nuestra profesora nos proporciono la Base de Datos.  De todo modos te agradecería si me sugieres que tablas en dado caso debería manejar, sabiendo de lleno que es para hacer una factura de una venta.
    martes, 7 de julio de 2015 23:06
  • A ver,

    Como mencionas que en SQL Server te muestra los registros correctos, te sugiero lo siguiente

    Revisa la sentencia SQL que genera Crystal Reports, desde:

    1. Menú Cyrstal Reports-> Base de datos.

    2. Selecciona Mostrar Consulta SQL,

    3. Verifica que esa consulta sea la correcta, de no ser así realiza alguna de las opciones:

    Opción A: Elimina tus tablas y agrega la consulta que tienes en SQL Server desde:

    - Abre el Asistente de Base de datos, despliega tu conexión actual y más arriba donde se muestra tus tablas, vistas, procedimientos almacenados hay una opción llamada Add Comand (Agregar comando).

    - Pega tu sentencia SQL ahí y aceptas todo y verás que se ha agregado y aparecen los mismos campos que tenías antes.

    Opción B: Elimina tus tablas y agrega un Stored Procedure, previamente crealo en SQL Server:

    - Ejecuta este script en SQL Server

    USE TUBaseDatos

    GO

    CREATE PROC FacturaSelId_Factura ( @IdFactura int --coloca el tipo de dato que tengas en tu tabla ) AS SELECT DISTINCT F.id_factura,F.fecha_factura,F.id_venta,V.id_cliente,C.nombrecliente,V.fecha_venta,V.subtotal,V.iva,V.total, P.id_producto,A.nom_producto,A.descripcion,P.cantidad,P.precio From Facturas F INNER JOIN Ventas V ON V.id_venta=F.id_venta INNER JOIN Clientes C ON C.id_cliente=V.id_cliente INNER JOIN Partida_Ventas P ON P.id_venta=V.id_venta INNER JOIN Productos A ON A.id_producto=P.id_producto Where id_factura=@IdFactura GO

    -Abre el Asistente de Base de datos, despliega tu conexión actual y despliega procedimientos almacenados, ahí encontrarás el stored que creaste en el paso anterior FacturaSelId_Factura, seleccionalo y acepta.

    - Aparecen los mismos campos que tenías antes.

    Prueba y nos comentas.


    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza







    • Editado Nathán XS miércoles, 8 de julio de 2015 0:23
    • Marcado como respuesta Ciao Manuel jueves, 9 de julio de 2015 1:23
    miércoles, 8 de julio de 2015 0:20
  • Me ubique en Informe principal en mi Reporte de Crystal y en la parte de arriba apareció el menú crystal reports  y también el submenú Base de datos pero me aparece deshabilitada la opción Mostrar consulta sql.
    miércoles, 8 de julio de 2015 4:49
  • Hola:
    Veo que te sale este error:
    PATH_FICHERO_RPT no esta declarado. Puede que este inaccesible debido a su nivel de proteccion

    > PATH_FICHERO_RPT < es una descripcion.

    Tu tienes que poner en vez de PATH_FICHERO_RP el camino donde esta tu fichero RPT como por ejemplo "D:\Codigo\VB2008\FicheroCrystal\FicheroCrystal\Excel.rpt"

    Un saludo desde Bilbo
    Carlos

    miércoles, 8 de julio de 2015 7:09
  • Me ubique en Informe principal en mi Reporte de Crystal y en la parte de arriba apareció el menú crystal reports  y también el submenú Base de datos pero me aparece deshabilitada la opción Mostrar consulta sql.

    Prueba con la opción B.

    Saludos.


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    miércoles, 8 de julio de 2015 12:43
  • Muchas gracias, lo intentaré una vez más para ver que pasa
    jueves, 9 de julio de 2015 0:21
  • Ya hice la opción b, pero no se exactamente si lo hice bien, el caso es que después como hago para mandarle el parámetro del procedimiento almacenado o en dado caso como hacer que carguen los datos por código. Espero darme a entender

    E igual me aparece esto cuando me paso a la vista previa del informe principal

    Muchas gracias por darle seguimiento a mi problema 
    jueves, 9 de julio de 2015 0:29
  • Ok, Correcto,

    Lo que CR te esta diciendo es que le des el valor del parámetro para que filtre tu consulta, prueba ingresando un @Id_Factura válido, por ejm: 1, luego dale clic en aceptar y listo. CR generará tu reporte. Debe de mostrarte la misma cantidad de filas que en SQL Server porque ahora SQL Server le da los registros a CR y este ya no procesa la consulta directamente.

    Ahora en tiempo de ejecución sólo debes pasar ese parámetro desde tu Sistema.

    PD: Previamente asegura que hayas borrado las tablas que tenías antes en CR y sólo deja el Stored.

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Editado Nathán XS jueves, 9 de julio de 2015 0:47
    jueves, 9 de julio de 2015 0:44
  • Quiere decir que ya no es necesario que lo haga desde código o use una función?

    Ya lo ejecute e introduci el parametro que me pidio el crystal:

    jueves, 9 de julio de 2015 0:59
  • Que tal,

    Desde el código ahora solo preocupate por la cadena de conexión con CR y de pasarle el valor del parámetro de acuerdo a tus necesidades.

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    jueves, 9 de julio de 2015 1:15
  • Muchas Gracias por la ayuda, lo siento pero soy principiante pero para esto creo que esta bien.
    jueves, 9 de julio de 2015 1:22