miércoles, 5 de mayo de 2010

Crystal Reports – Parameters – Como asignarlos desde código .net

 

Introducción


Un problema frecuente cuando se usa Crystal Reports es el pasaje de información por medio de parámetros al reporte.

El uso de parámetros es un aspecto importante para la creación de reportes, y suele suceder que no es tan intuitiva, ni directa la forma en como se debe programar esta funcionalidad.

 

Definición del parámetro en Crystal


En este ejemplo se usara el parámetro como filtro de los datos del reporte, por lo tanto se creara en el mismo momento en que se define la información.

Para esto se usara la opción “DataBase Expert”:

En el cuadro de dialogo que se despliega, se deber crear una nueva conexión a la base de datos Access usada en el reporte:

Haciendo uso en este cuadro, no directamente la tabla mostrada, sino la opción “Add Command”, la cual permitirá definir una consulta personalizada.

Es por eso que desplegara el cuadro:

 

Y se definirá un parámetro mediante la opción de la derecha.

Solo queda definir la consulta, haciendo uso del parámetro:

Seguramente cuando se acepte el dialogo, mostrara el mensaje pidiendo el ingreso de un valor al parámetro creado, se puede ingresar un valor cualquiera, o simplemente aceptar.

En cualquier momento la consulta escrita podrá ser modificada.

Luego de arrastrar los campos al diseñador del Crystal, podría visualizarse algo como lo siguiente:

En el “Field Explorer” se puede inspeccionar tanto los campos de la consulta, como los parámetros definidos para el reporte.

 

Pasaje de parámetros desde código


Al momento de ejecutar la aplicación será necesario pasarle al reporte desde el código el filtro que se ha definido, sino se hace seguramente el propio Crystal desplegara un cuadro pidiendo el ingreso de un valor.

En el siguiente código se muestra como llevar a cabo esta operación:

 

private void Form1_Load(object sender, EventArgs e)
{
          
		  //
          // Creo el parametro y asigno el nombre
          //
          ParameterField param = new ParameterField();
          param.ParameterFieldName = "CargoParam";

          //
          // creo el valor que se asignara al parametro
          //
          ParameterDiscreteValue discreteValue = new ParameterDiscreteValue();
          discreteValue.Value = "Developer";
          param.CurrentValues.Add(discreteValue);

          //
          // Asigno el paramametro a la coleccion
          //
          ParameterFields paramFiels = new ParameterFields();
          paramFiels.Add(param);

          //
          // Asigno la coleccion de parametros al Crystal Viewer
          //
          crystalReportViewer1.ParameterFieldInfo = paramFiels;

          //
          // Creo la instancia del reporte
          //
		  crListado report = new crListado();

          //
          // Cambio el path de la base de datos
          //
		  string rutadb = Path.Combine(Application.StartupPath, "TestDb.mdb");
		  report.DataSourceConnections[0].SetConnection("", rutadb, false);

          //
          // Asigno el reporte a visor
          //
		  crystalReportViewer1.ReportSource = report;

}

 

