none
CrystalReports (AYUDA) RRS feed

  • Pregunta

  • Buenas,

    Necesito ayuda urgente!! he terminado una aplicacion y lo unico que m falta es poder hacer el reporte.. no tengo ni idea de como hacerlo ;( he leido algo en la web y en foros.. pero no consigo resultados optimos ... tengo la base de datos en Mysql y trabajo con windowsforms.. espero puedan ayudarmeeeeeee.. gracias

    miércoles, 3 de octubre de 2012 14:26

Respuestas

  • en primera (si estoy mal que alguien me corrija) no se puede enviar un datatable a un reporte tiene que ser un dataset y dentro los databales que desees, en vez de usar tu datatable podrias usar un dataset, creas un dataset tipado con los campos que traera tu consulta, supongamos que tu dataset se llama midataset1 y tu datatable dentro se llama midatatable1;

    te mostrar el ejemplo en c# seria casi lo mismo para vb, la idea es la misma

    public DataSet1 midataset = new DataSet1();    
    SqlDataAdapter da = new SqlDataAdapter();  
    
    // conn es tu conexion de base de datos
     public void EmpleadoCatalogoReporte()
            {
    
               string sql = "select * from tutabla";
    //pasas parametros el dataadapter
                da = new SqlDataAdapter(sql, conn);
    //llenas el datatable de tu dataset y seria todo
                da.Fill(midataset,"midatatable");
            }

    para cargar el reporte hago esto en el evento load, lo puedes hacer en tu boton
    
    
                    RptPrendaCatalogo rpt = new RptPrendaCatalogo();
    
                    cry.SetDataSource(midataset);
                    crystalReportViewer1.ReportSource = rpt;
    y seria todo amigo, saludos
    • Marcado como respuesta DavidNovato martes, 9 de octubre de 2012 14:55
    viernes, 5 de octubre de 2012 22:40

Todas las respuestas

  • este ejemplo te puede ayudar a comenzar ejemplo crear reporte, esta muy bien explicado, cualquier duda que se te presente te puedo ayudar, nadamas postea, una cosa mas trabajas con datasets tipados?, saludos

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta.

    miércoles, 3 de octubre de 2012 15:04
  • La verdad no trabajo mucho cn dataset tipados, hace 2 meses fue que empece a trabajar con visual y bueno leyendo fue que puede hacer mi aplicacion.. :) .. ese link fue uno de los que vi y si mas o menos lo entiendo pero me enrredo un poco es a la hora de seleccionar las tablas que se van a mostrar en el reporte.. porque tambn lo que queria es que en un forms seleccionar que tipo d reporte quiero (porq son varios) si de productos o clientes o proveedores, etc.. en ese mismo form tambn se puede seleccioanr el rango de fecha (ejm: de 03/10/12 al 31/12/12) luego darle click a un boton "generar reporte" y alli m lleva al otro forms que contiene el CrystalReportViewer........

    he leido varias cosas pero en ningun momento hablan de codigos para los procedimientos..


    ss

    miércoles, 3 de octubre de 2012 15:27
  • me enrredo un poco es a la hora de seleccionar las tablas que se van a mostrar en el reporte

    entonces he de suponer que ya has llegado a este punto, otra forma como se trabajan los reportes es por codigo pero ese no lo he hecho, se me hace mas facil con datasets tipados y traer la informacion, lo de seleccionar los reportes es valido, yo lo hago mandandole un parametro al constructor de mi form que tiene el report viewer ya ahi dependiendo del parametro es el tipo de reporte a mostrar saludos

    miércoles, 3 de octubre de 2012 15:33
  • SI pero me sale un error que me cierra todo el programa... " An unhandled win32 exception ocurrend in devenv.exe (2732)" ... :S lo he hecho 3 veces y las 3 veces m aparece y se cierra todo el programa...


    ss

    miércoles, 3 de octubre de 2012 15:38
  • en que parte te sale el error, al agregar un nuevo crystal, al pasar los campos etc

    aqui te dejo un hilo, de la exepcion que te sale An unhaled win32 exception...

    miércoles, 3 de octubre de 2012 15:45
  • Ya no e ha mostrado el error .. :) .. ya agregue las tablass y los campos... le di finalizar y ya me muestra el reporte, pero todas las tablas y los campos estan ahi mismo...

    ss

    miércoles, 3 de octubre de 2012 16:01
  • no entendi esta parte pero todas las tablas y los campos estan ahi mismo...

    que te faltaria para lograr mostrar el reporte como quieres compañero?, saludos

    jueves, 4 de octubre de 2012 13:48
  •  Buenas, .. yo seleccione las tablas de las que se haran los reportes ;son varias, pero no van todas en un mismo reporte.. osea es dependiendo de el parametro que le popnga en el forms luego le doy al boton "generar reporte" y ahi es dond m manda al reporte con las tablas y campos q seleccione en los parametros... AHORITA me aparecen todos los campos de todas las tablas en el reporte y no es la idea... noc como conectar el form dond elijo que tipo d repoorte quiero con el reporte como tal :s ..

    ss

    jueves, 4 de octubre de 2012 13:54
  • novato_24  Tengo un codigo , que leyendo y viendo algunos videos fue lo que pude sacar, pero aun no m genera el reporte..

     Public Function Reportecliente() As DataTable
            Dim dt As New DataTable
            Dim conexion As New MySqlConnection("Server=localhost; Database=controlsmi; user=root; password=Smi2012") 'cadena conexion
            Dim consulta As String = "SELECT cliente.nombre, sede.nombre_sede, contacto.nombre from cliente, sede, contacto where cliente.id_cliente='" + cbocliente2.SelectedValue.ToString() + "' AND sede.id_sede='" + cbosede2.SelectedValue.ToString() + "' AND contacto.id_sede='" + cbosede2.SelectedValue.ToString() + "' "  'consulta a la tabla
            Dim comando As New MySqlCommand(consulta, MyConnect)
            Dim adap As New MySqlDataAdapter(comando)
            MyConnect.Open()
            adap.Fill(dt)
            MyConnect.Close()
            Return dt
        End Function
        Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
            Try
                Dim mireporte As New CrystalReport1
                Dim dt As New DataTable
                dt = Reportecliente()
                mireporte.SetDataSource(dt)
                frmreporte.CrystalReportViewer1.ReportSource = mireporte
                frmreporte.CrystalReportViewer1.RefreshReport()
                frmreporte.Show()
            Catch ex As Exception
                MsgBox("No se pudo generar el reporte", MsgBoxStyle.Critical)
                Return
            End Try
        End Sub

    Ahi selecciona de los combobox el cliente y la sede para generar el reprte... pero se ve ejecuta el CATCH

    ss

    viernes, 5 de octubre de 2012 15:16
  • ok, mira le di una vista rapida y me parece correcto, algun erro de sintaxis o algo, mira para sabes por que se va al catch, quita tu mensaje de "no se pudo generar el reporte" y haz que aparezca el verdadero error y lo posteas, apenas tengo tiempo te subo un ejemplo de como mostrar el reporte, pero mientras haz eso  tu nuevo catch quedaria asi:

    Catch ex As Exception
    
                MsgBox(ex.toString(), MsgBoxStyle.Critical)
                Return
    

    lo que haces es convertir la variable ex a texto para mostrar, muestranos que error te marca
    viernes, 5 de octubre de 2012 19:38
  • Vale.. yo igual seguire intentando a ver si logro solucionarlo.. Gracias por tu tiempo y tu ayuda...


    ss

    viernes, 5 de octubre de 2012 19:52
  • en primera (si estoy mal que alguien me corrija) no se puede enviar un datatable a un reporte tiene que ser un dataset y dentro los databales que desees, en vez de usar tu datatable podrias usar un dataset, creas un dataset tipado con los campos que traera tu consulta, supongamos que tu dataset se llama midataset1 y tu datatable dentro se llama midatatable1;

    te mostrar el ejemplo en c# seria casi lo mismo para vb, la idea es la misma

    public DataSet1 midataset = new DataSet1();    
    SqlDataAdapter da = new SqlDataAdapter();  
    
    // conn es tu conexion de base de datos
     public void EmpleadoCatalogoReporte()
            {
    
               string sql = "select * from tutabla";
    //pasas parametros el dataadapter
                da = new SqlDataAdapter(sql, conn);
    //llenas el datatable de tu dataset y seria todo
                da.Fill(midataset,"midatatable");
            }

    para cargar el reporte hago esto en el evento load, lo puedes hacer en tu boton
    
    
                    RptPrendaCatalogo rpt = new RptPrendaCatalogo();
    
                    cry.SetDataSource(midataset);
                    crystalReportViewer1.ReportSource = rpt;
    y seria todo amigo, saludos
    • Marcado como respuesta DavidNovato martes, 9 de octubre de 2012 14:55
    viernes, 5 de octubre de 2012 22:40
  • Amigo, listo ya generar el reporte .. pero es un reporte generar.. :S no lo hace dependiendo de lo que seleccione en los combobox como te habia dicho que queria.. y tambn tengo que poenerle un rango de fecha.. EJEMPLO: " desde el 09/10/2012 hasta 31/12/12" .. me entiendes?

    Disculpa que no te habia contestado.. por lo menos ya genera el reporte.. faltarian esos pequeños detalles::

    Gracias por la ayuda.. Saludos


    ss

    martes, 9 de octubre de 2012 14:36
  • lo del los reportes por combo lo puedes hacer mandado un parametro dependiendo del tipo de reporte supongamos que tienes 3 reportes en tu combo, reporte1, reporte2 y reporte3, y un boton de generar reporte bueno al darle clic al boton haria lo siguiente:

    if(combo.text = "reporte1")

    {

    mandas a llamar a tu metodo que te carga el reporte1

    (como lo estas haciendo ahora)

    }

    else if (combo.text = "reporte2")

    {

    mandas a llamar a tu metodo que carga el reporte2

    }

    else

    {

    mandas a llamar a tu metodo que carga el reporte3

    }

    ahora con la segunda duda de las fechas, eso ya depende de tu consulta, lo podrias hacer desde un store procedure, pero dejemoslo como lo manejas ahora, supongamos que tu reporte1 filtea por un rango de fechas, entonces tendrias que insertar 2 datetimepicker a tu form, damos clic al boton generar y podrias hacer algo como lo sig:

               string fecha1 = dateTimePicker1.Value.ToString("yyyyMMdd") + " 00:00:00";
               string fecha2 = dateTimePicker2.Value.ToString("yyyyMMdd") + " 23:59:59";

    luego lo mandas a tu consulta que quedaria asi:

    select * from mi tabla where fecha between fecha1 and fecha2;

    y seria todo, esta explicando a grandes rasgos jejeje

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta.

    martes, 9 de octubre de 2012 14:50
  • Sabes que cambie lo que tenia anteriormente.. ahora esta asi ..

    Public Function Reportecliente() As DataSet
            Dim ds As New DataSet
            Dim conexion As New MySqlConnection("Server=localhost; Database=controlsmi; user=root; password=Smi2012") 'cadena conexion
            Dim consulta As String = "SELECT cliente.nombre, sede.nombre_sede, contacto.nombre from cliente, sede, contacto where cliente.id_cliente='" + cbocliente2.SelectedValue.ToString() + "' AND sede.id_sede='" + cbosede2.SelectedValue.ToString() + "' AND contacto.id_sede='" + cbosede2.SelectedValue.ToString() + "' "  'consulta a la tabla
            Dim comando As New MySqlCommand(consulta, MyConnect)
            Dim adap As New MySqlDataAdapter(comando)
            conexion.Open()
            adap.Fill(ds)
            conexion.Close()
            Return ds
        End Function
       
     Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
            Dim mireporte As New CrystalReport1
            Dim datos As New DataSet
            datos = Reportecliente()
            mireporte.SetDataSource(datos)
            frmreporte.CrystalReportViewer1.ReportSource = mireporte
            frmreporte.CrystalReportViewer1.RefreshReport()
            frmreporte.Show()

    Como veras le agrege.. Datos= Reportecliente()

    asi si agarra exactamente la consulta y no hace solo un reporte general.. pero me da error en :  adap.Fill(ds) -----> Fill: la propiedad SelectCommand.Connection no se ha inicializado..


    ss

    martes, 9 de octubre de 2012 15:43
  • tengo dos soluciones prueba las dos y me dices como vas

    solucion 1:

    Public Function Reportecliente() As DataSet
            Dim ds As New DataSet
            Dim conexion As New MySqlConnection("Server=localhost; Database=controlsmi; user=root; password=Smi2012") 'cadena conexion
            Dim consulta As String = "SELECT cliente.nombre, sede.nombre_sede, contacto.nombre from cliente, sede, contacto where cliente.id_cliente='" + cbocliente2.SelectedValue.ToString() + "' AND sede.id_sede='" + cbosede2.SelectedValue.ToString() + "' AND contacto.id_sede='" + cbosede2.SelectedValue.ToString() + "' "  'consulta a la tabla
            Dim comando As New MySqlCommand(consulta, conexion)
            Dim adap As New MySqlDataAdapter(comando)
            conexion.Open()
            adap.Fill(ds)
            conexion.Close()
            Return ds
        End Function
    

    aqui lo que hice fue cambiar en tu command el myconnect por conexion que es la conexion que mandas segun veo, ya con eso debe funcionar, si no aqui esta la solucion 2:

    Public Function Reportecliente() As DataSet
            Dim ds As New DataSet
            Dim conexion As New MySqlConnection("Server=localhost; Database=controlsmi; user=root; password=Smi2012") 'cadena conexion
            Dim consulta As String = "SELECT cliente.nombre, sede.nombre_sede, contacto.nombre from cliente, sede, contacto where cliente.id_cliente='" + cbocliente2.SelectedValue.ToString() + "' AND sede.id_sede='" + cbosede2.SelectedValue.ToString() + "' AND contacto.id_sede='" + cbosede2.SelectedValue.ToString() + "' "  'consulta a la tabla
            Dim comando As New MySqlCommand(consulta, conexion)
       '     Dim adap As New MySqlDataAdapter(comando)
        '    conexion.Open()
            adap.Fill(ds)
       '     conexion.Close()
            Return ds
        End Function
    

    como veras comente algunas partes, ya con eso debe funcionar prueba las 2, y postea si funciono o no, y que error marca jeje no los compile solo de a ojo jejej saludos

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta.

    martes, 9 de octubre de 2012 16:46
  • Si ya te iba a escribir que ya me habia dado cuenta del "MyConnect" :S jaja que distraccion... disculpa esa..! y bueno segun lo veo no le hace caso a la consulta.. sigue mostrando toodo la tabla y no lo que le indico en la consulta... la idea es poder seleccionar un cliente y hacer un reporte de ese unico cliente o en se defecto de todos los clientes.. 

    ss

    martes, 9 de octubre de 2012 16:57
  • ok, mira primero prueba tu consulta con los parametros en tu servidor de base de datos, y me dices si te trae los datos que pides, si no, es que tu consulta esta erronea, postea y te ayudo a corregirla, saludos
    martes, 9 de octubre de 2012 18:27
  • Si la he probado varias veces y si trae los datos.. :s

    ss

    martes, 9 de octubre de 2012 19:54
  • Bueno amigo la verdad que nose que mas hacer.. :S no entiendo porq no le hace caso a la consulta, deberia hacerlo.. y si funciona la pruebo en la consola y me da los datos perfectamente..

    ss

    miércoles, 10 de octubre de 2012 16:14
  • y haz probado que los datos que le mandas del combobox sean los correctos?, haz esto depura el metodo en visual cuando llegues a la parte de la consulta sonde pases los parametros checas si en verdad esos datos estas mandando, copia la consulta y ejecutala en tu gestor de base de datos, y cuentas que sucedio


    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    miércoles, 10 de octubre de 2012 16:31
  • No sera que no lo esta mandando a mi reporte como tal???.. al que esta creado?


    ss

    miércoles, 10 de octubre de 2012 17:00
  • podria ser, respondeme estas dudas para atar cabos:

    1.- cuantos reportes tienes hechos.

    2.- ya probaste la consulta con los datos que mandas desde tu programa? te arroja los mismo que la query normal?

    saludos


    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    miércoles, 10 de octubre de 2012 18:33
  • Tengo un solo reporte hecho.. como estoy empezando solo cree uno para probar y cuando ya tuviera resultados en dado caso de necesitar mas poder hacerlos sin problemas... sii ya probe la consulta y me arroja los resultados

    ss

    miércoles, 10 de octubre de 2012 18:37
  • algun bug debe de haber por alli, mira si puedes comparte tu proyecyo en skydrive y me mandas un mp para que lo cheque y vea cual es el error


    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    jueves, 11 de octubre de 2012 18:59