none
Parámetros con crystal reports RRS feed

  • Pregunta

  • Que tal saludos a todos y bueno tengo esta pregunta:

    Tengo un reporte en el cual a través de un OracleAdapter que abre un asistente desde el cuál pego mi consulta que es esta:

    SELECT   rq.EJERCICIO ||''|| rq.mes ||''|| rq.consecutivo as Req,   rq.DEPENDENCIA, rq.SDEPENDENCIA, rq.SSDEPENDENCIA, rq.SSSDEPENDENCIA, rq.FECHA, rq.EXTENCION, rq.CODIGO, cb.DESCRIPCION, cb.precio,
                          pr.CANTIDAD, ro.ID_ORIGEN_REC, ro.PORCENTAJE
    FROM         REQUISICION rq, PARTIDASREQ pr, REQ_ORIGEN ro, CATALOGO_BIENES cb
    WHERE     rq.EJERCICIO = pr.EJERCICIO AND rq.MES = pr.MES AND rq.CONSECUTIVO = pr.CONSECUTIVO AND pr.EJERCICIO = ro.EJERCICIO AND
                          pr.MES = ro.MES AND pr.CONSECUTIVO = ro.CONSECUTIVO AND pr.ID_BIEN = cb.ID_BIEN AND (rq.CONSECUTIVO = 5)   

    Ya despues de esto en la "flechita" que aparece en el componente OracleDataAdapter que en este momento no recuerdo como se llama esa "flechita" pero tiene la opción "Genera conjunto de datos" a partir del DataAdapter y pues todo muy bien porque todo está basado como le digo en el sql de arriba, así que no hay más que decir.

    Mi problema:

    Pero ahora lo que quiero es que en lugar de por sql darle el consecutivo hacerlo a travez de algún textbox y pasarlo como parámetro al reporte :txtConsecutivo.Text <--por ejemplo y traerme el reporte 5 (que es el que muestro en el ejemplo). Al igual que me gustaría parametrizar otra cosas como por ejemplo esta parte: "rq.EJERCICIO ||''|| rq.mes ||''|| rq.consecutivo as Req" que es realidad el id del reporte que está conformado por 3 campos de una tabla (porqué está así =(? No lo sé. Yo solo estoy haciendo la aplicación y el "DBAdmin" hace la bdd...que en mi opinión la clave no debe de estar formada así).Así que aquí pondría otro textbox y algo así como imprimir por id del reporte: txtIdReporte y busque por: "rq.EJERCICIO ||''|| rq.mes ||''|| rq.consecutivo as Req"donde el "rq.consecutivo" es el 5 que está en el select de arriba. Y así una o dos parámetros más como por ejemplo desplegar en un combobox todas las dependencias y que el seleccionar alguna les muestre los reportes para esa dependencia que sería esta parte del select: "rq.DEPENDENCIA, rq.SDEPENDENCIA, rq.SSDEPENDENCIA, rq.SSSDEPENDENCIA," Y que les despliegue el mismo reporte. O sea que lo quiero es pasarle cualquiera de estos parámetros y que me dé el mismo reporte. Hace tiempo hice un reporte con un parámetro que el Crystal Reoprt tiene un asistente y al pedir el valor del parámetro regresa una ventana horrible como esta:

    Y para todos sus parámetros es la misma ventana, del mismo tamaño y todo y pues la verdad está muy fea. Bueno entonces esa es mi problema. Mandarle parámetros al reporte y que me muestre lo que ocupo.

    Muchas gracias !!

    Espero y no haber sido confuso.


    Renato Díaz Nayarit, México
    martes, 1 de febrero de 2011 3:18

Todas las respuestas

  • hola

    Crystal Reports – Parameters – Como asignarlos desde codigo .net

    en el articulo veras como pasarle reporte a Crystal

     

    pero igual un comentario, recomendaria si el reporte no lo conectes directo a la db, sino que uses dataset tipados como origen de datos, de esta forma no tendrias problemas ya que los datos los filtras desde .net y al reporte le pasas lo necesario para mostrar, por ahi asi evitas los parametros de crystal

     

    Informes Crystal Reports

    Creación de Reportes con Crystal Reports en Visual Studio 2005/2008

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 1 de febrero de 2011 5:09
  • :-)
    Hola,

    A falta de saber que versión de CR estás usando, la forma más sencilla de pasar parámetros a un informe es mediante el método 'SetParameterValue' de la clase 'ReportDocument': http://msdn.microsoft.com/es-es/library/ms226143(v=vs.80).aspx

    De todos modos, si nos dices la versión (.NET + CR) tal vez te podamos ayudar mejor.


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    martes, 1 de febrero de 2011 8:37
  • :-)
    Hola Leandro,

    Estoy de acuerdo en no conectar un report directamente a la BD (a menos que uses un SP o user function), pero ¿porque aconsejas pasar un DataSet tipado? ¿Sabes lo que 'pesa' un dataset tipado? :-(

    Precisamente un dataset tipado es algo que NUNCA aconsejaría usar, a menos que no quedase otra opción... y aún así me lo pensaría mucho. En las últimas versiones de CR tienes otras alternativas mucho mejores, como pasar un IEnumerable<T>.

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    martes, 1 de febrero de 2011 8:41
  • hola Lluis

    En realidad no es que acoseje usar este tipo de dataset tipados, sino que Crystal lo require para definir la estructura de informacion del reporte (o sea en el Filed Explorer muestra los campos definidos en el dataset tipado), con un dataset sin tipo no puede definir en el reporte los campos vas a usaras

    Basicamente por eso lo recomiendo, para lograr el uso de un reporte indiferente a la db, lo cual siempre lo he visto por medio de dataset tipados, o al menos es hasta donde conozco, puede que existan tecnicas que puedan evitarlo, si las hay no las he visto, si las conoces encantado que me las comentes asi aprendemos todos, incluido yo.

    No he probado usar Crystal con una lista de IEnumerable generica, tienes algun ejemplo que muestre como seleccinar esta lista desde Crystal ?

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 1 de febrero de 2011 11:34
  • Que tal Luis pues gracias por tu respuesta. Y la versión que uso es VS2008 y la versión de CR que uso es la que viene con este mismo. No me he puesto a usar el CR por separado del instalador que da el mismo VS. Estoy checando ambos ejemplos y espero que se me facilite alguno y en caso de alguna duda...comento...

    Muchas gracias !


    Renato Díaz Nayarit, México
    martes, 1 de febrero de 2011 16:53
  • :-)
    Ok, en ese caso debería bastarte con lo que te comentaba antes:

    [...] 'SetParameterValue' de la clase 'ReportDocument': http://msdn.microsoft.com/es-es/library/ms226143(v=vs.80).aspx

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    jueves, 3 de febrero de 2011 8:49
  • Que tal a todos y he logrado resolver una parte de lo que ocupo y bueno continuo con este problema.

    Resolví la parte de poder enviar un solo parámetro haciendolo de esta manera:

    ParameterField ParaFie = new ParameterField();
                    ParameterFields ParaFis = new ParameterFields();
                    ParameterDiscreteValue ParaDis = new ParameterDiscreteValue();

                    ParaFie.ParameterFieldName = "Contrarecibo";
                    ParaDis.Value = Convert.ToInt32(Contrarecibo);
                    ParaFie.CurrentValues.Add(ParaDis);
                    ParaFis.Add(ParaFie);
                    //+++++++++++
                    crystalReportViewer1.ParameterFieldInfo = ParaFis;

    En la cual logro pasar un parámetro al reporte. Pero si quisiera pasar más parámetros que es lo que ocupo al repetir lo anterior por cada parámetro me muestra sólo el último como en este caso:

    ParameterField PFDesde = new ParameterField();
                ParameterFields PFSDesde = new ParameterFields();
                ParameterDiscreteValue PDDesde = new ParameterDiscreteValue();

                PFDesde.ParameterFieldName = "Desde";
                PDDesde.Value = desde;
                PFDesde.CurrentValues.Add(PDDesde);
                PFSDesde.Add(PFDesde);
                //+++++++++++++++++++++++++++++++++++++
               
                ParameterField PFHasta = new ParameterField();
                ParameterFields PFSHasta = new ParameterFields();
                ParameterDiscreteValue PDHasta = new ParameterDiscreteValue();

                PFHasta.ParameterFieldName = "Hasta";
                PDHasta.Value = hasta;
                PFHasta.CurrentValues.Add(PDHasta);
                PFSHasta.Add(PFHasta);

    Aquí me gustaría poder pasarle dos parámetros que serían fecha desde y fecha hasta y pues me toma la última nada más que sería Hasta.

    Como puedo enviar múltiples parámetros a crystal...todavía sigo con esto.

    Muchas gracias sigo checando.


    Renato Díaz Nayarit, México
    miércoles, 9 de febrero de 2011 9:18
  • :-)
    Hola de nuevo,

    ¿No te va bien el método SetParameterValue?

    [...] 'SetParameterValue' de la clase 'ReportDocument': http://msdn.microsoft.com/es-es/library/ms226143(v=vs.80).aspx

    Te aconsejo que lo pruebes en lugar de lo que estás haciendo, y me cuentas...


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    miércoles, 9 de febrero de 2011 10:52
  • Que tal Luis pues he visto tu enlace e intenté implementarlo pero como que le falta definir algunas cosas a a esa ayuda porque a la hora que quiero hacer lo que dice allí no me arroja nada más que de la manera que comento arriba que me funcionó con un parámetro. Si tienes algún ejemplo de como enviar 2 ó múltiples parámetros a un reporte en crystal reports te lo agradecería  mucho.

    Muchas gracias.


    Renato Díaz Nayarit, México
    miércoles, 9 de febrero de 2011 16:26