[C#]
[VB.NET]

204 comentarios:

  1. ¡Hola Leandro! He tenido un problema con la creación de parametros desde que he instalado a Crystal 2010 hace 2 semanas. Ocurre que anteriormente el hacia la insercion de los parametros automaticamente y ahora no lo hace.
    Solo logré exito despues de ver su matéria y la asignacion del formato obligatório '{?param}'.
    Gracias por su ayuda!

    Wagner Graciano
    gracianow@msn.com

    ResponderEliminar
  2. hola Wagner

    Me alegro que haya resultado de utilidad el articulo.

    saludos

    ResponderEliminar
  3. Hola Leandro.. ya estoy un poco cansada tratando de hacer un reporte, sobre todo porque es muy 'sencillo', pero no veo la data.. estoy llenando un dataset con un dataadapter, y pasando ese array al form donde esta un reportviewer que a su vez tiene un report con un dataset asociado, me muestra las lineas vacias, no me muestra los datos.. El ds tiene datos lo comprobe asi:
    int a= ds.Tables[0].Rows.Count;
    ds.Tables[0].Rows[0].ItemArray;

    Aqui agrego el dataset con datos al del reporte:
    dt_SobresDataTableBindingSource.DataSource = a.Tables[0];

    Yo no especifico los nombres de las columnas en ninguno de los ds sera eso? hice una prueba y no me muestra ni las lineas vacias!

    Muchas Gracias!

    ResponderEliminar
  4. hola Pierina

    El que los nombres de los campos no coincidan puede ser uan de las causas del problema, por eso recomiendo que uses dataset tipados cuando trabajes con reportes asi evitas este tipo de problemas

    El dataset tipado sirve para definir la estructura de campos del reporte y al mismo tiempo lo puedes cargar con los registros provenientes de la query que uses.

    Pero recuerda que los campos del SELECT que definas deben coincidor con los del dataset tipado y por ende con los del reporte

    saludos

    ResponderEliminar
  5. Hola Leandro, Gracias, pero al parecer no es eso. Entiendo por dataset tipado, al objeto que se agrega al proyecto físicamente y no creado por código, ese objeto es el que está agregado al proyecto, y el que lleno desde la clase, yo lo intente pasándolo por parámetro entre la clase y el form donde esta el reporte, y lo intente directo, porque si lo uso en la clase debería tener los datos sin tener que actualizarlo? Pero solo veo las lineas sin los datos.. Aca:
    dtSobresBindingSource.DataSource = a.Tables[0]; Lo estoy pasando por parámetros. Antes de actualizar el reporte, temo que si lo paso normal por abrir la instancia del dataset: Sobres s = new Sobres(); en el form, no tenga los datos... Como veras no entiendo mucho sobre esto, y he leído pero se supone que deberían verse.. Alguna otra idea o info que pueda leer? Muchas Gracias!

    ResponderEliminar
  6. Gracias!! Ya veo los datos.. puse todo en el form, y actualice los nombres en el reporte, y funcionó..

    Saludos..

    ResponderEliminar
  7. Hola, estoy haciendo un report con el crystal report de visual studio y me ha surgido un problema.
    Tengo un report principal que tiene un subreport secundario.
    Hasta aqui, me funciona perfectamente.

    El problema surge al intentar insertar un report en el subreport secundario.
    Un ejemplo sería, una persona ha pasado por varios trabajos. El report secundario sería cada empresa y el subreport del report secundario, sería lo que ha estado haciendo en cada empresa.

    En diseño lo tengo hecho, pero al intentar alimentarlo por código me dice que no se puede hacer.

    Conoces alguna otra manera de hacerlo.

    Un saludo, Eduardo.

    ResponderEliminar
  8. hola Eduardo

    La verdad nunca llegue a tantos niveles en subreportes, no estoy seguro que tan factible y conveniente sea tener tantos niveles en un reporte.

    Porque el subreporte esta conformado por los datos de la empresa en un grupo (seccion del subreporte) y lo que hace en cada empresa el detalle, pero seria un solo subreporte, no requieres crear subreporte anidados.

    O sea si crear grupos y usas la seccion de detalle deberias poder lograr el mismo efecto.

    saludos

    ResponderEliminar
  9. Hola y gracias por responder. Ya lo tengo solucionado. Al final he hecho un report principal donde coloco los datos de la persona. Después en un grupo, tengo los datos de la empresa y en la sección de detalles, coloco las distintas actividades que corresponden a diferentes subinformes.
    Un saludo.

    ResponderEliminar
  10. hola como estas, una duda,, tengo problemas con la ruta
    Dim rutadb As String = Path.Combine(Application.StartupPath, "TestDb.mdb")
    report.DataSourceConnections(0).SetConnection("", rutadb, False)

    yo estoy utilizando un ODBC para conectarme a la base de datos, alguna sugerencia,,te lo agradezco buen dia

    ResponderEliminar
  11. hola j@vier

    Disculpa la demora en la respuesta.

    El tema es que si usas ODBC no deberias por codigo cambiar anda, si la ruta es distinta lo cambias directo en el DSN que has creado en windows, ya que el reporte solo usa el nombre del mismo.

    A donde apunto es que irias a esta opcion: imagen
    y alli es dodne cambias la ruta.

    saludos

    ResponderEliminar
  12. Que tal Leandro gracias por tu aporte. Pero que pasa si quisiera pasarle a mi reporte múltiples parámetros ?

    ResponderEliminar
  13. Otra cosa, no sé si tendrás algún manual para hacer lo de subreportes con crystal reports para VS2008 SP1

    ResponderEliminar
  14. hola renato

    Con respecto al manual por ahi este link ayude:

    Crystal Reports Para Visual Studio.net Visual Basic.net Eidos

    Con respecto a los parametros multiples, imagino apuntas a algo como esto

    Passing Multiple Parameters to a Crystal Report Programmatically

    saludos

    ResponderEliminar
  15. HOla buenos dias, mi problema es el paso de parametros tipo fecha, como deberia estar la configuracion del parametro en crystal si fecha o fecha y hora, a la hora de pasar el parametro que tipo de dato debo pasar DateTime y en la base de datos que es preferible.

    Cuando intento generar el reporte me dice que no son valores correctos de parametros no se com hacer, llevo dias trabajando en eso y nada si saben de algo se los agradezco

    ResponderEliminar
  16. hola Sindy

    Realice una prueba y pude sin problema pasar como parametro un tipo de dato fecha,
    en el reporte defini un parametro del tipo Fecha y Hora.

    y luego en el codigo use:

    CrystalReport1 cr1 = new CrystalReport1();


    ParameterField param = new ParameterField();
    param.ParameterFieldName = "param1";
    param.ParameterValueType = ParameterValueKind.DateTimeParameter;

    ParameterDiscreteValue discreteValue = new ParameterDiscreteValue();
    discreteValue.Value = DateTime.Now;
    param.CurrentValues.Add(discreteValue);


    ParameterFields paramFiels = new ParameterFields();
    paramFiels.Add(param);


    crystalReportViewer1.ParameterFieldInfo = paramFiels;
    crystalReportViewer1.ReportSource = cr1;



    Como veras al parametro le pase el Datetime.Now, para asignar la fecha y la hora
    Entonces como tenia el parametro puesto en el diseñador del reporte al visualizar el reporte en pantalla pude ver el valor sin problemas

    Algo que por ahi te podria estar faltando es esta linea

    param.ParameterValueType = ParameterValueKind.DateTimeParameter;

    para indicar el tipo de del valor que le pasas


    saludos

    ResponderEliminar
  17. Me parece una muy buena ayuda, estoy buscando informacion sobre este tema, hare pruebas con sus ejemplos gracias por esta ayuda valios... sigan asi porfavor

    ResponderEliminar
  18. gracias capo, estaba buscando esto !!!

    ResponderEliminar
  19. Me fue de mucha ayuda, muchas gracias.....

    ResponderEliminar
  20. Excelente tutorial Leandro, pero lamentablemente se me complica cuando debo insertar un subreporte y pasarle el parametro, tienes alguna pista?

    de antemano gracias

    ResponderEliminar
  21. hola cmujica

    si creas dataset relacionados estos podrias usarlos directamente en subreportes

    hasta donde se no haria falta definir el parametro del subreporte, porque la relacion de informacion dentro del dataset tipado ya relaciona la informacion

    saludos

    ResponderEliminar
  22. Hola estoy haciendo un sistema en vs 2008 en Cshart y quiero sacar un reporte con Cristal Report pero no se como pasarle un parametro yo, cree un dataset y a este le adñadi un query con un filtro pero no se como hacer mas nada tengo algunos manuales pero no he podido resolver mi problema

    ResponderEliminar
  23. hola yusi

    pero el problemas son los parametros o es la asignacion al reporte del dataset tipado ?

    quizas podrias ver:

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

    saludos

    ResponderEliminar
  24. Hola!, por favor necesito de tu ayuda a ver si puedo resolver el problema que tengo,
    Estoy haciendo un proyecto en vb.net 2010, con SQL R2 2008 y Crystal report, tengo un procedimiento en Sql que le envió parámetros desde Crystal, he pasado varios parámetros y como tu me dices y me funcionan, pero cuando paso Fecha me da un error
    en mensaje que me sale es el siguiente:
    Detalles:Código de Error ADO:Ox
    Descripción: Sintaxis incorrecta cerca de la palabra clave 'CONVERT'.
    Le he colocado .ParameterValueType = ParameterValueKind.DateParameter,
    he formateado la fecha a yyyy/MM/dd.
    Me gustaría que me ayudaras tengo varios días con este problema y nada.
    Muchas gracias de antemano!!
    Estado de SQL:42000

    ResponderEliminar
  25. hola Adrian

    estas conectando el reporte directamente a la base de datos ?
    o usas dataset tipado para asignmar la info al reporte

    porque no me explcio como un CONVERT de t-sql podria fallar con un parametro de crystal

    o es la query que defines la que esta fallando ?

    saludos

    ResponderEliminar
  26. Hola Leandro!, tengo conectado el reporte directamente a SQL por Crystal, por codigo de .net cambio la ruta de trabajo.
    Hasta los momento me di cuenta que al parecer desde Visual a Crystal en los parametros tipo Fecha lo pasa como Cadena de caracteres y Crystal trata de ejecutar el procedimiento de SQL de la siguiente forma:
    "Execute DB.Procedmiento 1, CONVERT(20120301 Date 110), N'TIPO'".

    Abra una manera en Crystal que pueda cambiar el tipo de Parametro?, o como seria el procedimiento para pasar la fecha desde VB.net
    Gracias de antemano por tu Ayuda!.

    ResponderEliminar
  27. hola Adrian

    entonces queire decir que el reporte crystal si se conecta directo a un procedure

    por lo visto se llama "Procedmiento"
    pero el CONVERT que alli quiere aplicar es incorrecto

    CAST y CONVERT (Transact-SQL)

    no has evaluado usar un dataset tipado para definir el el origen de datos del reporte, esto suele evitar problemas con las conexiones directas a la db

    saludos

    ResponderEliminar
  28. Hola Leandro!, como te he explicado antes es que el procedimiento esta bien, de hecho te dije que ejecuto con otros parametros que no sean fecha y funciona correctamente, lo del CONVERT no lo tengo yo en la consulta, si yo ejecuto en modo de diseño desde .NET en "vista previa de Informe principal", todo funciona bien!, de hecho, cambio la fechas y ejecuta correctamente todo, pero cuando ejecuto el proyecto y voy a el reporte con el parametro de fecha, me da el error.
    Es como que entre .NET y Crystal cambiar la sentencia para SQL, como te explique en mensaje anterior. He probado cambiado en el procedimiento el parametro de tipo Fecha a Tipo VChar y me funciona, me gustaría pasarlo como debe ser, Tipo Fecha!!.
    Disculpa por tanta molestias, pero como te he dicho tengo varios días averiguando que es lo que esta malo y no consigo!. Gracias!

    ResponderEliminar
  29. Leandro muchas gracias por el aporte. Muy completo, claro y efectivo. Gracias!

    Saludos!

    ResponderEliminar
  30. Hola Leandro!!, POR FIN!!, ya di con el problema!!, es que el proyecto lo empece con Vs.net 2008 y con Crystal Version 10.5.37, en este Vs.net y Crystal trabajan con Framework 3.5, yo pase el proyecto a VS.net 2010 y no quise actualizar el Crystal, para seguir trabajando con el Framework 3.5, ya que el de VS.net 2010 y el Crystal de version 13.0.2 trabaja con Framework 4.0.
    Ahora el nuevo problema que surge es que no quiero cambiar a Framework 4.0, sabes de una version de Crystal trabaje con Framework 3.5, quesea mas actual que la version 10.5.37?, existe version 11 o 12 de Crystal que trabajen con Framework 3.5?.
    Muchas gracias por tu ayuda!

    ResponderEliminar
  31. hola Adrian

    hay todo un tema con crystal y las versiones integradas, mas que nada porque a aprtir de la version 2010 este ya no se incluye con el VS, sino que lo descargas por separado

    dudo que la version que usaste en VS2008 este disponible para 2010, como comente al ser ahora un prosucto separado la cosa cambio

    [VS2010] Que pasa Con Crystal Reports y Visual Studio 2010

    Podrias crear un proyecto en VS2010 con .net 3.5 pero cambiar la version de crystal que se integra a la 2010, esto deberia funcionar, lo que cambias solo es la version de crystal no del framework de tu desarollo

    saludos

    ResponderEliminar
  32. hola leandro
    espero me puedas ayudar
    como puedo mostrar por semanas en crystal report
    es decir del 1 al 7 de abril en la columna fecha y en la columna total del dia mostrar el total de esos dias
    espero me puedas ayudar
    fecha total dia
    1 abril 200
    2 abril 100
    3 abril 100
    4 abril 100
    5 abril 100
    6 abril 100
    7 abril 100
    total semana 800
    asi semana por semana de cada mes
    ya muestro todo pero quiero q sea por semana los totales

    ResponderEliminar
  33. como mostrar en crystal report
    totales por semana
    es decir
    abril
    1 100
    2 100
    3 100
    4 100
    5 100
    6 100
    7 100
    total sem 700
    8 100
    9 100
    ...
    y asi por todo el mes
    como puedo hacerle espero q me puedas ayudar por favor

    ResponderEliminar
  34. hola dash

    el tema es que esto depende como tengas definida la estructura de los datos

    por lo general esto deberias resolverlo a nivel de la query con que defines lso datos del reporte, usando algun SELECT con un GROUP BY, so similar que adecuen los datos para ser mostrados

    se que crystal tiene control de pivot, como es la de Cross-table

    imagen

    pero primero deberias ver si la estructura de datos permite obtener la info que quieres mostrar

    saludos

    ResponderEliminar
  35. Hola Leandro, fijate q tengo un pequeño problema, estoy tratando de crear un reporte a traves de un procedimiento almacenado que contiene SQL dinamico por lo cual, el unico parametro de mi procedimiento es @condicion.
    Pero me manda el siguiente error
    No se pudo recuperar los datos de la base de datos.
    Detalles: 42000:[Microsoft][ODBC SQL Server Driver][SQL Server]
    Sintaxis incorrecta cerca de ' AND Apellido LIKE 'Burgos%''.
    [Código del proveedor de base de datos:102]

    A como ya te habrás dado cuenta la cadena ' AND Apellido LIKE 'Burgos%'' es el valor de mi parametro.

    Valga aclarar que si ejecuto el procedimiento almacenado directamente en SQL Server me retorna los valores esperados.

    Espero que me puedas ayudar.

    Utilizo Visual Studio Professional 2010 y SQL Server 2008 R2. El crystal report es la versión 13

    ResponderEliminar
  36. hola JT

    bueno la verdad no sabria decir que podra ser sin analizar el procedure completo

    pero me pregunto esa condicion comienza con AND pero eso quiere decir que antes de esta hay otra condicion existente no ?

    porque sino la hay ese AND no deberia estar

    saludos

    ResponderEliminar
  37. Hola Leandro, gracias por responder. El código del procedimiento es el siguiente:

    CREATE PROCEDURE dbo.sp_rptPersona
    @condicion NVARCHAR(3000)
    AS
    DECLARE @consulta NVARCHAR(1000),
    @sSQL NVARCHAR(4000)

    SET @consulta = 'SELECT nCedula, nombres, Apellido, sexo, direccion, telefono, estadoCivil, fechaNacimiento
    FROM dbo.Persona WHERE 1=1 '

    SET @sSQL = @consulta + @condicion

    EXEC sp_executesql @sSQL
    GO

    Entonces, la idea es la siguiente, en la interfaz gráfica el usuario selecciona los parámetros que él considere para generar el reporte y se va creando la cadena complementaria de la consulta de sql, cuyo resultado final puede ser ' AND Apellido LIKE ''Burgos%'''

    Si yo ejecuto el procedimiento almacenado directamente en sql pasando como parámetro la cadena resultante de la interfaz gráfica, se muestran los resultados esperados. Sin embargo, cuando lo envío a crystal me muestra el error que te he detallado.

    Ignoro el porque del error si el procedimiento y los parámetros están buenos. Sospecho que es en crystal pero he buscado información y nada que encuentro, espero que me puedas ayudar.

    ResponderEliminar
  38. Hola Leandro, luego de muchos intentos he resuelto el problema.

    Les dejo la solución por si a alguien se le presenta el mismo inconveniente.

    Me percaté que como el valor enviado desde visual a sql a traves de crystal llegaba al procedimiento a traves de una variable (en mi caso @condicion) excluí varias comillas simples para que la cadena final quedara como que la estaba escribiendo directamente en sql (sin el sql dinámico) y me quedó de la siguiente manera:

    AND Apellido LIKE 'Burgos%'

    Listo, funcionó. Lo cual significa que la cadena que tengo que generar en visual no debe de llevar muchas comillas simples. Si el usuario selecciona otro parámetro, por ejemplo todas las mujeres cuyo apellido inicie con L, entonces quedaría así:

    AND Apellido LIKE 'L%' AND sexo LIKE 'F%'

    Mi error fue que la cadena la generé como que se iba a ejecutar el procedimiento directamente en sql sin tomar en cuenta al intermediario (crystal)

    Gracias por tomarte un tiempo a tratar de resolver mi problema.

    Espero que les sirva.

    ResponderEliminar
  39. Leandro,
    justo lo que estaba buscando desde hace ya 5 días para aplicarlo a mi proyecto
    Muchas Gracias

    ResponderEliminar
  40. Hola Leandro soy yo otra vez!, vengo por tu ayuda como siempre!. La pregunta es, hay un forma de que yo pueda cambiar por código en vb.net los titulo de un reporte o mejor dicho, hay alguna forma de que yo pueda cambiar el idioma del reporte?.
    Gracias de antemano!!.

    ResponderEliminar
  41. hola Adrian

    podrias definri el titulo con un parametro y pasarlo desde codigo

    de esta forma lo haces dinamico

    lo del idioma es otra cosa distinta ya que imagino serian muchos los parametros, quizas deberias crear dos reportes diferentes uno para cada idioma y cargar segun corresponda

    sino se podria poner codigo en los label del reporte para que segun un parametro que definas en el reporte indicar en que idioma mostrarlo, pero por codigo pones fijo los textbox

    saludos

    ResponderEliminar
  42. Hola leandro, espero puedas ayudarme, tengo una aplicacion donde tengo varios reportes con crystal reports del visual studio 2005. El problema es que lo tengo en un servidor con win server 2003 y sql 2000 y me funcionan correctamente.
    Pero al cambiar la aplicacion a un servidor con win server 2008 y sql 2008 me marca error al abrir los reportes, el error lo manda en la siguiente linea
    Me.CrystalReportViewer1.ParameterFieldInfo.Item(0).CurrentValues.AddValue(Session("fecha")) que es donde le mando los parametros al reporte.

    Espero tu comentario, gracias de ante mano.

    ResponderEliminar
  43. hola Alejandra

    en algun momento realizaste una conversion de version de crystal, o sea cambiaste quizas de Visual Studio?

    cual seria el mensaje de error que obtienes ?

    veo que alli usas Session, o sea quiere decir que es un desarrollo web, no ?
    si es asi has validado que esa session se asigne correctamente
    o sea si haces

    If Session("fecha") Is Nothing Then
    lblMensaje = "la fecha es nula"
    End If

    si haces eso pasa por nula la fecha

    saludos

    ResponderEliminar
  44. el visual es el mismo 2005, las versiones que se cambiaron son las del sql a 2008 el IIS que ahora es el ISS 7.
    La variable de sesion si lleva valor, ya verifique eso.

    El error:
    Error in File C:\Windows\TEMP\mtto {3F6CB254-2002-4313-A6F4-D573E597538F}.rpt:
    Access to report file denied. Another program may be using it.

    Detalles de la excepción: System.Runtime.InteropServices.COMException: Error in File C:\Windows\TEMP\mtto {3F6CB254-2002-4313-A6F4-D573E597538F}.rpt:
    Access to report file denied. Another program may be using it.

    Línea 110: Me.CrystalReportViewer1.ParameterFieldInfo.Item(0).CurrentValues.AddValue(Session("anio"))

    ese error me manda en algunas, pero en otros simplemente no m muestra nada de informacion, sin mandar error

    ResponderEliminar
  45. hola Alejandra

    la aplicacion es web no ? imagino que usas un web site como proyecto, estyos siempre dan problemas
    aunque ese error de crystal esta rato

    has probado darle acceso a la carpeta temp de windows al usuario ASPNET o al IUSR_NombrePC

    esto son los que usa el iis
    es mas podrias darle permisno a everyone para escritura solo para descartar si viene por aquyi el tema

    saludos

    ResponderEliminar
  46. Amigo Leandro, tengo este problema cuando llamo un reporte CR desde un link...
    http://websrv01/reportes/noproductivo/realizados.rpt?user0=prn&password0=prn&prompt0='INFORMES'

    El tema que este reporte le agregue un subreporte y ahora me pide siempre el usuario y password del subreporte, hay manera de ponerlo en el link?
    Gracias

    Leonardo Escudero (Argentina)

    ResponderEliminar
  47. hola Leomasterxxi

    como es eso de llamar un reporte desde un link, o sea es un desarrollo web y en una pagina tienes el crystalreportviewer para cargar alli el reporte

    si pide usuario es porque esta queriendo conectarse directamente a la db, lo que no has mencionado es como conectas el reporte a los datos

    saludos

    ResponderEliminar
  48. Si amigo perdon, pequeño detalle, si llamo desde una aplicacion web, y uso crystalviewer, el reporte usa odbc que esta en el servidor donde esta el reporte, como veras en el link yo envio el usuario y pass, que de solo lectura a la base, el reporte andaba bien, pero al ponerle subreporte cuando lo llamo me pide usuario y pass del subreporte, no se como lo puedo enviar en el link...
    Espero me puedas ayudar con este tema.
    Saludos y gracias por responder.

    ResponderEliminar
  49. hola Leomasterxxi

    o sea quiere decir que conectas el reporte directo a la base de datos?

    no has evaluado usar un dataset tipado, con este tendrias mayor control sobre la conexion del reporte al origen de datos

    revisa los articulo que tengo sobre crystal, alli explico como usar un dataset en un reporte

    sino vas a tener que definir el password como explico aqui

    http://social.msdn.microsoft.com/Forums/es/vsrepcrystales/thread/d1a1011d-fe26-402b-954c-236ba1e1f938

    saludos

    ResponderEliminar
  50. Saludos leandro!
    Sabras por casualidad como pasar parametros desde php a crystal report.

    Tengo este comando en crystal que recibe un parametro:


    SELECT
    DISTINCT id_proyecto
    FROM vw_reporte_accidente
    WHERE id_incapacidad = {?incapacidad}


    Y EN PHP ESTO:


    $creport->ParameterFields->GetItemByName("incapacidad")->AddCurrentValue(1);


    espers tengas algun conocimiento. gracias!

    ResponderEliminar
  51. Adrian. Tu problema es porque, seguramente seleccionas SQL Native Client como tu proveedor de vinculo a datos, deberias probar con Microsoft OLE DB Provider for SQL Server.

    ResponderEliminar
  52. Hola Leandro, mira tengo un problema con un reporte de Crystal, en mi reporte hay varias paginas, pero al navegar entre ellas ya no me muestra datos solo los de la primera pagina y si debe de haber mas datos, esto solo me pasa con este reporte ya que tengo otros con varias paginas y en esos reportes si puedo ver todas las paginas una por una.

    Gracias de ante mano. Saludos.

    ResponderEliminar
  53. hola Alex

    has validado los datos que proporcionas al reporte?
    o sea si quizas los campos que muestras estan vacios, quizas se genere el datos y las paginas y no ves nada porque el campo de esos registros no tienen nada

    valida tambien las secciones (principalmente los footer de estas)recuerda poner en supress (o reducir el alto) las que no uses porque mas ala que no tengan nada en el reporte ocupan lugar y pueden hacer que genere paginas nuevas

    saludos

    ResponderEliminar
  54. Hola Leandro, ya resolvi el problema muchas gracias, era que al crystalreportviewer tenia asignado un parametro, y se lo quite y ya m muestra toda la informacion del reporte, muchas gracias!!!!!!

    Saludos.

    ResponderEliminar
  55. Genio Total! me fue de mucha utilidad! gracias

    ResponderEliminar
  56. Hola Leandro!!
    Tengo un pequeño problema relacionado con los parametros que se envian a un CrystalReport, se supone que ya tiene el parametro que se enviara toma los datos del reporte pero al momento de enviar a imprimir el reporte marca que no se a asignado el valor @Folio (este es el parametro) y muestra solo el formato del reporte...espero que me puedas ayudar te dejo mi msn por si cuenta con alguna respuesta... karen10915@hotmail.com
    Gracias :D !!!!

    ResponderEliminar
  57. hola Karen

    estas seguro que ese es un parametreo de Crystal, porque un @algo pareciera un parametro de ado.net

    estas vinculando el reporte a un dataset tipado ? porque si es asi recuerda aplciar lso filtros en la query y no en el reporte

    saludos

    ResponderEliminar
  58. Reporte con columnas dinámicas en visual

    ResponderEliminar
  59. Buen dia Leandro, mi consulta es la siguiente:
    hice una consulta en SQL con pivot dinamico para las columnas y todo bien, pero cuando quiero hacerlo en cristal me da un error:

    No se encontraron uno o mas campos en el conjunto de resultados. Use comprobar base de datos para actualizar el informe.

    como podria hacer para resolver esto, ya que no quiero usar tablas de referencia cruzada en cristal report.

    Gracias por la ayuda que pueda brindarme.

    ResponderEliminar
  60. hola EZ

    estas vinculando el reporte directo a la base de datos ?

    en crystal tienes informes estilo pivot, pero no es que usas pivot en la query, sino que los datos son una query simple y desde crystal redefines la visualizacion

    a donde voy que es que si defines un pivot en la query los nombres de los campops cambia y esto crystal no puede reconocerlo

    si algo que se caracteriza crystal es por ser estatico en el diseño de los datos que puede trabajar, los nombres de los campos no pueden variar

    saludos

    ResponderEliminar
  61. Hola Leandro, gracias por sus comentarios.
    Cuando habla de informes estilo pivot a que se refiere??

    saludos.

    ResponderEliminar
  62. Gracias por su ayuda, ya logre realizar el reporte.


    ResponderEliminar
  63. Buen día, logre realizar el reporte usando Cross Tabla y todo bien.

    Sin embargo tengo una consulta que realizarle:

    --> se puede usar la propiedad puede crecer para los campos que muestra el reporte, si no es así como se podría resolver, ya que esta propiedad me sale desabilitada.

    --> Esta tabla de referencia cruzada solo se puede insertar en el encabezado del informe?, En el encabezado del informe no me permitió insertar una tabla de referencia cruzada.

    a espera de sus comentarios le saludo.

    ResponderEliminar
  64. hola EZ

    la verdad no sabria decirte conozco las Cross Table de crystal pero solo als he usado uan sola vez para un reporte simple

    no creo que sea una tabla que se inserte en la cabezara, salvo si usas un subreporte

    saludos

    ResponderEliminar
  65. Hola Leandro, gracias por sus comentarios.

    saludos.

    ResponderEliminar
  66. BUENAS LEANDRO, SIEMPRE VISITO TUS BLOGS TENGO UN PROBLEMA NO SE SI ME PUEDES AYUDAR, TENGO UN REPORTE CRYSTAL CON VARIOS SUBREPORTES CUANDO LOS PRUEBO CON UNA CONEXION A UNA BASE DE DATOS EN UN SERVIDOR SETEANDOLO EN EL REPORTE PARA VER LA VISTA PREVIA Y EJECUTANDO EL PROYECTO SALE NORMAL, DESPUES CAMBIO LA CADENA DE CONEXION YA QUE EL REPORTE Y LOS SUBREPORTES VAN A LA BASE DE DATOS CONECTADA PARA SACAR INFORMACION DESDE LA APLICACION NO SALE INFORMACION EN ALGUNOS SUB REPORTES, SI VUELVO A SETEAR LA CONEXION A LA BASE DE DATOS EN LA VISTA PREVIA Y AL EJECUTAR EL PROYECTO SI SALE NOSE SI ME PUEDES AYUDAR YA QUE NO DOY CON EL PROBLEMA PENSE QUE AL VINCULAR EL SUBREPORTE HABIA PUESTO LA CONEXION ACTUAL QUE ESTA PARA ELEGIR PERO NO LE PASO EL CAMPO DEL REPORTE, ESPERO ME PUEDAS AYUDAR SALUDOS.

    ResponderEliminar
  67. Buenas noches Leandro, una ves mas le tengo una consulta, espero me pueda ayudar.

    Estoy diseñando un reporte en cristal report para visual 2010, resulta que tengo una lista de 47 items de un catalogo con otra columna que se llama cantidad:

    Descripcion_Catalogo Cantidad
    Sillas 50

    Lo que yo quiero hacer es armas tres columnas de de 16 elementos cada grupo, para no mostrar todo de corrido.

    Si usted sabe de alguna forma en que lo pudiera hacer, le agradeceria mucho me la hiciera llegar.

    de antemano gracias por su colaboración.

    ResponderEliminar
  68. hola EZ

    lo unico que se me ocurre es que se podrian armar subreportes

    entonces los datos partirlo a la mitad y asignar cada grupo de datos a cada subreporte para que lo muestre listado

    se supone que los subreportes deben estar uno al lado del otro

    saludos

    ResponderEliminar
  69. Buenos Dias don Leandro,

    una vez mas aqui consultandole, la situación es la siguiente: tengo un reporte elaborado en cristal report XI, yo quiero que la leyenda me muestre datos diferentes a los del eje de los datos, ya probe la opcion de modificar el texto de la leyenda de un grafico que viene en el Manual de cristal report XI, pero no me funciona.

    espero me pueda ayudar.

    saludos.

    ResponderEliminar
  70. hola EZ

    la verdad no he usado mucho el chart de crystal, fue algo basico que lo use hace tiempo

    he visto cosas como estas

    Tip: How to change the text of Legends in Crystal Reports?

    pero no lo veo simple de implementar

    saludos

    ResponderEliminar
  71. Muchas gracias Leandro.
    Estoy entrando en VB Net (antiguo y terco con VB6) y son este tipo de cositas las que me frenan por días. Tu código funciona perfecto!!

    ResponderEliminar
  72. Buenas Noches Leandro, un placer saludarle, le tengo na consulta,tengo un Proyecto desde visual net, como inicializo el Crista Report desde el inicio de sesion para que al cargar un reporte este no tarde tanto tiempo en mostrase.
    Estoy usando visual 2010 y cristal para vs2010.
    De antemano gracias por sus comentarios.

    ResponderEliminar
  73. hola EZ

    la unica forma que se me ocurre es que crees el ReportDocument en memoria y le asignes los datos al tenes el report codument creado asignarlo al reportview para visualizarlo deberia ser rapido

    saludos

    ResponderEliminar
  74. Buenas Noches, es posible q se exporte un reporte de cristal a word y que si tienen tablas esta se comporten como si hibiesen sido insertadas desde word.

    ResponderEliminar
  75. hola Eliza

    Crystal si exporta a word, ahora el conceto de tablas como tal no esta presente en crystal no veo que exista

    por lo general siempre exporte a excel o pdf, pero lo mas probable es que el reporte en word lo veas de la misam forma en como el diseñador lo muestre

    saludos

    ResponderEliminar
  76. Hola, bueno he leído el post que dejaste y está muy bueno, ahora mi problema es que estoy usando una bd postgresql y lo que quiero hacer es lo siguiente: hacerle una consulta a la bd enviandole por parámetro el dato a ser buscado y si es que no se encuentra que se lance una excepcion, ya tengo la excepcion programada el problema es que no se como hacer eso de la busqueda, osea para que busque dentro de la bd entera el dato ingresado.

    saludos, y gracias de antemano.

    ResponderEliminar
  77. hola Blas

    estas usando el provider de esta db para ado.net


    Npgsql - .Net Data Provider for Postgresql

    porque con este programarias al query similar a como lo harias para cualquier otra db, en la misma pagina hay ejemplo

    saludos

    ResponderEliminar
  78. HOLA NECESITO CREAR UN REPORTE SOBRE ESTADO DE RESULTADO PERO NO LOGRO IDENTIFICAR EL CAMPO , OJALA ME PUEDAN AYUDAR, ADEMAS DE COMO PUEDO FILTRAR POR FECHA

    ResponderEliminar
  79. hola Pamela

    no entendi el tema que no identifica el campo, seria que ne el reporte no puedes arrastrarlo al diseñador?

    estas conectando el reporte a un dataset tipado

    para filtrar por fecha si conectas a un dataset, ese filtro lo realizas desde codigo por medio de ado.net

    saludos

    ResponderEliminar
  80. Hola Leandro como estas?
    Por favor necesito que me ayudes:
    Estoy haciendo un reporte en crystal reports para vs 2010, de la siguiente manera:

    Utilizo SQL SERVER 2005 Y VB.Net,
    Los datos que pongo en el reporte los obtengo con un select que esta dentro de un stored procedure,
    es decir que uso stored procedures para tomar los datos mandandole parametros....

    Todo va muy bien en el desarrollo, que queda excelente...

    Mi problema esta cuando necesito utilizar el servidor de produccion y no el desarrollo para sacar los datos, es decir cambiar el origen de datos....

    para logralo debo cada vez que cambio de servidor cambiar tambien todo, desde la conexion del reporte en tiempo de diseño...


    Puedes indicarme como hacer a traves de codigo esto, de tal forma que envie los parametros de conexion(servidor, bd, user, pass)
    y no tener que cambiar el reporte siempre...

    Utilizo una conexion de tipo oledb(ado)..

    Te agradeceria mucho si me muestras un tutorial que enseñe a realizar esto, o brindarme tu ayuda de alguna forma...

    El objetivo es conectar a distinto servidor....

    Muchas gracias, espero tu respuesta.....

    ResponderEliminar
  81. hola GABRIEL

    imagino por lo que comentas que conectas el repote directo a la base de datos, cuando deberias ahber usado un dataset tipado para evitar estos problemas

    Agregar el código de conexión del informe

    como veras en el link puedes definir la info de conecion del reporte desde codigo

    saludos

    ResponderEliminar
  82. Hola Leandro que tal sabes yo estoy practicando Vb.net 2008 y sqlserver 2005, Tengo una capa llamada Reportes la cual la cree con un tutorial que publicastes ahora ya hice los listados. Pero ahora estoy intentado pasar los parametros para que sqlparameter me tome el valor que paso y la verdad no consigo hacerlo. Si tal vez tienes algún correo electronico al cual te pueda enviar el archivo te lo agradecería =).

    ResponderEliminar
  83. hola

    pero se supone que la asignacion de parametros solo implica asignadr estos a un metodo que luego lo usas en la query que carga el dataset tipado que asignas al reporte

    pero los parametros son soo valores de un metodo no deberia tener problemas

    saludos

    ResponderEliminar
  84. Hola Leandro dejame algún email para que me indiques si lo que hice esta bien. Ya lo pude resolver le pase el valor del text.
    Saludos

    ResponderEliminar
  85. hola

    mi contacto esta en als opciones de perfil, es el mail de gmail

    asignaste como text la propiedad del sqlcommand

    saludos

    ResponderEliminar
  86. Buenos días,

    Ayer ne surgio un problema al enviar un reporte a imprimir.
    Sale el cuadro de OLE DB (ADO)donde hay que seleccionar un proveedor de la lista o un archivo de vinculo de datos.

    Si le doy finalizar igual manda a imprimir, desconozco entonces que hace que esto suceda ya que en unos equipo funciona y en otros no.

    Agradezco su ayuda.

    Saray Galeano

    ResponderEliminar
  87. hola Saray

    el reporte se conecta directo a la db, o usas un dataset tipodo que cargas desde tu codigo y los asignas como datasource del reporte ?

    es raro eso que dices de ADO, pero la verdad con Crystal no me extrañaria, por eso es que los reportes que realizo nunca los conecto directo a la db, porque es para problemas, sino que cargo una lista o dataset y se lo asigno, asi puedo controlar en todo momento que datos va a mostrar

    saludos

    ResponderEliminar
  88. Hola leandro yo estoy haciendo un reporte pero estoy utilizando SP que recibe 2 parametros.
    este es mi codigo pero solo pasa un parametro y no los dos que hago??? ayudame porfavor.
    MI CODIGO:
    Dim pvValoresParametros As New ParameterValues()
    'Dim personal As New ParameterDiscreteValue()
    'Dim personal2 As New ParameterDiscreteValue()
    ''instanciamos un objeto del reporte
    'Dim crearreport As New ReporteJerarquia()
    'personal.Value = CInt(TextBox1.Text)
    'personal2.Value = TextBox2.Text
    'pvValoresParametros.Add(personal2)
    'pvValoresParametros.Add(personal)
    'crearreport.DataDefinition.ParameterFields("id").ApplyCurrentValues(pvValoresParametros)
    'Me.CrystalReportViewer1.ReportSource = crearreport
    'crearreport.DataDefinition.ParameterFields("Param").ApplyCurrentValues(pvValoresParametros)

    ResponderEliminar
  89. hola Eduardo

    pero no veo que uses algo como ser

    ParameterFields paramFiels = new ParameterFields();
    paramFiels.Add(param);


    o sea una coleccion que defina y tome la lista de parametros
    sino que asignas directo el parametro a un nombre

    revisa el articulo y aplicalo como hago alli a ver si resulta

    saludos

    ResponderEliminar
  90. Buenos dias/noches. Estoy adentrandome en el mundo del .Net y CR.XI desde VB6 y CR.8 y sudo para hacer cosas que antes hacia sin problemas. A ver si me puedes aclarar si esto se puede hacer (en VB6 lo hacia).
    He diseñado un formulario para que el usuario de la aplicacion pueda diseñar su propio listado y seleccionar que campos de la BD apareceran. Para ello deberia pasar los NOMBRES de los campos seleccionados al report y este mostrarme en cada columna el campo de la base de datos recibido por codigo.
    No se si me he explicado claramente.
    Agradecere cualquier idea.

    ResponderEliminar
  91. hola Luis

    la verdad no se como es que lo harias en VB6 pero dudo que sea con crystal reports, quizas podrias aplciar la misma tecnica, peor la verdad no sabria decirte de cual se trata

    el diseño del reporte es estatico y al definir un origen de datos este determina los nombres de los campos, esto es asi desde VB6 y no ha cambiado

    saludos

    ResponderEliminar
  92. Hola Leandro espero me puedas ayudar, estoy haciendo una webform para una empresa de transportes, que cuando se ingrese la informacion me saque el recibo y el numero de tiquetes que compre puede ser 1 o varios, estos tiquetes y recibo los hice en un crystal report; el problema es que cuando le doy imprimir solo me saca el recibo, los tiquetes no, y la verdad creo que es porque crystal siempre se toma su tiempo para buscar el reporte y no soporta realizar este proceso varias veces al mismo tiempo; o yo lo estoy haciendo mal. Espero me puedas ayudar. Te lo agradezco mucho

    ResponderEliminar
  93. hola Paula

    pero este recibo y ticket son diferentes .rpt ?
    porque si es asi tu deberias lanzar cada reporte de forma independiente

    por lo que comentas un recibo no tiene una relacion directa con los ticket, o quizas si y podrias definir subreportes para mostrar los ticket dentro del reporte de recibo

    saludos

    ResponderEliminar
  94. Hola Leandro, gracias por contestar, efectivamente los reportes y tiquetes son diferentes rpt.
    Ud me dice que los abra de forma independiente, ese es el punto como hago para que el mismo boton los llame al mismo tiempo, en el caso de los tiquetes pueden haber varios en una solo venta y necesita que un ciclo le valla enviando la diferente infomarcion para hacer cada tiquete.

    ResponderEliminar
  95. hola Paula

    podrias evaluar si quizas un subreporte no soluciona el problema

    podrias vincular los datos a un recibo y sus ticket cargando todo en un dataset tipado que asignas al reporte

    entonces los ticket los envias en subreporte del reporte del recibo
    la verdad habria que probarlo pero deberia resultar de esa forma

    lo que habria que ver en que seccion del reporete pones cada cosa, quizas en este caso si solo se imprime un recibo a la vez la seccion details no la utilices

    saludos

    ResponderEliminar
  96. Leandro serias tan gentil de escribirme a joseluis_sayago@hotmail.com tengo problemas con un reporte de crystal reports

    ResponderEliminar
  97. saludos Leandro, no me ayudas con un reporte en Crystal? mi correo es joseluis_sayago@hotmail.com

    ResponderEliminar
  98. hola Luis

    cual seria el problema?

    saludos

    ResponderEliminar
  99. Hola leandro, yo tengo un problema para imprimir mi reporte desde el toolbar del crystal report. Mi reporte funciona correctamente,pero cuando le doy imprimir me sale una ventana con el nombre de mi parametro algo asi:
    @codigo al costado un textBox y abajo un boton. Es como si se estuviera perdiendo los parametros de mi reporte y me estuviera pidiendo que ingrese de nuevo el parametro, para mostrat mi reporte. Cabe mencionar que este reporte lo estoy haciendo en Web. Agradeceria mucho que me ayudaras.

    ResponderEliminar
  100. hola Roly

    desde codigo estas asignando un valor al parametro ?

    validaste que el nombre que lo identifica este correctamente escrito?

    saludos

    ResponderEliminar
  101. Si le asigno un valor al parametro, como te digo mi reporte me muestra los datos correctamente, pero el problema ocurre cuando quiero imprimir y guardar ahi parece que se actualiza la pagina y se pierde el valor de los parametros, por que me sale un formulario con los nombres del parametro y un boton que te genera el crystal supongo, cuando no le asignas valores a los parametros.

    ResponderEliminar
  102. hola Roly

    la verdad no se me ocurre que podra estar pasando, no me ha sucedido nada como esto

    podrias plantear el tema en el foro

    asp.net foro

    saludos

    ResponderEliminar
  103. Buena Tarde Leandro, una consulta:
    como se puede agregar un detalle a un documento de word a traves de RichTextBox1:
    asta el momento tengo esto:
    Dim file As String = Application.StartupPath & "\Documentos\GARANTIA.rtf"
    Dim textoRTF As String
    frmDoc.DocumentoRichEditControl.LoadDocument(file)
    textoRTF = frmDoc.DocumentoRichEditControl.RtfText
    With dtDatosRreserva.Select("RID=" & ROWIDReserva)(0)
    textoRTF = textoRTF.Replace("\{NOMBRE\}", NOMBRETextEdit.Text)
    textoRTF = textoRTF.Replace("\{MODELO\}", .Item("CODIGO_MODELO").ToString.ToUpper)
    textoRTF = textoRTF.Replace("\{COLOR\}", .Item("EXTNOMBRE").ToString.ToUpper)

    pero aparte de los datos generales me gustaria agregar un detalle.
    saludos

    ResponderEliminar
  104. hola EZ

    alli no lo alcanzo a visualizar pero imagino estas haciendo uso de las api de office para trabjar con el documento
    si es asi con estas podrias agregar parrafos donde poner un texto


    saludos

    ResponderEliminar
  105. Buenos Dias Leandro, efectivamente estoy usando las api de office, para mostrar un reporte, yo tengo el archivo creado, el cual contiene párrafos y algunas parametros el cual los asigno por medio de un dataset.

    Pero resulta que tambien tengo que insertar un detalle con el número de filas variable, el cual lo tengo cargado a un dataset, es ahi el problema, no se como mandar ese detalle, ademas que tiene que ser en formato de tabla.

    Saludos,

    ResponderEliminar
  106. hola EZ

    la verdad no estoy seguro de como lograr lo que planteas

    poner una tabla en el rtf lo veo medio raro sabiendo que despues formara parte de un reporte, porque esos datos no los ubicas en un sureporte del propio crystal

    igualmente algo que no me quedo claro, hay un reporte de crystal en todo esto? o solo es el rtf

    Word – Utilización de Tablas

    quizas del link se puedan sacar algunas ideas

    saludos

    ResponderEliminar
  107. Hola Leandro! Tengo una consulta porque necesito hacer un reporte que se auto refresque cada cierto tiempo. Tienes idea de como se puede hacer??

    ResponderEliminar
  108. Hola buenas tardes Leandro, he estado buscado alguna solucion acerca del manejo de Crystal Report + Asp y pase de parámetros, en mi búsqueda encontré este código el cual lo cargo desde el Load de Default.aspx.cs

    ReportDocument reportDocument = new ReportDocument();
    ParameterField paramField = new ParameterField();
    ParameterFields paramFields = new ParameterFields();
    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();


    paramField.Name = "@Id";

    paramDiscreteValue.Value = 2;
    paramField.CurrentValues.Add(paramDiscreteValue);
    //Add the paramField to paramFields
    paramFields.Add(paramField);

    CrystalReportViewer1.ParameterFieldInfo = paramFields;

    reportDocument.Load(Server.MapPath("Reportes\\Reporte1.rpt"));

    reportDocument.SetDatabaseLogon("usuario", "pass", "server1", "base1");

    CrystalReportViewer1.ReportSource = reportDocument;

    También en Default.aspx he agregado solo el control CrystalReportSource1.


    En cuanto al archivo Reporte1.rpt agregue un procedimiento almacenado el cual espera el parámetro @Id.

    Al ejecutar la pagina Default.aspx simplemente no muestra nada, las preguntas que tengo son: ¿necesito agregar el control CrystalReportSource1? ¿me hace falta algo mas en el código para que muestra el reporte? ¿hará falta pasarle algún data table nuevamente reportDocument.SetDataSource(datatable1);?


    De ante mano agradezco su atención!!

    ResponderEliminar
  109. hola Maybell

    eso podrias lograrlo quizas utilizando un control timer, o sea en el evento de cada Tick del control recargar el reporte

    no ahs mencionado si el reporte se conecta directamente a la db o si eres tu quien asigna algun dataset como origen de datos

    si es la priemr opcion se que el control viewer tiene opciones de Refresh, pero si asignas un datasource vas a tener que recuperar nuevamente los datos y asignarlo al reporte

    saludos

    ResponderEliminar
  110. hola fabys

    si el reporte lo conectas directamente a los datos no necesitas asignar ningun datatable o parecido

    se supone que al conectarse el reporte recupera los datos directamente, pero veo que le pasas un id unicamente, has validado que se encuentre este registro

    que pasas si al select que esta dentro del procedure no aplicas el parametro, sino que devuelves todos los registros, si lo hace se pueden ver datos en el reporte ?

    saludos

    ResponderEliminar
  111. Hola Leandro, gracias por responder, realice la prueba y no me desplegó el reporte con un select desde el reporte ya que estaba utilizando visual studio 2012, no he encontrado alguna razón del porque no lo despliegue, realice otra prueba con VS2010 y sin problemas desplegó el reporte, ahora la que intento es poder pasar un parámetro desde código, porque al ejecutar el reporte que contiene el procedimiento almacenado con un parámetro, me despliega una ventana pidiéndome el valor del id:

    Te paso el código que estoy implementando ya que pongo dos formas que encontré de pasar el parámetro pero no me respeta ninguna forma


    protected void Page_Load(object sender, EventArgs e)
    {
    ReportDocument reportDocument = new ReportDocument();
    ParameterField paramField = new ParameterField();
    ParameterFields paramFields = new ParameterFields();
    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
    reportDocument.Load(Server.MapPath("Reportes\\reporte1.rpt"));
    reportDocument.SetDatabaseLogon("usuario", "passsss", "server", "base");

    paramField.Name = "@Id";
    reportDocument.SetParameterValue("@IdGps", 2);
    paramDiscreteValue.Value = 2;
    paramField.CurrentValues.Add(paramDiscreteValue);

    paramFields.Add(paramField);

    CrystalReportViewer1.ParameterFieldInfo = paramFields;

    CrystalReportViewer1.ReportSource = reportDocument;
    CrystalReportViewer1.RefreshReport();

    }


    Muchas gracias

    ResponderEliminar
  112. Hola Leandro buenas tardes, gracias por tu respuesta, realice la prueba que comentas pero no me desplegó nada desde el VS2012 en cuanto al VS2010 sin problemas desplegó el reporte, aun no encuentro la razón del porque no despliega los reportes desde el VS2012. Ahora lo que intento es hacer la parte de los reportes desde VS2010 y lo que aun no me sale es el pase de parámetros, ya que desde el código que estoy implementado estoy probando dos formas de pase de parámetros pero sin resultados:


    protected void Page_Load(object sender, EventArgs e)
    {
    ReportDocument reportDocument = new ReportDocument();
    ParameterField paramField = new ParameterField();
    ParameterFields paramFields = new ParameterFields();
    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
    reportDocument.Load(Server.MapPath("Reportes\\reporte1.rpt"));
    reportDocument.SetDatabaseLogon("usuario", "contraseña", "servidor", "base");

    paramField.Name = "@Id";
    reportDocument.SetParameterValue("@Id", 2);
    paramDiscreteValue.Value = 2;
    paramField.CurrentValues.Add(paramDiscreteValue);

    paramFields.Add(paramField);

    CrystalReportViewer1.ParameterFieldInfo = paramFields;

    CrystalReportViewer1.ReportSource = reportDocument;
    CrystalReportViewer1.RefreshReport();

    }



    Muchas gracias

    ResponderEliminar
  113. hola fabys

    lo que no entiendo es porque mezclas las tecnias, si usas el ParameterField entonces no usas el SetParameterValue() porque sino asignas dos veces el mismo parametros

    prueba dejar uno u otro

    saludos

    ResponderEliminar
  114. Muchas gracias Leandro, tenias razón utilice esta forma:

    CrystalReportViewer1.ReportSource = null;

    ReportDocument Report1 = new ReportDocument();
    ParameterField param1 = new ParameterField();
    ParameterDiscreteValue discreteValue1 = new ParameterDiscreteValue();
    ParameterFields paramFiels1 = new ParameterFields();

    param1 = new ParameterField();
    param1.ParameterFieldName = "@Id";


    discreteValue1.Value = 1;
    param1.CurrentValues.Add(discreteValue1);


    paramFiels1.Add(param1);



    Report1.Load(Server.MapPath("Reportes\\Reporte.rpt"));
    Report1.SetDatabaseLogon("user", "pass", "server", "base");

    CrystalReportViewer1.ParameterFieldInfo = paramFiels1;
    CrystalReportViewer1.ReportSource = Report1;


    ya solo me resta la impresión del reporte desde Asp, de casualidad tendrás algún articulo referente a eso? ya que al darle click en el boton de la impresora del reporte no manda a imprimir, he leído acerca de que el usuario de ASPNET necesita permisos para imprimir y también otra forma es por código

    System.Drawing.Printing.PrintDocument printDocument = new System.Drawing.Printing.PrintDocument();
    Report1.PrintOptions.PrinterName = printDocument.PrinterSettings.PrinterName;
    Report1.PrintToPrinter(1, true, 0, 0);

    pero al ejecutarlo me despliega un error donde dice que falta unos parametros justo en la linea: printDocument.PrinterSettings.PrinterName;
    Report1.PrintToPrinter(1, true, 0, 0);



    Saludos!!!

    ResponderEliminar
  115. ¡Hola Leandro! estoy trabajando con visual basic 2012 y crystal reports 8 y tengo el siguiente problema:
    tengo un formulario con unos datos que ingreso y un boton que se llama Continuar, al momento que le doy clic quiero que me abrir un reporte que engo echo en crystal reports y que m muestre los valores que tenia en el formulario y ya he batallado y no me sale ojala y tu me puedas ayudar de antemano muchas gracias.

    ResponderEliminar
  116. Hola Leandro, mejor opte por exportar mi reporte a pdf, ya que tuve muchos problemas con los permisos del usuario ASPNET, pongo el código por si alguien lo necesita


    CrystalDecisions.Web.CrystalReportSource sourse = new CrystalDecisions.Web.CrystalReportSource();
    sourse.Report.FileName = "Reportes\\Reporte.rpt";
    DataTable tabla = new DataTable();
    tabla = Insta.Dt_instalacionesReporte;
    sourse.ReportDocument.SetDataSource(tabla);

    sourse.ReportDocument.SetParameterValue("@Var", value);

    System.IO.Stream reader;

    reader = sourse.ReportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

    Response.ClearHeaders();
    Response.Clear();

    Response.AddHeader("Content-Type", "application/pdf");

    int b;
    while ((b = reader.ReadByte()) != -1)
    Response.OutputStream.WriteByte((byte)b);
    Response.OutputStream.Flush();

    Response.End();
    Response.Close();



    Saludos!! :D

    ResponderEliminar
  117. hola fabys

    excelente muchas gracias

    la verdad lo del VS2012 es raro, el trema es que no he realizado ninguna implementacion de crystal con VS2012 por lo que no sabria decirte que cual sera el problema

    ultimamente estoy utilizando mas Reporting Service

    saludos

    ResponderEliminar
  118. hola Jose

    pues la verdad esa union VS2012 y Crystal 8 la veo algo complicada

    yo aconsejaria si puedes que veas la forma de crear los reportes con una version mas actualizada de crystal, una version que de ser posible se integre con el VS

    actualmente existe esta version integrada que puedes descargar desde el sitio

    http://scn.sap.com/docs/DOC-35074

    saludos

    ResponderEliminar
  119. Hola leandro.

    Una pregunta a ver si me puedes ayudar en los reportes de crystal report de visual studio 2008 si intento abrir el database expert no hace nada y el visual studio tengo que cerrarlo a la fuerza. alguna solucion o forma de ver por que esta haciend eso

    ResponderEliminar
  120. hola Fabián

    el reporte lo conectas directo a una base de datos ? o usas un dataset tipado como origen de datos

    si creas un proyecto nuevo y añades un reporte sucede lo mismo

    el problema es raro, pareciera que intente conectarse a la db al no poder quizas espere el timeout para cancelar

    saludos

    ResponderEliminar
  121. Leandro que tal muy buen dia queria preguntarte como se puede utilizar una subsentencia para exportar al crystal report

    ResponderEliminar
  122. hola Wolfgang


    por subsentencia te refieres a que estas creando un subreporte?

    saludos

    ResponderEliminar
  123. Leandro me refiero no a un subreporte sino que a la hora de mandar mi reporte tengo en mi sql el uso de un subsentencia sql q forma marte de la principal

    un ejemplo:

    select docenvio,(select ofinombre from oficina where ofidestino=1),(select ofinombre from oficina where ofienvio=2) from documentos

    ah esas sub sentencias me refiero si me brindarias una ayuda estaria muy agradecido

    ResponderEliminar
  124. hola Wolfgang

    peor hay algun campo que una las tablas documentos y oficina ?

    porque en realidad lo correcto seria que uses un inner join entras las tablas

    como ser

    select docenvio, o1.ofinombre, o2.ofinombre
    from documentos d
    inner join oficina o1
    on d.campo = o1.campo and o1.ofidestino=1
    inner join oficina o2
    on d.campo = o2.campo and o2.ofidestino=2

    saludos

    ResponderEliminar
  125. no habia pensado de esa forma muchas gracias lenadro voy a probra muy agradecido

    ResponderEliminar
  126. Hola Leandro

    tengo una aplicacion de escritorio hecha en VB2008 con una base de datos Mysql corriendo en un Servidor de Linux,
    para los listado lleno los dataset con los procedimientos almacenado del Mysql y los grabo en un archivo XML,
    luego uso esos archivos XML como origen de datos del crystal reports, hasta ahí todo barbaro, ahora tuve que instalar el sistema en un Terminal Server,
    con varios usuarios usando en sistema al mismo tiempo, mas allá que cada uno se loguee con un usuario y contraseña diferente, tengo problemas con los listados
    porque en crystal reports me dejo path absolutos en los .rpt para los archivos XML, ejemplo "c:\reportes\cliente.xml", en las versiones de crystal 7 u 8 uno podia indicarle
    que los origenes de datos los busque en la misma carpeta de los reportes. Como puedo hacer lo mismo con .NET VB2008 y Crystal Reports, que los path no sean absolutos??,
    no se si soy claro con la pregunta?

    ResponderEliminar
  127. hola marcelo

    pero estas conectando el reporte directo al xml ? o es que levantas este en un dataset tipado usando el ReadXml() del dataset y luego lo asignas al reporte

    si es esto ultimo la ruta la puedes configurar usando el Application.StartupPath, para conocer donde esta el .exe y a partir de alli armar la ruta relativa

    o sino podrias poner la ruta en el app.config y definirla en la configuracion de la aplicacion para que puedas cambiarla en runtime sin tener que recompilar

    saludos

    ResponderEliminar
  128. Buenos días Leandro: Espero no moleste la consulta por acá. Estoy levantando un Crystal desde una página web. el sitio está desarrollado en ASP.NET pero el crystal está bindeado contra una base en MySql. Al cargar la página que contiene el reportviewer me muestra el siguiente mensaje: "No se pudo abrir la conexión. No se pudo abrir la conexión"
    En la herramienta de diseño el reporte funciona correctamente. El code behind funciona correctamente con reportes que bindean contra SQL Server y los datos de conexión que seteo de MySql están correctos, no se que otro problema puede llegar a existir. Muchas gracias. Saludos

    ResponderEliminar
  129. hola GUIDO

    estas conectando el reporte directo a la base de datos ? o es que utilizas ado.net para cargar un dataset tipado o coleccion que luego utilizas para asignar el ReportSource() del reporte

    si usas ado.net porque deberias revisa el connection string para ver si tiene la info correcta para conectarte a la db

    saludos

    ResponderEliminar
  130. Hola Leandro.
    Tengo una pregunta, y si quisiera agregar un rango de fecha a tu consulta desde un formulario de vb como le pasaría el parámetro?
    ejemplo:
    SELECT nombre,rango from usuario WHERE usuario.fecha1 = textbox1 AND usuario.fecha2 = textbox2

    pero como te dije antes las fechas provienen desde un form.

    ResponderEliminar
  131. hola Silvio

    las fechas podrias pasarlos como datetime y luego usar:

    WHERE usuario.fecha1 >= param1 AND usuario.fecha2 <= param2

    o sea debes definir un rango

    tambien podrias pasarlo como un valor numerico con el formato yyyyMMdd

    saludos

    ResponderEliminar
  132. Hola leandro, tengo una pregunta
    tengo rato buscando la solucion pero no encuentro el dato mira

    CRVVisor.ReportSource = RDReporte;

    en visual studio 2010 me lo pone como si no existiera Reportsourse.

    ya busque en un buen de la dos y no encuentro el dato. ya que quiero asignar el reportdocument al crystalreportviewer, te comentor q no tengo mucha esperiencia en C#.

    ResponderEliminar
  133. Leandro buenas noches tengo un problema con la impresión desde VB6 utilizando el Crystal Reports 7 con BD SQL; ojala puedas ayudarme.......

    No genera el Reporte cuando utilizo la BD en SQL, si utilizo una BD en Ms Acces no hay problema, lo genera bien.

    La información que te puedo dar es la siguiente :

    1.- Desde el VB6 utilizo el Control del Crystal Reports llamado : crRepPruebaImpresionSQL
    2.- El Código que utilizo en el VB6 es :

    Dim sSql As String
    sSql = "Select * from Clientes where Codigo=" & txtCodigo.Text & " Order by Codigo"

    crRepPruebaImpresionSQL.SQLQuery = sSql
    crRepPruebaImpresionSQL.PrintReport


    (txtCodigo.text contiene un valor para la selección del registro de la Tabla que deseo imprimir)

    3.- En el Crystal Reports utilizo una conexión a la BD por medio del ODBC, en la cual le doy los siguientes parámetros :
    - Controlador SQL Server
    - Autenticación del SQL mediante Id y Contraseña
    - Check en "Conectar con SQL Server para obtener la configuracion predeterminada de opciones de configuracion adicional"
    - Ingreso el Id de inicio de sesión y la Contraseña de la BD
    - Check en Establecer la Base de Datos como predeterminada e ingreso el nombre de la BD

    4.- Al ejecutar el Programa en VB6 no genera el Reporte.
    5.- En el Visor de sucesos del Windows veo que se genera el siguiente error :
    "Error de inicio de sesión del usuario 'sa'. Motivo: la contraseña no es válida para el inicio de sesión proporcionado."
    ( a pesar que el Id y la Contraseña ingresados en el ODBC son las correctas )
    6.- Este error ocurre solamente cuando utilizo la opción del parámetro : SQLQuery en el VB6.
    Cuando omito esta sentencia sí genera el Reporte.

    Pregunto si me falta ingresar algún otro parámetro adicional cuando utilizo el Parámetro SQLQuery.

    Muchas gracias,

    Juan Pablo Rivera

    ResponderEliminar
  134. hola Dan Beta

    lo que no reconoce es la propiedad del CrystalReportViewer o no permite crear una instancia del reporte

    si escribes CRVVisor y luego pones punto, que metodos y propiedades desplega el VS ?

    como defines RDReporte ? es una instancia del reporte rpt creado en el VS

    has descargado he instalado Crystal que se integra al VS

    saludos

    ResponderEliminar
  135. hola Juan Pablo

    la verdad hace muchisimo que no utilizo VB6 y mucho mas integrado con Crystal

    no probaste en lugar de definir el sqlquery de dejar el select interno en el reporte y solo definir un parametro para que el filtro se realice internamente?

    ese campo codigo es un campo numerico o de texto en la db? lo pregunto porque si es texto deberias poner el valor del parametro entre comillas simples

    saludos

    ResponderEliminar
  136. Hola Leandro (o cualquier persona q lea y esté en disposicion de ayudar :-p ), me gustaria que me escribieras a tita.cu@gmail.com, tengo un problema con mi aplicacion web, esta hecha en C#, con Vs2005 y se conectan los crystal report a una Bd en sql 2005, el problema es q el server hubo de cambiarse, cambiadose la ip, el nombre y el dominio, pero no la bd ni los datos incluidos en ella, mucho menos la web, ahora resulta que no funciona los reportes y no tengo la menor idea, por favor te agradeceria muchisimo si pudieras ayudarme, te adjunto el error q me muestra la página al tratar de cargar el reporte...:
    Failed to open a rowset. Details: ADO Error Code: 0x Source: Microsoft OLE DB Provider for SQL Server Description: Could not find stored procedure 'XXX-YYY'. SQL State: 42000 Native Error: Failed to open a rowset. Error in File C:\WINDOWS\TEMP\Reporte_XXX-YYY {FEA244E7-BDCE-493A-845A-4F52E37098E1}.rpt: Failed to open a rowset.
    eso es todo, no es la conexion a la Bd, pq eso ya lo revisé, tampoco el codigo de programacion o los permisos de mi user a la Bd....

    bueno... espero q logres ayudarme, desde ya...
    MIL GRACIAS!!!!

    ResponderEliminar
  137. hola Tita

    el mensaje del error parece ser bastante claro al indicar que no puede localizar el procedure

    por lo que noto el reporte se conecta directo a los datos, pero si ejecutas esto desde tu entorno de desarrollo sigue funcionando ?

    saludos

    ResponderEliminar
  138. Me muestra el mensaje puntero no valido, estoy creando dos parametros:

    Dim param1, param2 As New ParameterField()
    Dim valor1, valor2 As New ParameterDiscreteValue()
    Dim parametros As New ParameterFields()

    param1.ParameterFieldName = "fecha1"
    param1.ParameterFieldName = "fecha2"
    valor1.Value = txt_fecha_desde.Text
    valor2.Value = txt_fecha_hasta.Text
    param1.CurrentValues.Add(valor1)
    param2.CurrentValues.Add(valor2)
    parametros.Add(param1)
    parametros.Add(param2)

    Me podrias dar una ayudita, Gracias

    ResponderEliminar
  139. hola David

    no entendi, como es eso de "puntero no valido"

    cual es el mensaje completo que recibes en el error?
    este se produce al compilar o al ejecutar

    saludos

    ResponderEliminar
  140. Tengo un problema con un reporte el cual funcionamente muy bien localmente pero al momento de ejecutarlo en una maquina cliente ocurre que al acceder al reporte me bota una pantalla de login de conexion a base de datos
    nombre del servidor : robert-pc
    base de datos:
    id de inicio de sesion
    contrasena
    y un check de utilizar seguridad integrada pongo el usuario i la respoectica contraseña pero me sale no es posible conectar toy trabajando con un bd oledb(ado)
    si me pudieras ayudar?

    ResponderEliminar
  141. hola tito

    imagino el reporte lo conectas directo a la db, no?
    la base a la cual te conectas es sql server ? porque recuerda que desde codigo deberias definir el connection string

    Agregar el código de conexión del informe

    en el articulo explica como podrias hacerlo

    saludos

    ResponderEliminar
  142. Hola; por lo que veo en verdad hay mucha ayuda aqui. Sólo deseo que continues así Tuttini por que tambien voy a necesitarle.

    ResponderEliminar
  143. Hola Leandro, de verdad valoro mucho lo que haces y quisiera si puedes orientarme sobre la contrucción de los reportes en modelo 3 capas que subiste. Es mejor o no crear una capa aparte para el reporte?
    Saludos cordiales

    ResponderEliminar
  144. Buenas Leandro muy buenos tus posts, era para hacerte una consulta en una aplicación de escritorio hecha con c# le paso parámetros a un reporte de crystal, pero no lo hago de la forma en que lo haces en este ejemplo ya que yo no muestro el reporte simplemente lo exporto, ahora bien al pasar los parámetros me dice que no puedo convertir un crystaldecisions.shared.parameterdiscretevalue a un crystaldecisions.shared.parametervalue esto al usar la version 13 del dll gracias de antemano por la ayuda que me puedas brindar.

    ResponderEliminar
  145. HOla Leandro
    Me pudieras explicar como se hace un procedimiento almacenado y como se manda a llamar desde vb.net 2005.

    Ayuda por favor

    ResponderEliminar
  146. HOla Leandro
    Me pudieras explicar como se hace un procedimiento almacenado y como se manda a llamar desde vb.net 2005.

    Ayuda por favor

    ResponderEliminar
  147. HOla Leandro
    Me pudieras explicar como se hace un procedimiento almacenado y como se manda a llamar desde vb.net 2005.

    Ayuda por favor

    ResponderEliminar
  148. Buenas tardes Leandro.

    Ayudame con algo, tengo el sgte codigo el cual me pasa los parametros que contienen las fechas de incio y fin de la semana, pero al momento de desmarcar esta linea y ejecutar//crystalReportViewer1.RefreshReport(); , me sale un cuadro que me pide que introduzca el valor de los parametros cosa que por codigo ya esta realizada como podria evitar esto, si me pudieras echar una mano.

    ParameterField ParaFie1 = new ParameterField(); ParameterField ParaFie2 = new ParameterField();
    ParameterFields ParaFis = new ParameterFields();
    ParameterDiscreteValue ParaDis1 = new ParameterDiscreteValue(); ParameterDiscreteValue ParaDis2 = new ParameterDiscreteValue();


    ParaFie1.ParameterFieldName = "fechainicio";
    ParaFie2.ParameterFieldName = "fechafin";
    ParaDis1.Value = fechin;
    ParaDis2.Value = fechfin;
    ParaFie1.CurrentValues.Add(ParaDis1);
    ParaFie2.CurrentValues.Add(ParaDis2);
    ParaFis.Add(ParaFie1);
    ParaFis.Add(ParaFie2);

    crystalReportViewer1.Zoom(1);
    crystalReportViewer1.ParameterFieldInfo = ParaFis;

    crystalReportViewer1.ReportSource = ReporteConsultaMensual1;

    //crystalReportViewer1.RefreshReport();

    Saludos.

    ResponderEliminar
  149. hola tito

    imagino que los nombre de los parametros coinciden (y por las dudas los escribes respetando mayusculas y minusculas)con los definidos en el reporte

    pero me pregunto para que realizas un refresh del report, si con solo asignar el ReportDocument el CrystalReportViewer este se actualiza directamente,
    a donde apunto es que asignes un report document completo nuevamente al viewer no solo los parametros

    saludos

    ResponderEliminar
  150. hola Jhon

    ya estan actualizados los link para que puedas descargar los ejemplos

    saludos

    ResponderEliminar
  151. Hola Leandro que tal y si me podrias dar un ejemplo de como asignar un report document completo nuevamente al viewer y no tan solo los parametros.

    Saludos.

    ResponderEliminar
  152. hola Robert

    pero en el ejemplo de este articulo lo estoy asignando, hacerlo nuevamente seria repetir la misma operacion, solo debes asignarlo como lo realizo en la linea:

    crystalReportViewer1.ReportSource = report;

    quizas tambine esto ayude
    Creación de Reportes con Crystal Reports en Visual Studio 2005/2008

    saludos

    ResponderEliminar
  153. Hola Leandro soy david desde mexico :) Tengo una duda me dejaron cierta investigacion, pero no se que hacer mi investigacion es orientada a reportes pero no se si podrias ayudarme con las siguientes cuestiones, y ademas eres una pieza en programacion :( Bueno aqui van mis cuestiones.

    Ventajas y Desventajas de los Objetos de Informe.

    diferentes objetos disponibles para visualizar informes y reportes.

    De antemano muchas gracias... :(

    ResponderEliminar
  154. hola Erik

    n se si entendi el planteo, necesitas comparar diferente tipo de tools para armar reportes ?
    digo quizas comparar Crystal Reports y Reporting Service

    a que llamas objeto de informe ?

    saludos

    ResponderEliminar
  155. Estimado Señor:
    Veo que es un experto programador y quizás pueda ayudarme con estos 2 problemas que le detallo :
    P1: ¿Cómo actualizar los campos de una base que se usa en CystalR en tiempo de ejecución ?.
    Me explico. Tengo una tabla que puede añadir campos con el formato Px . Creo un informe que muestra una fórmula {tabla.P1} y en tiempo de ejecución cambio la fórmula . Si después de creado el informe añado un campo P4 (y ya existían de P1 a P3 ) y llamo al informe da error ( tengo que ir al diseñador y actualizar la base y ya funciona). EN versiones anteriores (quizás la 4ó6) en las opciones del informe marcaba ACTUALIZAR la base y lo hacía sin problemas. Pero con la 2008 NO encuentro manera de hacerlo.
    P2. ¿cómo cambiar la impresora en tiempo de ejecución? Por ejemplo, la impresora predeterminada es "hp1" y al imprimir el informe directamente , quiero hacerlo con la "hp2". Anteriormente cambiaba el drive,nombre impresora y puerto y no tenía problemas . Pero ahora NO soy capaz. Lo mismo ,llevo haciendo pruebas varios días .
    El experimento más sencillo de los que he aplicado es
    info1.PrintOptions.PrinterName = pri1
    donde pri1="hp2"
    info1.PrintToPrinter(Val(myValue), False, 0, 0)

    Muchas Gracias por su tiempo y las molestias que pueda ocasionarle.

    Santiago de Las Palmas

    ResponderEliminar
  156. hola Santiago

    la verdad cambiar el modelo de datos en runtime nunca lo he realizado, si defines el reporte con N cantidad de campos no puedes alterarlos dinamicamente, sino que debes diseñar el .rpt para que los reconozca.

    no probaste usando el PrintDialog

    Choosing a printer when printing from Crystal Reports in C#

    ResponderEliminar
  157. Leandro:
    Gracias por la respuesta.
    Respecto a actualizar los datos, ya lo he resuelto.
    Era tan sencillo como insertar esta única línea infoNombre.VerifyDatabase

    Respecto a la impresión , por desgracia el código expuesto en la página del link NO funciona.

    Reitero mi agradecimiento.
    Si se entera de como cambiar la impresora en la última versión de CR para VS , agradecería me enviara mensaje a datagrisan@gmail.com

    ResponderEliminar
  158. Programo en vb.net 2010, en crystal report XI existia ReporteCR.PrintingStatus.Progress, ahora estoy migrando mi codigo a SAP_CrystalReport-VS2010(13.0.9.1312) y no encuentro esta función para controlar mi impresión en que estado esta, si alguien conoce esta función en SAP Crystal Report, le agradecere por la informacion.

    ResponderEliminar
  159. hola Leandro tengo un problema con
    CrystalReportViewer1.ReportSource me marca incorrecta la sintaxis cuando intento buscar la propiedad ReportSource tengo Crystal integrado a VS 2012 necesito ayuda.

    ResponderEliminar
  160. hola joe

    la verdad el PrintingStatus.Progress nunca lo he utilizado, es mas no sabia que existia

    por lo de sintaxis incorrecta podrias validar que has agregado las referencia a las dll de crystal, o si defines el using en la parte superior de la clase con los namespace de crystal necesita

    ademas recuerda que el ReportSource del viewer es una propiedad, debes asignarle la instancia que has creado

    saludos

    ResponderEliminar
  161. Hola Leandr0, podria ayudarme con un ejemplo para elaborar un reporte a partir de datos que tengo en los label del formulario?

    -V C# 2008
    -sqlServer
    -Crystal report integrado

    (pasa que pre-visualizo el resultado de mi consulta en el formulario y a partir de ahi quiero mandarlo a imprimir)

    Gracias.

    ResponderEliminar
  162. hola roob

    si usas un dataset tipado podrias volcar los datos de los controles a este y luego asignarlo al reporte

    como lo realizo aqui

    [Crystal Reports] - Exportar DataGridView a Crystal

    como veras puedes generar el reporte sin que este se conecte a una db

    saludos

    ResponderEliminar
  163. Muchas gracias Leandro.
    Me funciono de maravilla.

    ResponderEliminar
  164. Hola Ale, como puedo pasar otro parametro ??? Gracias.

    ResponderEliminar
  165. hola Felipe

    puedes aplicar esta misma tecnica y asignar los demas que definas en el reporte

    creas otra instancia de ParameterField y lo asignas a la coleccion de parametros, asi puedes definir los que necesites en el reporte

    saludos

    ResponderEliminar
  166. Hola leandro mucho gusto

    Tengo una duda con respecto a generar reportes. Mi duda o pregunta es como puedo generar un reporte con los datos específicos de BD que tengo en SQL server.

    Lo que quiero hacer es que, supongamos habro una ventana nueva donde en esa ventana se encuentran 3 txtbox donde a una le pongo 01 que es nivel, en otra 23 que es puesto, y en otra 15 que es cargo estos son datos específicos de 20 supongamos que solo quiero que aparezcan en mi reporte.

    Esa es mi pregunta cuando el usuario quiera generar un reporte pueda seleccionar los datos que el quiere.
    Agradecería mucho tu ayuda gracias.

    ResponderEliminar
  167. hola Daniel

    podrias realizar una query que use esos datos como filtro para despues cargando un dataset tipado usarlo como ReportSource del reporte de crystal

    [Crystal Reports] Usar DataSet Tipado con dos DataTable

    lo que no compredi es si la seleccion del usuario se logra mediante el ingreso de esos 3 valores en textbox o si hay algun otra seleccion
    saludos

    ResponderEliminar
  168. Hola Leandro Siempre veo aportes tuyos en msdn es la primera vez que entro al blog me podrias por favor ayudar ya que estoy insertando una tabla con el "SetParameterValue" pero solo me agrega un registro en el parameter field agregue uno por cada campo y quiero saber como puedo asignar para que agregue toda la tabla y no solo un registro, el reporte ya lo tengo creado en una ruta solo lo abro inserto y guardo en pdf

    ResponderEliminar
  169. hola Jesus

    es que toda una tabla no la asignas por parametro, para eso debes definir un ReportSource

    deberias asignar un dataset tipado o coleccion para pasar los datos al reporte, revisa los otros articulos del blog donde hago uso de dataset como origen de datos del reporte

    saludos

    ResponderEliminar
  170. Buenos dias Leandro ya me dejo hacerlo pero el problema que tengo ahora es que por cada registro me agregaga una hoja nueva no me lo hace en una sola hoja si yo tengo 3 registros en la tabla me agrega una hoja por registro y no todos los registros en una hoja.

    ResponderEliminar
  171. hola Jesus

    estas ubicando el campo en la seccion correcta?

    recuerda que debe ir en el "Details"

    saludos

    ResponderEliminar
  172. Muchísimas gracias ya pude :) ya quedo listo te lo agradeso

    ResponderEliminar
  173. Hola Leandro
    Tengo una duda como modifico la longitud de caracteres de una cadena ya que me aparece que solo puedo poner 255 caracteres.
    tengo este texto " favor de revisar equipo por ruido garantia de la orden ot 91299 tecnico cristo no me la an facturado por eso no te paso el num de factura GARANTIA. POR DEFECTO DE FABRICACION. COMP. DEMACIO AJUSTADO DEL EXENTRICO DE PISTONES SE REBAJA Y SE CAMBIA PISTONES. OK. 23 . 09. 14. del cliente AUT0001 AUTOMATIZACIONES Y EQUIPOS,S DE R.L." como campo en mi base de datos, pero al momento en que saco mi reporte me aparece de la siguiente manera "favor de revisar equipo por ruido garantia de la orden ot 91299 tecnico cristo no me la an facturado por eso no te paso el num de factura GARANTIA. POR DEFECTO DE FABRICACION. COMP. DEMACIO AJ" como puedes ver se corta el texto 'no son los 255 caracteres ya que mis usuarios ponen espacios en blanco entre lineas de texto esto por que este documento pasa por varias areas de esta forma se sabe que son areas distintas.
    Saludos cordiales......

    ResponderEliminar
  174. hola jose

    podrias en una formula en ese campo validar la longitud de los datos que se mostratran y truncarla para que muestre una cierta cantidad de texto y al final le pones puntos suspensivos indicando al usuario que no se esta mostrando completo ya que excede el espacio en el reporte

    conoces como definir formulas ?

    saludos

    ResponderEliminar
  175. Leandro y si uso una base de datos sql server 2008 el proceso es igual.

    ResponderEliminar
  176. Hola tengo un problema tengo diseñado un reporte que obtiene los datos por medio de una consulta a la base de datos.. el problema es que modifique unas cosas de la consulta y ahora al tratar de salir de del View Command no me pone uno de los parametros que estableci.. por ejemplo uso Año y Fecha y es la Fecha la que no me identifica.... como podria solucionarlo

    ResponderEliminar
  177. Que tal Leandro, me podrías ayudar con el siguiente caso.
    En mi maquina local en mi proyecto puedo crear mi pdf con crystal sin ningun problema pero desde una maquina cliente me da el siguiente error.

    Faltan los valores del parámetro.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Runtime.InteropServices.COMException: Faltan los valores del parámetro.

    esto solo me pasa en la maquina cliente

    ResponderEliminar
  178. hola fausto

    la verdad no sabria decirte porque se produce este error
    segun parece es un problema con los parametros que asignas al reporte, habria que ver el codigo de como los asignas, quizas defines el parametro pero le asignas vacio como valor

    saludos

    ResponderEliminar
  179. Hola Leandro, a mi me pasa algo sumamente extraño, cuando selecciono para crear un OLE DB Provider, la lista me aparece vacía! No se que pueda estar pasando, nunca había visto eso, me puedes ayudar?

    Saludos y muchas gracias

    ResponderEliminar
  180. hola Ignacio

    no entendi, donde es que seleccionas el oledb provider ?

    lo haces en el wizard que muestra crystal cuando creas un reporte?
    quizas no tengas ningun proveedor de oledb disponible

    porque no conectas el reporte a un dataset tipado y le asignas los datos desde codigo

    saludos

    ResponderEliminar
  181. No puedo ver las imagenes para crear el query en tu post en donde dice agregar comando

    Me podrias ayudar en como escribes el query

    Saludos

    ResponderEliminar
  182. Hola Leandro, me acerco a ti con una consulta de Crystal Report Viewer
    pues bien .... el crystal report está conectado directamente a la base de datos sql server .... el problema es que cuando me muestra los datos de la tabla donde se hace la consulta los campos de tipo numéricos aparecen con valor ###### esto cuando el valor en sql es mayor a cero ..........
    espero puedas apoyarme en este caso

    de antemano gracias
    Saludos Cordiales

    Iron Uriostegui

    ResponderEliminar
  183. Hola que tal
    Muy buen artículo, solo tengo una duda,
    si el reporte es sobre las ventas de desde una fecha hasta otra fecha, ¿como puedo poner en el encabezado desde: parametrodesde y hasta: parametrohasta en el encabezado del reporte?
    es decir, imprimir desde que fecha hasta que fecha contempla el reporte, gracias de antemano.

    ResponderEliminar
  184. Hola que tal, tengo problemas con unos reportes, espero pueda ayudarme.
    1. Como puedo cambiar una imagen dentro del reporte, quiero tomarla de una ruta que puede ser actualizada.
    2. Mi reporte no se muestra en pantalla, se manda a la impresora directamente, en local si lo hace, pero ya con la aplicación arriba no, no me manda ningún mensaje de error, simplemente no lo imprime.
    Estoy trabajando con VS2012, Crystal Report Versión 13_0_12 y es una aplicación Web.
    Espero pueda ayudarme, Saludos

    ResponderEliminar
  185. hola buen día, tengo problemas con un reporte, a grandes rasgos si yo utilizo un parametro de búsqueda o de filtro, por ejemplo busco por categorias, si me manda la información que requiero, pero si quiero un reporte de toda la información que tengo me lo manda en blanco, espero me puedan ayudar, me puedan orientar por favor. Muchas gracias

    ResponderEliminar
    Respuestas
    1. hola
      Lo que entiendo es que el parametro aplica siempre, por lo que deberias ver de usar en tu query un parametro opcional
      Crystal Reports: Optional-Multi-Select Parameters

      No se si el reporte lo conectas directo a la db o si asocias el reporte a un dataset, si tu caso es el ultimo quizar el filtro de los datos podrias hacerlo desde codigo y el parametro que sea simplemente informativo
      saludos

      Eliminar
  186. Hola Leandro, buen días.
    ¿Podrías ayudarme a redimensionar el tamaño de un objeto de crystal report desde visual basic en tiempo de ejecución?
    Es un objeto dibujo tipo cuadro, en visual tengo el siguiente código:

    "rdEmbargoJud.ReportDefinition.ReportObjects("Box2").Right = 9495"
    Sin embargo no me reconoce la propiedad, me envía el siguiente error:

    "'Right' no es un miembro de 'CrystalDecisions.CrystalReports.Engine.ReportObject'."

    Cuando trato de hacerlo con el width, me deja depurar el código
    "rdEmbargoJud.ReportDefinition.ReportObjects("Box2").Width = 9375"

    pero al momento de llegar a esta instrucción, me envía el siguiente error en tiempo de ejecución:
    "InvalidArgumentException
    La propiedad Width está obsoleta. Utilice la propiedad Right para cambiar la anchura."

    He buscado en la web, pero no he encontrado nada parecido, no sé si se te ha presentado el caso, talves me puedas ayudar.

    Muchas gracias por tu siempre oportuna colaboración.

    ResponderEliminar
    Respuestas
    1. hola
      Los reportes deberian tener un diseño estatico en donde el campo se defina para poder contener el dato completo del campo, no creo que sea buena idea redimensionar en runtime. La verdad es que nunca tuve la necesidad de cambiar propiedades desde codigo
      saludos

      Eliminar
    2. Hola Leandro, gracias por tu respuesta.

      Lo que pasa es que es un reporte que en base a cierto parámetro debe de mostrar una cantidad de columnas. El problema es que las columnas que se deben de ocultar están situadas entre dos columnas, esa es la única diferencia, de ahí todos los demás campos y columnas del reporte son similares y creí conveniente solamente ocultar las columnas y reubicar la restante, eso a la vez implica redimensionar la tabla en la que se muestran estos datos.

      Eliminar
    3. hola
      Claro, el tema es que un reporte no es muy dinamicos, es mas no esta pensado para ser dinamicos
      Lo que se suele hacer con crystal es poner condicionales para mostrar el campo o no, pero lo haces con una formula
      Suppress field in Crystal Reports
      saludos

      Eliminar
  187. hola Leandro, te explicare el problema que traigo, estoy tratando de exportar un reporte CrystalReports a un PDF per cuando hago esta acción(lo ejecuto) me manda un error de "InternalException was unhandled"
    me pudieras ayudar porque que manda este error???

    ResponderEliminar
    Respuestas
    1. hola
      La verdad es bastante dificil que podra esta sucediendo con solo el mensaje de error
      Habria que ver si es que el reporte se esta generando, si el pdf se esta exportando y como envias este en el Response para la descarga en el browser del cliente.
      Quizas si planteas el problema en el foro de msdn seria mas simple de analizar, alli es mas facil publicar codigo
      saludos

      Eliminar
  188. hola buenos días
    desde hace una semana me sale este error en un informe que llevo trabajando desde hace años, por que es una factura.
    error visor de informes crystal repots. no es posible exportar el informe
    Si intento sacarlo en otro formato no me da ningún problema, el problema es en pdf..


    ResponderEliminar
  189. Buenos dias.
    Estoy trabajando con VB.NET 2003. Antes con VB6 y crystal 4.6 tenia la opcion de hacer formulas vacias desde el diseñador y despues desde VB le mandaba comentarios (string a esas formulas) y salian en el reporte. Ahora no estoy viendo esa opcion, pero imposible que no este....no me doy cuenta como hacerlo. Podrias ayudarme. Gracias

    ResponderEliminar
  190. Buenas tardes Leandro tuttini, disculpa intento hacer un reporte de crystal reports pero en blanco, y quiero pasar unos parametros, pero simplemente no puedo, ya lo intente con los codigos de este blogs y tampoco me funciona, si pudieras ayudarme te lo agradeceria mucho

    ResponderEliminar
  191. Buenas amigo, como puedo hacer para que tu código funcione en impresión directa con parámetros y que ya no me muestre vista previa, de frente que mande a la impresora (ojo que funcione con lo parámetros que usas en este tutorial)

    ResponderEliminar
  192. Estimado Leandro, tengo una aplicacion hecha con VisualStudio 2012 y reportes con Crystal; en mi ambiente de desarrollo funciona muy bien pero al subirla a produccion me arroja el siguiente error; ¿alguna sugerencia que puedas darme?, gracias.

    Server Error in '/' Application.

    Configuration Error

    Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

    Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

    Source Error:


    An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

    Source File: \\10.190.6.17\rcd.com.mx\public\soptec3\web.config Line: 33

    ResponderEliminar