domingo, 15 de enero de 2012

Generar informes en Visual Studio usando el control ReportViewer

Hola,
en este primer post del 2012 voy a centrarme en explicar cómo generar informes para nuestras aplicaciones o sitios web con los datos que tenemos en la base de datos. Para ello voy a crear un sitio web al que le añadiré el control ReportViewer.  El ejemplo es para C# pero sería igual para Visual Basic ya que las líneas de código son pocas y similares y prácticamente quien sabe programar en Visual Basic no le debe plantear problemas C#. En versiones de Visual Studio anteriores a la 2010 también estaba la alternativa de Crystal Reports, pero tenía el problema de al ser una versión gratuita estaba limitada a que no hubiera más de 5 personas al mismo tiempo generando informes. Ésto en una aplicación de escritorio que no estuviera en red no plantearía problemas, pero en un sitio web colgado en un servidor con miles de conexiones al mismo momento era un poco frustrante. De hecho aún podrías descargar e instalar Crystal Reports para tu Visual Studio ya que existe la versión gratuita. Si te fijas en el instalador verás las 3 letras mágicas por el que ya no viene de serie al instalar Visual Studio 2010 (SAP).
Bueno a lo que iba. Poder hacer informes es una de las cosas más interesantes que se pueden hacer con los datos almacenados en nuestra base de datos. Está bien tener los datos guardados pero esos datos hay que usarlos. Puedes consultar los datos de tus clientes, puedes generar archivos de texto o xml para luego subirlos a un servidor, o por ejemplo puedes usarlos para hacer informes. Cuando digo informes, puedo hablar de informes estadísticos donde se analice la media aritmética, la moda y demás indicadores de la estadística descriptiva para una muestra de datos, informes de análisis de la situación financiera y/o patrimonial de una empresa tipo cuadro de mando integral, informes de notificaciones, o por ejemplo informes tipo facturas emitidas a los proveedores. Este último es muy útil ya que a al tener todas las facturas de ventas en tu base de datos, ya puedes saber si vendes más o menos, puedes saber si una rama de actividad te está generando pérdidas o, ya más propiamente para la gente como yo que se encarga de gestionar la empresa, puedes saber lo que hay que rellenar en las casillas del IVA repercutido del modelo 303. Así doy ideas, ya que automatizarlo todo no es muy difícil si sabes lo que buscas y lógicamente has diseñado correctamente tu base de datos para que haciendo las consultas necesarias obtengas esta información.
Pues bien voy a ver un poco de todo. Voy a explicar cómo crear usando el phpMyAdmin  una base de datos MySQL con una única tabla llamada países. Luego como he dicho voy crear un Sitio Web usando C# que se conectará a esta base de datos y que me mostrará a través del control ReportViewer un informe referente a los habitantes de cada uno de los países que tengo en la base de datos así como un gráfico de barras. A parte el usuario podrá filtrar la información que aparecerá en el informe por el número de habitantes.
Esto es importante: para filtrar los datos se puede hacer de 2 formas. En cualquiera de las 2 formas primero hemos editado el DataSet con el diseñador y hemos añadido una consulta que nos devolverá los países cuya población sea superior a la indicada en el parámetro @valor (guardada con el nombre de FillByGente).
Pues bien si queremos filtrar el informe vía código habría que añadir el siguiente código al evento Click de un botón que en mi ejemplo recibe el nombre de ‘Filtrar’:
    protected void Button1_Click(object sender, EventArgs e)
    {
        datosDataSetTableAdapters.paisesTableAdapter ta = new datosDataSetTableAdapters.paisesTableAdapter();
        datosDataSet.paisesDataTable tabla = new datosDataSet.paisesDataTable();
        ta.FillByGente(tabla, int.Parse(TextBox1.Text));

        ReportViewer1.LocalReport.DataSources.Clear();
        ReportDataSource datasource = new ReportDataSource("DataSet1", (DataTable)tabla);
        ReportViewer1.LocalReport.DataSources.Add(datasource);
        ReportViewer1.LocalReport.Refresh();
    }
Lo único que hace el código es crear un objeto paisesTableAdapter llamado ta y un objeto paisesDataTable llamado tabla (lógicamente la table se llama países). El objeto ta tiene el método creado FillByGente que toma como argumentos el DataTable y el contenido de la caja de texto TextBox1. Gracias a este método FillByGente del TableAdapter rellenamos el DataTable. Pues bien ahora borramos los DataSources que tiene nuestro componente ReportViewer y le añadimos uno nuevo que contiene el DataTable con los datos ya filtrados. Finalmente con el método Refresh() refrescamos los datos.
La segunda alternativa es más sencilla y el único código que habría que usar en el evento Click del botón ‘Filtrar’ es:
 ReportViewer1.LocalReport.Refresh();
Para ello yo utilizaré el origen de datos que se me ha agregado al proyecto llamado ObjectDataSource1 y lo configuraré para que en el método SELECT no me utilice el método GetData() que viene por defecto sino el método GetDataByGente(Int32 valor) que toma como parámetro un Int32 llamado valor que representa la población que el usuario ingresa en la caja de texto TextBox1. Visual Studio esto lo sabe y nos mostrará una pantalla para que le digamos donde se encuentra el origen del parámetro. Seleccionamos en ControlID  el TextBox1, que es el lugar donde el usuario indicará el número habitantes para que se filtre el informe por aquellos países cuyo número de habitantes es mayor o igual al indicado por el usuario en este TextBox1.
Como siempre  cuelgo un vídeo en el que todo quedará más claro.

Bueno en la siguiente entrada colgaré una pequeña aplicación relacionada con temas de impuestos y como una de las opciones de esta aplicación es la de generar pdfs expliaré el proceso de cómo crear pdfs de forma fácil, pero está vez tanto para Visual Basic como para Java, usando iTextSharp e iText.

189 comentarios:

  1. Hola amigo quiero que me orientes la verdad va ser la primera vez que hago informes, y los estoy haciendo con el elemento informes de Visual Basic.NET y el ReportView pero no se como por ejemplo yo tengo mi base de datos y quiero que me de un informe de cuantos alumnos por seccion ahi, pero que el usuario tenga la libertad de elegir la seccion que quiere para saber cuantos alumnos ahi en esa seccion elegida por el usuario, no se como se puede hacer orientenme, Lo hago en Visual Basic.NET (Windows Form) Y lo que publicaste es en C# Y Me confundo, quiero aprender a manejar ese elemento informes de Visual Studio D

    ResponderEliminar
  2. Buenas,
    el uso del reportviewer para visual basic es lo mismo. Las líneas de código son pocas.
    Lo que tendrás es una aplicación de Windows Forms con una base de datos supongo que local. En mi ejemplo es una base de datos mysql que está en un servidor, pero lo normal será una base de datos access o sql.
    Lo que tienes que hacer es al formulario arrastar el control reportviewer, se te agregará un dataset y sólo lo tienes que configurarlo.
    Como me dices quieres filtrar por sección. Es decir para la sección 1, por ejemplo, que se muestren los datos de los alumnos que están en esta sección.
    Lo que yo haría sería agregar un control combobox y al configurarlo haría que me muestre los valores de las secciones disponibles para que luego según el valor seleccionado del combobox se hiciera el filtro a los datos de la base de datos.
    Para ello en editar dataset con el diseñador al dataadapter habría que agregarle una consulta para que filtre por el valor seleccionado en el combobox. Es como lo que ves en el vídeo, lo que yo filtro por el contenido que el usuario entra en el textbox, pero en este caso sería cambiando el textbox por un combobox.
    Si quieres me dices como es el tipo y la estructura de tu base de datos y te ayudo.

    ResponderEliminar
  3. disculpe una consulta. como puedeo hacer calculos en una tabla en reportviewer donde ya tengo campos recuperados. lo que quiero hacer es por ejmplo multiplicar la columna 1 por la 2 y q me devuelva un resultado en la columna 3

    ResponderEliminar
  4. Buenas lo que tienes que hacer es agregar una nueva fila o columna y en esa nueva añadir una expresión. Si haces click con el botón derecho y vas a expresión, podrás generarla fácilmente ya que tendrás un listado con las expresiones y operadores más comunes. Por ejemplo así sería la multiplicación de 2 campos llamados Campo1 y Campo2:
    =Fields!Campo1.Value * Fields!Campo2.Value

    ResponderEliminar
  5. hola! una pregunta como hago la consulta si mi base de datos esta en access? vaya pues al intentar poner @valor en el diseñadorde consultas, no me lo permite.. no se si me explique

    ResponderEliminar
  6. Hola en bases de datos Access el símbolo de los parámetros no es el @ sino el ?

    Saludos,

    ResponderEliminar
  7. GRacias! una pregunta más, la parte que colocas en la imagen de definir parametros, no me aparece. no se si no es igual con el access, pero no hallo donde me diga lo del datasource :S
    puedes ayudarme?

    ResponderEliminar
  8. Hola, en teoría en Access también tiene que funcionar. Al añadir el control reportviewer he creado un nuevo informe y al crearlo se ha creado un dataset. Mira en tu proyecto porque tienes que tener un elemento que se llama en mi caso DatosDataset o el nombre que hayas puesto tú. Luego es sólo abrir y verás que te aparece una especie como de dibujo de una tabla y abajo aparece un DataAdapter llamado PaisesTableAdapter. Click con el botón derecho y agregas una nueva consulta, seleccionas select que devuelve filas y verás que hay un botón que es el generador de consultas y es así donde puedes poner los parámetros de tu consulta.
    Saludos,

    ResponderEliminar
  9. Hola Raul, tengo una duda referente a reportviewer, reporting services y vb.net. Estoy haciendo una aplicación en vb.net en la que cuelgo reportes hechos en reporting services a traves de reportviewer, estos reportes vienen con filtros los cuales aparecen en la ToolBar del reportviewer, mi pregunta es la siguiente, ¿Hay alguna forma de externalizar esos filtros para poder ocultar la ToolBar de reportviewer y de esta manera darle un formato mas "amigable"?, espero se entienda y gracias por tu tiempo

    Felipe Vázquez

    ResponderEliminar
  10. Hola, en Reporting Services como dices cuando creas un parámetro luego para filtrar los datos ha de aparecer en el Toolbar ya sea un textbox o un combobox... para entrar los datos. No sé si te servirá pero yo al trabajar con aplicaciones para Windows Forms a un formulario le añado un control reportviewer y en otro formulario añado varias cajas de texto que me servirán para hacer el filtrado y obtener un dataset con los datos filtrados que se lo pasaré al formulario donde tengo el reportviewer y configuro la propiedad datasourse del reportviewer a ese dataset y así de presentan los datos filtrados.

    ResponderEliminar
  11. Hola tengo una consulta, tengo una aplicación en vb.net que es para un punto de venta, solo emite boletas y facturas. Con las Boletas no tengo ningún problema pero con las facturas si, se me ocurrió utilizar los informes que trae visual basic los rdlc para emitir la factura, el encabezado me sale bien el rut del cliente y sus datos, y en el fondo de la pagina tengo una tabla donde sale el detalle de los impuestos mas el totla, neto,iva en cuadros de texto, El problema es con el Detalle de la factura, cuando agrego 5 o más productos me corre hacia abajo la tabla más los totales, y si agrego por ejemplo 20 productos el detalle de los impuestos y los totales me salen en otra página.Existe la manera de dejar esa tabla fija y esos cuadros de Texto?

    ResponderEliminar
  12. Hola, yo para tema de facturas tengo una cosa parecida: en el encabezado del informe tengo los datos para la emisión de la factura, en el cuerpo del informe el detalle de la factura con los detalles de los pedidos: las unidades, concepto, precio y total bruto, y en el pie de página aparece la base imponible, el desglose del IVA y el total factura. Tanto en el encabezado como en el pie tengo cuadros de texto. Lo que pasa es cuando hay muchas líneas de pedido lógicamente me aparece en más de una página pero para cada una de las páginas me aparecen siempre los datos de la factura, el número de página y en el pie los datos del IVA. Es una forma. Por lo que me comentas has agregado todo al cuerpo y lógicamente aunque le establezcas a la tabla que intente mantener todo en la misma página cuando el informe ya no tiene espacio se crea una de nueva. Prueba de añadir esos datos al pie de página para que se te repitan en cada página del informe, aunque el hecho que el desglose de iva te aparecezca sólo en la última página lo veo correcto, de hecho así viene en muchas facturas. Yo lo tengo en cada página los mismos importes porque me lo pidieron así.

    Saludos,

    ResponderEliminar
  13. Hola, quería hacer una pregunta
    Tengo un informe en el que relleno cuadros de texto mediante paso de parámetros con la instrucción
    ReportViewer1.LocalReport.SetParameters(New Microsoft.Reporting.WinForms.ReportParameter("NombreParametro", "VAlor")

    El caso es que quiero cambiar el color del texto del cuadro de texto según sea el valor del parámetros.

    ¿Cómo se puede hacer?

    Gracias, un saludo

    ResponderEliminar
    Respuestas
    1. El control reportviewer da bastante flexibilidad a la hora de trabajar con formato condicionales. Una cosa parecida que he hecho es según el valor de un campo (que sea negativo creo recordar) hacer visible o no un cuadro de texto y adjuntar información en él. Por lo que veo pasas un parémetro puedes tienes que poder crear un cuadro de texto y modificar el color según sus parámentros en las propiedades.

      Saludos

      Eliminar
  14. Buenas tardes:
    He visto tu blog y el articulo sobre los documentos de Hacienda del Intrastad y el impreso 303 y creo que me puedes ayudar.Te comento.
    Tengo una aplicación en access para llevar la gestión de unos alquileres. Cada trimestre con los datos de ingresos y gastos cubro el modelo 303 del IVA, para presentarlo en el banco cubriendo los campos del documento 303.
    Puedo evitar la presentación en el banco y hacerlo por internet y en una de las opciones de la pagina de la Agencia Tributaria me pide "Importar datos del fichero"y aquí es donde ya no se seguir¿Como se puede crear este fichero partiendo de los datos con los que yo cubro el modelo 303?En la pagina de la A.E.A.T. tienen el diseño de este registro (www.aeat.es/static_files/AEAT/Contenidos_Comunes/La_Agencia_Tributaria/Ayuda/disenyos_de_registros/Ayudas/trimestrales_Mensuales/303_2009.pdf), pero yo, la verdad no logro entender nada.
    Me podrías ayudar?
    Agradecido de antemano dejo mi correo:carlosramospalmero@hotmail.com

    ResponderEliminar
    Respuestas
    1. Hacienda para el 303 da 2 opciones. Presentar en papel o presentar con certificado digital. A las empresas sólo les deja con certificado digital.
      Ese botón de importar datos es para coger y leer un fichero de texto que contiene una cadena ordenada de carácteres cada uno en una posición concreta. La página lee y rellena el formulario con los datos. Aquí si tienes certificado pagas o domicilias en la cuenta que has incluido en el fichero y presentas el formulario con el NRC, todo por internet sin pasar por el banco.
      Si es un Access lo que se puede hacer es una query para que te genere esa consulta con los datos en la posición correcta y un poco de Basic para grabar el resultado de la consulta en un archivo.

      Saludos,

      Eliminar
  15. Caballero como esta!!
    Caballero necesito realizar un software para mi tesis y ya llevo mucho avanzado pero necesito realizar un informe que me guarde las mensualidades y los servicios que se le prestan a un determinado carro en un parqueadero y no eh podido realizar esto, para si usted me puede colaborar con esto o si tiene un correo electronico para enviarle mi proyecto para que en realidad mire lo que llevo , si no le incomoda que utilice su colaboracion por que en realidad la necesito Jose Londoño

    ResponderEliminar
    Respuestas
    1. Buenas si quieres me dices como llevas enfocado el proyecto y te puedo echar una mano y si tienes alguna duda te puedo ayudar a solucionar porque
      últimamente he estado un poco out del blog por temas de trabajo pero a ver si me pongo en las próximas semanas y estoy por aquí más presente.

      Eliminar
  16. Aqui codigos VB.Net 2010 --->http://ayudaveloz.blogspot.com/

    ResponderEliminar
  17. Hola oie una pregunta como puedo mandar un dato por calculado por codigo y que no se encuentra en mi BD a el informe.rdlc
    por ejemplo:
    Si realizo el calculo de un promedio apartir de un datos asignados por un usuario como puedo mandar el resultado del promedio a el informe.rdlc

    ResponderEliminar
    Respuestas
    1. Declarando una variable contenedora Publica

      Eliminar
  18. Buenas si lo que entiendo es que tienes base de datos pero ese dato no generas en tiempo de ejecución lo que puedes hacer es cálculo del promedio en el informe a través de otros datos que si dispongas y para eso puedes añadir una expresión.
    Si lo que quieres es pasar un parámetro al informe se haría a través de ReportParameter[] param = new ReportParameter[1];
    param[0] = new ReportParameter("nombre","valor");
    this.reportViewer1.LocalReport.SetParameters(param); y el mismo código que siempre para asignar el informe a la fuente de datos.
    Si por el contrario quieres generar un informe sin base de datos, por ejemplo con el contenido de los valores almacenados en una clase (por ejemplo una lista de personas de tipo tPersona -con nombre, apellidos, etc,-) deberías usar un ObjectDataSource.
    Saludos,

    ResponderEliminar
  19. Hola Raul soy Jose.
    Agradeceria mucho que me ayudaras tengo que realizar un filtro contra
    una base de datos de acces,con sql no tengo problemas lo estoy aciendo con un reportviewer el problema lo tengo al utilizar una variable de
    busqueda.
    Puedes realizar un ejemplo.
    Muchas gracias.
    Si no conteestas de todas maneras te felicito por la pagina la mejor que he visto.

    ResponderEliminar
    Respuestas
    1. Hola no sé si es lo que necesitas pero tengo un enlace a un proyecto sencillo que son 2 formularios, uno para entrar el nombre de un cliente y el otro es un formulario con un informe que se filtrará en función del nombre del cliente. Está en https://sites.google.com/site/raul252/catalog/Informes.zip?attredirects=0&d=1

      Eliminar
    2. Hola Raul como puedo hacer un reporte en mysql y report view que me filtre por parametros fechas por ejemplo de de la fecha1 a fecha2 muestres lo que este ..

      Eliminar
  20. cuando imprimo un informe en pdf en un informe ,, me sale una pagina de por medio en blanco,,, como hago para controlar eso
    gracias

    ResponderEliminar
    Respuestas
    1. Habilita la propiedad ConsumeContainerWhitespace de las propiedades generales de tu informe. Saludos.

      Eliminar
    2. NO ME SALE ESA PROPIEDAD ConsumeContainerWhitespace?

      Eliminar
    3. solucionado, movi mis cuadros de texto y tablas y Arraste el borde del cuerpo o del encabezado hasta 16cm y ya no me imprimio ninguna hoja en blanco de mas

      Eliminar
  21. Hola tendrás un ejemplo con parámetros en ASP.net con conexión a SQL Server porque estoy tratando de hacerlo y no se como ya voy 3 dias y nada.

    ResponderEliminar
    Respuestas
    1. Sobre si quieres te cuelgo uno, pero primero que versión de SQL Server. Si no usas la express la cadena será:
      cadena = "data source = .; initial catalog = BaseDatos; user id = Usuario; password = Contraseña"
      Pero si usas SQLEXPRESS será:
      cadena = "data source = .\SQLEXPRESS; initial catalog = BaseDatos; user id = Usuario; password = Contraseña"
      Una cosa lo haces con el asistente o vía código. ¿Qué error te da?

      Eliminar
  22. Buenas puedes probar de reducir el tamaño del contenido no sea que no quepa en un única página y aunque sea por mm te cree una segunda página el blanco.

    ResponderEliminar
  23. hola que tal tal vez algien pueda ayudar en mi problema:
    estoy trabajando con visual studio 2010 una aplicacion de escritorio pero tengo que generar reportes, ya tengo instalado el crystal report pero en mi aplicacion no se como mandar llamar el componente criystal repor viewer, alguien tendra una idea de como se hace===??

    ResponderEliminar
  24. hola quisiera saber si me pueden ayudar necesito hacer un reporte en don de me dija el numero final de hombres y mujeres que hay en sql me podrian ayudar por fas

    ResponderEliminar
  25. Hola buenas tardes, tengo un gran problema estoy haciendo una aplicacion para poder realizar facturas. El problemas es que necesito que cada 20 articulos me haga un salto de pagina y he probado en visual 2005 poner la expresion "int((rownumber(nothing)-1)/20))" en propiedades de ordenacion y agrupacion y luego marco salto el pagina. El problema es que en el reportviewer en 2012 no tengo ni idea donde ponerlo.
    Si sabes donde colocarlo o sabes algun metodo para que me haga el salto de pagina cada 20 articulos.

    ResponderEliminar
    Respuestas
    1. Si vas las propiedades de la tabla en la que te aparecen las líneas de los artículos que componen la factura, vas a la pestaña de filtros y añades una expressión como la siguiente:
      =Int((RowNumber(Nothing)-1)/20)
      El 20 es una nueva página cada 20 líneas

      Más info sobre más expresiones que se pueden añadir:
      http://msdn.microsoft.com/en-us/library/ms251668(VS.80).aspx
      Saludos.

      Eliminar
  26. Hola Raul!

    He descargado Visual Studio 2012 Express para escritorio y no encuentro el componente ReportViewer. Me falta algo por instalar?
    Gracias de Antemano

    Manolo Candela

    ResponderEliminar
    Respuestas
    1. Buenas en la versión Express no viene por defecto el control ReportViewer, sólo a partir de la versión profesional es cuando ya aparecerá el control en la barra de herramientas.
      Hay una alternativa que es antes de instalar cualquier versión Express instalar el SQL Server Express Runtime with Advanced Services y con él se instalarán las dlls que necesitas.

      Eliminar
  27. Gracias de antemano por la ayuda.

    He creado una aplicacion web en Visual Studio 2010 (C#) con conexion a Sql Server 2008. El problema que tengo es que cuando cargo cualquier reporte no me aparece el icono de imprimir (en la barra del reporte) y solo en el Explorer aparece pero cuando intento imprimir mas de 2 veces me tira el siguiente error:

    Nombre del evento de problema: APPCRASH
    Nombre de la aplicación: iexplore.exe
    Versión de la aplicación: 9.0.8112.16457
    Marca de tiempo de la aplicación: 50a2f9e3
    Nombre del módulo con errores: rsclientprint.dll


    Necesito ayuda porque ya prove de todo y la verdad como voy empezando a utilizar reportes me siento algo perdido

    ResponderEliminar
    Respuestas
    1. Aavo de encontrar la solucion y la comparto por si le pasa a alguien mas:

      1. En el menú Herramientas de Microsoft Internet Explorer, seleccione Opciones de Internet y, a continuación, haga clic en la ficha Seguridad.

      2. Seleccione la zona de contenido Web Sitios de confianza y, a continuación, haga clic en Sitios.

      3. Escriba la dirección URL del servidor de informes. Si utiliza Secure Sockets Layer (SSL), la dirección predeterminada es https:///reportserver. En mi caso que usaba la aplicacion en servidor local, solo es de agregar en Local Intranet http://localhost.

      4. Haga clic en Agregar y, después, en Aceptar.

      5. Haga clic en el botón Nivel personalizado. Desplácese hasta el nodo Controles y complementos de ActiveX.

      6. Haga clic en Habilitar para Descargar los controles ActiveX firmados y, a continuación, haga clic en Aceptar.


      Y ahora puedo imprimir las veces que quiera por lo menos en Internet explorer

      Eliminar
  28. Hola Raul, disculpa haber si me puedes ayudar con un problema,
    en mi base de datos de access tengo dos tablas en una manejo la información del cliente con clave principal su id, y en otra la venta, también tengo un campo id_cliente las dos tablas tienen relación.
    La pregunta seria, como hago un reporte de la tabla venta, pero que a partir de la id_cliente de esta me obtenga la información del cliente del tabla "Cliente" y me la muestre en el reportviewer.
    Si me pudieras ayudar Gracias de antemano

    ResponderEliminar
  29. Buenas lo que me comentas es hacer una tabla maestro detalle.
    Para cada cliente que tendrá su id vas a mostrar los detalles de las ventas que tiene ese cliente.
    Hay 2 alternativas: usar subreports o usar tablas anidadas.
    Yo he usado más el tema de subreports pasando como parámetro en este caso el id_cliente al subreport.
    Pero que sepas que hay 2 opciones. Si quieres ver más información y unos ejemplos mira
    la página http://www.gotreportviewer.com/masterdetail/index.html en el link 'download' hay
    links con proyectos para ver como funciona cada opción.

    ResponderEliminar
  30. Hola Raul tengo una consulta he estado batallando para un informe en visual studio 2010, mira te explico mejor, lo que quiero hacer es que cuando haga la consulta me mande los resultados en tres filas para imprimir unas etiquetas logro poner las tres filas pero no logro hacer que el informe me envié los registros de la base de datos en cada una de las filas si no que me da los mismos resultados en cada una de las filas y lo que necesito es que me llene la hoja con los resultados de la tabla y no que me repita los datos

    ResponderEliminar
    Respuestas
    1. explico un poco mas tengo una hoja tamaño carta que tiene 30 recuadros tipo etiquetas de 2.5 de ancho por 4.7 de largo dividido en tres filas de 10 etiquetas dentro de esas filas quiero poner los datos bueno logre acomodar los datos dentro de los recuadros pero en cada una de las filas me repite los datos recuadro 1 fila 1 un dato recuadro 2 fila 1 un dato así en toda la fila 1 pero me salen los mismos datos en la fila 2 y en la fila tres se repiten los mismos datos de la fila 1 y no lo requiero así necesito que me aviente los datos que tengo en la base de datos sin que se repitan en las filas tendrás alguna idea de como podría lograr ese cometido?? por tu atención gracias.

      Eliminar
    2. Hola lo que quieres hacer es imprimir etiquetas postales en un formato no de tabla sino añadiendo columnas 3 columnas a tu informe para que te aparezca los datos de cada fila de tu base de datos en una etiqueta.
      En http://www.codingbeaver.com/myblog/2011/02/03/how-to-use-reportviewer-to-create-addressing-label/ hay un tutorial donde muestra como configurar en el informe el número de columnas y en http://www.sourcecodester.com/visual-basic-net/reportviewer-mailing-labels-using-rdlc-report-vbnet-2010.html verás que donde pone 'download code' hay un ejemplo donde está prácticamente lo que buscas: base de datos, report que coge los datos de la base de datos e infome con varias columnas donde muestra los datos en forma de etiqueta y verás que no se repiten.
      Saludos,

      Eliminar
  31. Hola tengo un reporte hecho en REPORT VIEWER en el manejo una tabla donde tengo 3 agrupaciones..
    ______
    | ________ grupo 1
    | | ________ grupo 2
    | | |________ grupo 3
    | |________
    |______

    en el grupo 2 manejos PRODUCTOS, en el grupo 3 PROPIEDADES de los productos
    en el grupo 3 necesito mostrar la imagen del producto (grupo 2) pero si el producto tiene 3 propiedades entonces 3 veces me repite la misma imagen.

    COMO HARIA PARA QUE SOLO SALGA ESA IMAGEN UNA SOLA VES POR PRODUCTO PERO DENTRO DEL GRUPO 3

    ResponderEliminar
    Respuestas
    1. Hola, en teoría veo que tendrías que tener en la base de datos una tabla con dos datos de cada producto, que tendrá entre otras cosas la imagen del producto, y otra, relacionada por el id del producto, con las propiedades de cada producto. En sí mostrarías para cada producto, con su foto al lado, las varías líneas con las propiedades de ese producto en el report.

      Eliminar
  32. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  33. hola
    espero puedas ayudarme

    tengo dos origenes de datos en un reportviewer y necesito graficar esos dos orignes de datos en una sola grafica y la grafica solo me acepta un origen de datos mas no los dos, como le puedo hacer?

    ResponderEliminar
    Respuestas
    1. Hola qué tipo proyecto tienes? ¿uno para escritorio o una página aspx? Por lo que veo en 'Datos de informe' tienes 2 conjuntos de datos pero al crear el chart sólo te deja coger uno de ellos. Podrías coger y usar un objectDataSource que sería una clase que tendría los campos de las dos tablas y entonces usar ese origen de datos para la gráfica o crear un nuevo dataset que fuese una combinación de las 2 tablas y ese dataset sería el que usarías en el chart.

      Eliminar
  34. Hola , queria saber si tenes alguna idea de porque se pone muy lento
    al abrir el reportviewer.
    Tengo 10 parametros y dos imagenes.jpg que simulan un formulario para comletar.-
    Pero para acceder tarda casi 3.5 minutos, me parece exesivo .-
    Muchas gracias-
    Mi nombre es Sebastián

    ResponderEliminar
    Respuestas
    1. Si es bastante tiempo, lo normal es no pasar de 10 segundos. Mira el tamaño de las imágenes porque tarda mucho en renderizar todo.

      Eliminar
  35. Hola, estoy haciendo una aplicación y tengo que rellenar un documento (planilla) .doc (o puede ser pdf) con los datos que recolecto desde la aplicación, como lo puedo hacer? gracias!

    ResponderEliminar
  36. Pues crear un informe y al generar verás que en el menú del informe hay un botón que tiene la opcion de guardar el informe como word, excel o pdf. Otra opcion es crear un doc o un pdf con una de las librerias que hay.
    Saludos

    ResponderEliminar
  37. buenas tardes
    soy nuevo en esto de la programación quiero hacer un reporte con reportviewer pero la información se descarga todos los meses en excel osea me la entregan de esta forma lo quiero hacer es un programa que de acuerdo a esta información que me entregan la cargue en el programa y me genere un informe de acuerdo a las columnas que yo necesito pero también necesitaría colocar un filtro por cédulas, ejemplo cargo un excel con 200 personas al programa, que cuando yo quiera generar el reporte tenga la posibilidad de generarlo por la cédula que yo necesite ejemplo cargar un archivo txt con 50 cédulas que yo necesite filtrar el informe y me genere so lo esas cédulas, agradecería me aclaran esta dudas

    ResponderEliminar
    Respuestas
    1. Hola lo más sencillo que veo para tu caso es añadir los datos que necesites del Excel a un datagridview. A partir de ahí se pueden crear informes usando como orígen de datos no una base de datos sino un ObjectDataSource y creas en tu proyecto una clase con todos los getters y los setters de todos los campos que vas a usar. Creas lista de, por ejemplo, Clientes (que sería el nombre de la clase). Y añades un método añadir Clientes para añadir cada línea del datagrid a la lista. Con Linq puedes firmar incluso los datos de cada fila del datagrid según lo que necesites haciendo consultas. Luego llamas al informe y se te cargarán los datos de la Lista de Clientes.

      Más o menos así funcionaría. Si quieres me das más información y te indico más.

      Saludos,

      Eliminar
  38. Hola quisiera saber en que ocasiones se deberia utilizar report viewer y reporting services, gracias

    ResponderEliminar
  39. Hola el reportviewer es un control que tienes disponible en Visual Studio para generar informes tanto para aplicaciones de escritorio como para sitios web. Si no tienes informes creados en tu servidor se pueden crear con el control reportviewer. A partir de un orígen de datos puedes crear tu informes.

    Reporting Services es más una plataforma que viene con el SQL Server para la creación de informes en el servidor que se puedan acceder desde cualquier app cliente. Lógicamente tú crearás los informes en tu servidor, a los que podrás acceder desde las aplicaciones cliente que se conectan a ese servidor así tienes todos los informes siempre disponibles en tu servidor, y los puedes modificar allí y uso de los recursos será menor porque todo se procesa en el servidor. Para ello en tu aplicación cliente usarás el control reportviewer.

    Saludos,

    ResponderEliminar
  40. Ayuda por fa
    me sale el siguiente error en el navegador cuando ejecuto mi proyecto asp.net con base de datos en sql server

    Se ha producido un error durante el procesamiento local de informes.
    No se ha especificado la definición del informe 'Report1'
    Referencia a objeto no establecida como instancia de un objeto.

    ResponderEliminar
  41. Hola tienes que seleccionar un report o crear uno de nuevo en la pestaña de la izquierda del control reportviewer.

    Saludos,

    ResponderEliminar
  42. Ayuda por fa
    me sale el siguiente error en el navegador cuando ejecuto mi proyecto asp.net con base de datos en sql server

    Se ha producido un error durante el procesamiento local de informes.
    No se ha especificado la definición del informe 'Report1'
    Referencia a objeto no establecida como instancia de un objeto.


    estoy trabajandpondo en vb 2012 ayudame porfavor

    ResponderEliminar
  43. Ayuda por fa
    me sale el siguiente error en el navegador cuando ejecuto mi proyecto asp.net con base de datos en sql server

    Se ha producido un error durante el procesamiento local de informes.
    No se ha especificado la definición del informe 'Report1'
    Referencia a objeto no establecida como instancia de un objeto.


    estoy trabajandpondo en vb 2012 ayudame porfavor

    ya no se que hacer raul ayudame

    ResponderEliminar
    Respuestas
    1. Hola es porque no tienes seleccionado el report1. Crea uno nuevo o selecciona uno existente en la pestaña que aparece en el control reportviewer.

      Saludos

      Eliminar
  44. ya hice e4so muchas veces asi sale con el vb 2010 npero con el vb 2012 no sale asi de simple pruebalo tu mismo ese procedimeinto funciona con el 2010 pero el 2012 no ayudame porfavlr

    ResponderEliminar
    Respuestas
    1. GRACIAS,ERA JUSTO LO QUE NECESITABA

      Eliminar
    2. Deves incluir la direccion del path (ReportPath).



      Eliminar
    3. Estimado La Solución del problema:
      Se ha producido un error durante el procesamiento local de informes.
      No se ha especificado la definición del informe 'Report1'
      Referencia a objeto no establecida como instancia de un objeto.

      Cual sería? Hemos hecho de todo para mostrar el reporte y siempre nos cae el mismo error...
      Se han configurado los origenes de datos, se ha creado mil veces el Report1 y aun asi no nos ha funcionado. Hemos probado con Vs2010 y 2012
      Siempre el mismo error.
      Por favor una ayuda

      Eliminar
    4. Sandro Camacho Centellas24 de septiembre de 2015, 18:10

      Solucionado:

      Deben incorporar

      LocalReport rep=new LocalReport();
      rep.ReportPath="La ubicacion fisica";
      rep.ReportEmbeddedResource="NomReporte.rdlc";


      Eliminar
  45. perdón por mi ignorancia, pero quisiera saber si se puede hacer esto sin el asistente y si es así te pediría una pequeña explicacion

    ResponderEliminar
  46. Hola, disculpa la pregunta, es posible generar un reporte con columnas dinamicas, es decir, alimentarse de un Store Procedure y que la cantidad de columnas puedan variar cada vez que sea ejecutado, gracias de antemano.

    ResponderEliminar
    Respuestas
    1. En principio un store procedure te devolera como columas siempre las que tegas definidas como.out además de si tienes algún returnvalue. Pero siempre serán las mismas que le pasarás al.informe. Lo que podrias hacer es si para determinados valores no quieres que se te.muestre en el informe puedes añadir condiciones lógicas en el diseño del informe.
      Saludos

      Eliminar
  47. Hola, tengo un reportviewer y me interesaria poder imprimirlo de forma directa, cuando le de a un boton que salga directamente sin la aparicion de la vista previa. Un saludo y gracias.

    ResponderEliminar
    Respuestas
    1. Si abres el.informe.y le das al icono de la impresora te sale sólo el diálogo pata seleccionar impresora pero.no.la.vista previa. También podrías usando el control.printpage crear tu propio código para imprimir el informe sin necesidad del control.reportviewer.

      Eliminar
  48. Muchas Gracias ! Fue de mucha ayuda y utilidad esta información. Funciono tal como lo necesitaba

    ResponderEliminar
  49. hola raul tengo una pregunta. osea todo muy bueno pero cuando voy a configurar el origen de datos para decirle de donde me va a filtrar es decir del textbox bueno esa opcion no me sale, no se si es porque no me aparece la herramienta de el scriptmanager

    ResponderEliminar
  50. como hago todo eso desde codigo interno en c#

    ResponderEliminar
  51. Hola Raul:
    Estoy empezando y quiero crear un informe en una aplicación web (visual studio 2010, no usando cristal y código vb). He seguido tu tutorial y funciona pero el problema es que para que sean operativos quiero saber como, usando como orígenes de datos procedimientos almacenados con parámetros pasar los parámetros mediante código. El ejemplo que has puesto arriba como es C# no me funciona y no consigo dar con la sintaxis en vb.

    ResponderEliminar
    Respuestas
    1. Soy yo otra vez:
      Me funciona ya pero tengo otro problema. Quiero que se muestre directamente el informe cargado, pasándole desde otro sitio al sitio web los parámetros. Pero si pongo el código de arriba en el Page_Load se cuelga. ¿Alguna idea?

      Eliminar
    2. Hola tienes 2 sitios web en los que pasas información? Lo mejor es usar un servicio web que te permita consumir información en xml.
      Pero bueno si usas el método post ya sabes Request.Form["param"] y si usas el método get Request.QueryString["param"] Una vez almacenada la información en cada variable en principio en el load debería cargar el informe con los parámetros. No te olvides de poner el código dentro de if (!IsPostBack){
      }
      También prueba de cargar el informe pasando unos valores de prueba a los parámetros para lograr ver a qué es debido que se te cuelgue la página o añadiendo un breakpoint para depurar paso a paso el código del método load.
      Saludos,

      Eliminar
  52. hola raul,y de mas gente necesito una ayuda si tu puedes, estoy comenzando con esto y nose como hacerlo. bueno lo que quiero hacer es lo siguiente, un formato de factura preimpresa nose si me podes ayudar,yo estoy usando sharpdeveloper como hago para usar reportvier, se puede usar por que no lo veo en los controles. mi correo es : hpscomputos@gmail.com
    desde ya muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola creo que la versión express está limitada en algunos controles como el reportviewer. Pero siempre se puede añadir ese control.
      En http://www.vbforums.com/showthread.php?717175-How-to-use-Report-Viewer-with-Visual-Studio-2012-Express te explica cómo. Sobre hacer facturas si me envias el proyecto te lo puedo intentar acabar porque yo tengo cosas desarrolladas similares.

      Saludos,

      Eliminar
  53. Hola Raul
    Tengo un proyecto en visual studio 2008 con visual basic. Dentro del mismo agrego un nuevo proyecto de servidor de informes. Aqui creo correctamente los reportes con extension rdl. Necesito publicar estos reportes en mi proyecto inicial en paginas aspx con el control reportviewer. La base de datos esta en sqlserver 2008.

    La pagina aspx tiene el siguiente codigo inicial:

    <%@ Page Language="VB" MasterPageFile="~/Diseño/MasterPage/MasterListado.master" AutoEventWireup="false" CodeFile="rpAcudiente.aspx.vb" Inherits="Reportes_Basicas_rpAcudiente" title="Untitled Page" %>

    <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="repweb" %>

    <%@ MasterType VirtualPath="~/Diseño/MasterPage/MasterListado.master" %>










    Hasta aqui llegue. Por favor y me puede colaborar en que estoy fallando?. Gracias.

    ResponderEliminar
  54. Estimado q cuando quiero visualizar el Reporte me sale el siguiente mensaje:

    Se ha producido un error durante el procesamiento local de informes.
    No se ha especificado la definición del informe 'Report1'
    Referencia a objeto no establecida como instancia de un objeto.

    Esta enlzado en mi Control ReportViewer, pero nose q pasa.....

    Gracias

    ResponderEliminar
    Respuestas
    1. Hola tienes que seleccionar o crear un informe con la pestaña de elegir informe del reportviewer

      Eliminar
    2. aunque se seleccione el informe con la pestaña sigue teniendo ese error debe haber otra solucion,

      Eliminar
  55. muy buen aporte, sobre todo lo que me interesó es que se puedan imprimir facturas, o sea puedo llegar a ese nivel???

    ResponderEliminar
  56. Estimado Raúl tengo una consulta, que pasa si yo tengo varios tipos de formato de facturas y según el username y pwd, se que formato de factura será la que debo utilizar,

    Pregunta:
    ¿ Se puede hacer que el reportviewer obtenga dinámicamente el formato de la factura a imprimir (una grande u otra pequeña, etc), según el tipo de usuario autenticado?

    Actualmente tengo varias plantillas HTML que según el usuario autenticado se pasan a una variable se llenan con data y con genera un popup con la factura se aplasta ctrl+p y se manda a imprimir

    ResponderEliminar
    Respuestas
    1. seria varios informes y en tiempo de ejecución cambias de uno a otro según el usuario.

      Eliminar
  57. hola... bueno estoy manejando mongodb y quiero sacar reportes.... como lo hago???

    ResponderEliminar
    Respuestas
    1. Primero busca el driver para conectarte a la base de datos y con él debe ser igual que trabjar con cualquier otro motor de bases de datos.

      Eliminar
  58. Hola, en el tema de facturación

    Las empresas tienen formato didtinto de las facturas, como hago para cambiar el formato en tiempo de ejecución y no en diseño, u otra alternativa

    ResponderEliminar
    Respuestas
    1. Hola, pues tendrás varios formularios cada uno con un control reportviewer con un informe diseñado. Pues es tan sólo llamar a un formulario o a otro según el que necesites.

      Eliminar
  59. Hola Raul ,buen dia,queria hacerte una consulta con respecto a un reporte que estoy realizando,la idea es que no use ninguna base de datos ,sino que lo saque a los mismos de un datagridview,que ese siempre va a tener datos,tiene solo dos campos el reporte,seria como una vista previa,ya que no queda registrado en ningun lado.mi proyecto es en visual basic 2010 .net. El codigo es el siguiente

    Dim dt As New DataTable

    With dt
    .Columns.Add("Fecha")
    .Columns.Add("Turno")
    End With
    For Each dr As DataGridViewRow In Me.DataGridView1.Rows
    dt.Rows.Add(dr.Cells("Fecha").Value, dr.Cells("Turno").Value)
    Next
    Dim rptdoc1 As CrystalDecisions.CrystalReports.Engine.ReportDocument
    rptdoc1 = New CrystalReport1
    rptdoc1.SetDataSource(dt)

    Form1.CrystalReportViewer1.ReportSource = rptdoc1
    Form1.ShowDialog()
    Form1.Dispose()

    queria que si me podes orientar un poco con el codigo que estoy haciendo mal,el tema se me complica porque no usa una base de datos,asi seria un poco mas sencillo.Desde ya muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola en este caso tendrás que usar un objectdatasource y crear una clase con las propiedades que vas a usar.
      Hola, creamos una clase llamada Datos con las propiedades Fecha y Turno. Luego cuando generes el report pasa los datos a esta clase. Por ejemplo crea una clase que tenga una List (of Datos) de la clase Datos y añades los datos a lista en cada lectura de cada fila del datagrid. Una vez rellenos los podrás recuperar con el método getDatos que te retorne la List (of Datos) y con eso ya tienes el datasource del informe que será una lista de Datos.

      Eliminar
  60. Hola Raul, esta muy bueno tu codigo, me funciona de maravilla, pero al momento de querer imprimir el informe se cuelga el internet explorer y se cierra la app, necesito instalar algo adicional?

    Saludos y gracias.

    ResponderEliminar
    Respuestas
    1. Hola ¿el informe dónde lo tienes instalado?
      ¿Lo tienes en local o lo has subido a un server?
      Yo en estos casos lo que haría es probar en otro ordenador por si te dá el mismo error por temas de configuración del explorer que bloquee algo. En principio prueba en local y a ver si podemos ver qué excepción te da. Intenta cambiar la impresora que tienes predeterminada por otra.

      Eliminar
  61. Hola Raul, Tengo un proyecto Web con .Net 2008, cuando ejecuto el ReportViewer en modo Local me muestra los datos pero cuando lo subo al servidor me muestra el reporte pero sin datos. No me muestra ningún mensaje de error. Si me puedes ayudar te lo agradecería mucho!
    Att: Cesar Osorio

    ResponderEliminar
    Respuestas
    1. Hola ¿cómo se conecta a la base de datos del servidor?
      Si usas sql server mira que tengas el usuario creado y los permisos para acceder a los datos. Por lo que veo no te arroja ninguna excepción. Intenta probar primero a ver si se conecta bien desde tu report local a tu base de datos en el servidor y así prodrás depurar a ver qué datos recupera.

      Eliminar
    2. Gracias por responder. La base de datos la tengo en un Servidor SQL y tengo todo el acceso necesario: ingreso datos, los consulto, elimino, pero al cargar los reportes directamente desde la aplicación compilada en el servidor Web no me muestra resultado alguno en el IE, con el Chrome me muestra "HTTP Error 404.0 - Not Found
      The resource you are looking for has been removed, had its name changed, or is temporarily unavailable."

      Module ManagedPipelineHandler
      Notification ExecuteRequestHandler
      Handler ReportViewerWebControlHandler
      Error Code 0x00000000

      Le tengo cargados en la bin las dll's: Common, ProcessingObjectModel, Webforms y Winforms del ReportViewer.

      Eliminar
    3. Gracias Raul, el administrador del servidor tenía las dll's bloqueadas. Eres muy amable, Dios te bendiga!

      Eliminar
  62. Como generar un reporte en un sitio web en visual studio 2012 c# pero que no sea en web form y después como guardar ese reporte en el correo o en el equipo, también como es el código para poner una foto en el registro y configurar el tamaño en visual studio 2012 c#

    ResponderEliminar
    Respuestas
    1. En una página aspx se puede añadir un report y lo puedes exportar o si lo prefieres sobre la base de datos puedes hacer una consulta y generar un pdf con la librería iText que lo envías por correo directamente.
      Una foto es solo añadir campo imagen y que lo recupere de la base de datos todo y que yo soy contrario a guardar fotos en la base de datos. En su lugar es mejor un apuntador al fichero de la foto.

      Saludos,

      Eliminar
  63. Raul Hola, gracias por tu post me ha servido muchisimo, tengo un inconveniente cuando creo el .exe de mi aplicación se instala normal, pero cuando voy a probar los reportes no encuentra la ruta especifica que debo hacer para que se incluya dentro del archivo de instalación? gracias de ante mano por tu ayuda.

    ResponderEliminar
  64. Se me olvidaba, estoy programando aplicaciones para escritorio de windows con C#.

    ResponderEliminar
  65. Hola si añades el control a un formulario no tienes que tener problemas. Tienes que elegir en la pestaña del control el informe xxx.rdlc. Yo los tengo en el mismo nivel que los fomularios de la aplicación pero si están en una carpeta propia los .rdlc también los detectará porque tú los seleccionas en el control.
    Para empaquetarlo en un instalador no te olvides de añadir como mínimo las dlls Microsoft.ReportViewer.Common, Microsoft.ReportViewer.DataVisualization, Microsoft.ReportViewer.ProcessingObjectModel, Microsoft.ReportViewer.WinForms. Porque así, ¿qué error te da al ejecutar la aplicación y llamar al report?
    Mira en propiedades del proyecto--> publicar --> archivos de aplicación a ver si se incluyen o no.
    Saludos,

    ResponderEliminar
  66. Hola Raul tengo una preguntota estoy utilizando el driver Npsql version 9.0 de postgres,Todo lo realizo bien desde mi origen de datos, no tenmgo problemas con el Dataset, Mi problema comienza al hacer un filtrado desde el tableAdapter al crear mi consulta y filtrar un campo = @valor me aparece error de consulta. no soportada.
    Te lo agradesco si me puedes ayudar.
    Saludos!!

    ResponderEliminar
  67. Me he dado cuenta que el error sucede al realizar el filtro en una columna de tipo de dato entero ¿cual seria la forma de agregar un filtro en esos tipos de datos estoy desarrollando un webform con DB postgres?

    ResponderEliminar
    Respuestas
    1. prueba con ? en lugar de con @valor porque sólo en bases de datos sql es el @valor. tiene que ser como en access o mysql con ?

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
    3. no me funciono el ?,
      De echo con @valor que explicas en u video me funciona el filtro en campos de tipo varchar.
      En lo personal me interesa hace una consulta a un id_campo de tipo int4, el error es el siguiente " Error de Tipo de Datos en la Expresión".

      como puedo sulucionar esto!
      Saludos!

      Eliminar
    4. Hola el motor de bases de datos postgres no lo tengo instalado. Tiene que ser como si un integer lo considerará como string. Porque a la hora de editar el dataset con el diseñador verás la tabla y si vas donde pone TableAdapter y agregas una query en principio tienes el generador de consultas y puedes testearla y ejecutarla para hacer una vista previa de los datos y es allí donde me dices que te aparece ese error. Empieza haciendo SELECT * FROM Tabla WHERE Campo = '1' porque seguro que es por el tipo de campo de la tabla y miramos.

      Eliminar
  68. Hola Raul, tengo un consulta, estoy haciendo un proyecto en VB2010 asp.net y tengo problemas a generar un reportview. El problema se presenta cuando configuro el ObjectDataSource, en realidad no lo configuro, al hacer un nuevo reporte se enlaza solo el ObjectDataSource pero este no es capaz de encontrar el Dataset que se genera, yo lo veo en le panel de soluciones y lo edito, pero cuando trato de asignarlo al ObjectDataSource lo veo, pero me dice que "No se puedo cargar el objeto", haber si me hechas una mano.
    saludos
    Álvaro, Chile

    ResponderEliminar
    Respuestas
    1. Hola ¿el objeto que usas como origen de datos es una clase?
      En http:// www.gotreportviewer.com/objectdatasources/index .html tienes un ejemplo de un formulario que tiene un reporte que usas un objectadasourece que es una clase.
      Si no te funciona me envías tu proyecto y miro de configurartelo.

      Saludos,

      Eliminar
  69. Hola Raul tengo una consulta para usted, me gustaria saber como hacer, para escoger preguntas con diferentes id de una tabla de sql desde visual (el programa que estoy tratando de hacer es que se imprima de forma randomica las preguntas almacenas en una base de datos) estoy utlizando like (J%), pero solo me escoge con la letra J, de a materia JAVA, y la idea es esa que escoja las preguntas randomicamente por medio del Id, pero debe de ser de cada materia no mezcladas y eso es lo que me sucede en la forma randomica escoge todas las preguntas de todas las materias y eso no me sirve .......ayudeme porfis es urgente

    ResponderEliminar
    Respuestas
    1. Creo que se puede hacer con subquerys o con código.
      Con código tendrías que hacer una consulta que te escoja todos los ID las preguntas de la materia seleccionada. Todos los id seleccionados se ponen en un arraylist:
      ArrayList lista = new ArrayList ();
      lista.add(1);
      lista.add(3);
      lista.add(5);
      lista.add(7);
      lista.add(12);
      Collections.shuffle(lista);
      System.out.println(lista.get(0));
      y de esta manera vamos seleccionado ids al azar. Luego hay que hacer otra consulta.
      Creo que con el IN no te funcionará porque no sé qué versión se sql si coge parámetros. Otra alternativa es añadir AND a la consulta para seleccionar 2 o 3 ids o trabajar con tablas en sql.
      SELECT * FROM MITABLA WHERE ID IN (1, 5, 12)
      Saludos,

      Eliminar
  70. Hola Raul muy bueno tu post.Veo que aki tocan temas relacionados con reportes que generan desde VisualStud y quiero planteales mi problemita.El tema es que tengo un programita hecho que me genera un grupo de tabpages simulando las diapositivas deun ppt. Ahora quiero pasar la info de estos tabspages a diapos de un ppt. Esto se complica tragicamente pk cuando creo un nuevo doc powertpoint no consigo meterle los elementos de mi formulario sino que genera elementos predeterminados que además tienen sus propiedades de solo lectura o sea no me dejan asemejarlo a mis controles del windows forms mediante el código. Mi pregunta es si conoces algún tipo de manera quecon estos ReportsViewers u otro Generador de Reporte de VS me genere ppt desde un Wind Forms

    ResponderEliminar
  71. hola Raul soy estudiante de universidad y tengo que entregar un proyecto, me puedes ayudar por favor, mira tengo una aplicación para matriculas y necesito que imprima ciertos datos de la matricula que están en cajas de texto y en datagridview y las notas de los estudiantes que están en un formulario aparte. Me podrías ayudar por favor diciéndome como hacerlo, Gracias

    ResponderEliminar
  72. Hola Raúl, gracias de antemano por tu aportación con este Blog.
    Mi pregunta es simple, creo, pero me trae de cabeza. He empezado hace una par de días con ReportViewer y he creado un programilla en c# que, mediante una consulta, cargo datos para sacar etiquetas de artículos. He creado el report y ajustado los campos etc.. Mi problema es que, tengo un papel de etiquetas trokelado que tiene dos columnas y tres filas, 6 etiquetas en total. He configurado la tabla en el reporte y en la primera columna sale perfecto pero no se como rellenar la segunda columna, ¿ como puedo hacer para que me imprima en dos columnas y no solo en una?... Gracias por todo, un saludo

    ResponderEliminar
    Respuestas
    1. Hola mira a ver si este articulo te sirve para la impresión de etiquetas.Yo así es como lo hago para hacer etiquetas identificadoras para documentación contable:
      www.learningpenguin.net/myblog/2011/02/03/how-to-use-reportviewer-to-create-addressing-label/

      Saludos,

      Eliminar
  73. Hola tengo un problema con el SAP de crystal reports estoy utilizando Visual studio 2012 no me toma el tamaño personalizado de media carta me podrías orientar por favor Gracias

    ResponderEliminar
    Respuestas
    1. Hola ¿pones las unidades como 'inches' no como centímetros?

      Eliminar
  74. Hola Raul tengo varias semanas tratando de hacer un reporte con datos filtrados y solo tengo fracasos e intentado de varias maneras y nada, pero me puse detenidamente a ver tu método y es el que mas se ha acercado. Tengo una base de datos con Varios Clientes y quiero hacer el reporte pero filtrados en una Aplicación de escritorio pero me da error no se que tipo de error es el que estoy cometiendo es frustrarte cuando no lo encuentras. Segui tus pasos y me dio error al cargar los datos osea en el Fill

    ResponderEliminar
    Respuestas
    1. Hola el método es filtrar el dataset usando el dataadapter y pasar al reportviewer el dataset filtrado. Yo lo que creo es una query que devuelve todos los registros y la llamo FillByAll y otra que devuelve los registros filtrados -y uso una u otra según lo que necesito-. Por ejemplo si filtras por NIF sería FillByNIF. A la hora de crear la query puedes hacer una vista previa de los datos que te devuelve el SELECT según los parámetros que pasas. Pero lo que no sé es si el error te sale con el FillByAll, mostrando todos los datos, o con la query que te filtra datos por NIF, en mi caso.
      Si el error es en el primero seguro que tiene que ver con la base de datos y cómo se conecta a los datos de la tabla y si es el el segundo es sobre cómo escribes el SELECT ya que alguna parte de la expresión está mal. Puede ser el @ delante de los parámetros en bases de datos SQL o MySQL o el ? en bases de datos Access. Dime que motor de bases de datos usas y más detalles del error.

      Eliminar
    2. Estoy usando SQL server 2012 en la barra de errores dice:
      No Overload For Method ¨FillClientes¨ takes 2 arguments

      Gracias por tu respuesta!

      Eliminar
    3. Hola te dice que tienes un método, que se llama FillClientes, y no hay ninguna sobrecarga que tome dos argumentos.
      Como sabes un mismo método con un mismo nombre puede tener diferentes sobrecargas y cada sobrecarga puede tomar un número diferente y tipos diferentes de parámetros y es lo que lo diferencia de otro con el mismo nombre.
      Por ejemplo yo tengo el método FillByProf(nombre, nif) que recibe 2 parámentros, el nombre y el nif. Pues en el Select para consultar los registros de la base de datos Profesioonales habré puesto un código como por ejemplo SELECT Apellidos, Cuenta, NIF, Nombre FROM Profesionales WHERE (Nombre LIKE ? & '%') OR (NIF LIKE ? & '%')
      Está consulta está en Access en SQL Server pondría ser SELECT Apellidos, Cuenta, NIF, Nombre FROM Profesionales WHERE (Nombre LIKE @valornombre & '%') OR (NIF LIKE @valornif & '%')
      Como ver luego llamaría al método ProfesionalesTableAdapter.FillByProf(ProfesionalesDS.Profesionales, nombre, nif)

      Eliminar
  75. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  76. Hola Raul
    Lo que estoy tratando de hacer es un reporte filtrando clientes desde la base de datos, descargue un link que dejaste en un comentario de arriba en el cual usas dos formularios y Acces para filtrar clientes y crear el reporte ese me cae como anillo al DEDO pero no lo puedo visualizar en mi PC porque esta en VB y lo yo uso C# si tan solo pudiera abrir el proyecto para ver el código que usas seria genial, tienes ese mismo project pero en C#? o me puedes facilitar el código?

    Gracias de antemano, Tengo varios días buscando esto si pudieras ayudarme y responder para saber por lo menos te lo agradeciera me ayudarías un montón con esto.

    ResponderEliminar
    Respuestas
    1. Hola qué versión de VS utilizas porque yo uso el VS 2010 y no sé si tienes una versión Express se te abriría el proyecto. Si quieres este fin de semana te lo traduzco a C# que es un momento y te paso el link al proyecto.

      Saludos,

      Eliminar
    2. HOLA!
      Lo que pasa es que uso la versión 2012 no es Express te agradecería mucho si lo traduces...
      Estaré visitando el Blog el fin de semana para si traduces el código verlo y adaptarlo.

      Gracias de Antemano.

      Eliminar
    3. Hola si tienes el VS profesional si quieres te paso un link a un proyecto en C#. Dime qué base de datos usas y qué es lo que quieres que haga el formulario, ¿sólo filtrar clientes y mostrar un lista de ellos?

      Eliminar
    4. Lo que deseo hacer es Filtrar clientes y poder imprimir un reporte del cliente o los clientes filtrados por medio de ReportView .
      Actualmente estoy usando SQL Server 2012.

      Eliminar
    5. Hola en
      //sites.google.com/site/raul252/catalog/Informepaises.zip?attredirects=0&d=1 he comenzado colgando el proyecto que he usado e iré colgando más ejemplos.

      Saludos,

      Eliminar
  77. Hola muy buenas, en estos momentos tengo una aplicación realizada en VB .NET y utilizo los servicios de reportes de SQL (Reporting Services) para la administración de los informes ó reportes. El asunto que tengo es que el usuario final está inquieto por una "infantilada" si se le puede llamar así, pero por esa infantilada me he dado dolores de cabeza. Todos sabemos que ReportViewer tiene una opción de exportar el informe a diferentes formatos (Excel, Word, PDF, etc), ps el "detallito" es que al querer exportar el informe a Excel, éste le termina combinando celdas en el contenido. Mi pregunta seria... ¿Existe alguna forma de hacer que el ReportViewer no combine celdas y sin alterar el formato y contenido del informe al exportarlo al formato de Excel?.. Sino simplemente le digo al usuario que no se puede y ya :-P.... De paso muchisimas gracias. Está muy bueno el sitio, hay mucho contenido de conocimiento, un 100 para tu sitio Raúl.

    ResponderEliminar
  78. Hola te refieres a si tienes diseñado un informe con una caja de texto, a la hora de abrir el informe y exportarlo a Excel, además que no respete los márgenes -cosa que pasa en el Visual Studio 2010 y que tiene solución-, para que se vea todo el contenido de la caja de texto éste se combina en varias celdas o incluso no se muestra todo el contenido si su ancho es superior al de la caja de texto. Además si tienes varias cajas de texto no alineadas de forma horizontal (se pueden alinear no arrastrando porque no queda bien sino cambiando sus propiedades de posición) es posible que se te creen 2 filas en el Excel para cada caja de texto y no queden bien.

    Para ello la solución más sencilla y la que yo he utilizado es añadir un botón de crear un Excel y de la misma manera que se puede generar un informe por pantalla doy la posibilidad de guardarlo en un Excel con la estructura que quiero. Lo genero usando unas de las librerías disponibles para crear Excels para .NET y así ofrezco esa posibilidad.

    ResponderEliminar
  79. Hola Raul, tengo una pregunta, como hago para contar celdas de un report que no estén vacias.

    Gracias
    Julian

    ResponderEliminar
  80. Buenas tardes,

    me pongo en contacto contigo para saber si me podrías ayudar con un problema que tengo con los reportviewer con columnas dinámicas.
    Te cuento, tengo que mostrar un listado con las sumas totales de gastos de el año actual y también de años anteriores, pero el problema es que los años anteriores los define el usuario. Con lo cual puede haber que un informe tenga el año actual más los 3 años anteriores, o que tenga 5 años anteriores.

    No sé ni como crear el dataset ni como utilizar la matriz para mostrar estos datos.

    Gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Hola generar el Dataset y el informe es lo mismo que generar cualquier report. Lo generas con todas las columnas, los 5 años. Y aquí lo que yo haría es según lo que el usuario seleccione pues mostraría unas columnas o unos datos u otros.
      Yo por ejemplo tengo una aplicación para facturación y según sea el cliente empresa o particular muestro unos campos u otros en la factura, pues sería lo mismo tienes todos los datos en el report y si son 0 puedes cambiar la visibilidad de la celda a través de una condición lógica en la expresión que determina si se muestra o no.

      Saludos,

      Eliminar
  81. Buenas, me contacto con vos porque tengo un problemas para conectar mi dataset al reportviewer, soy nueva en esto de programar en .net me aparece este error al compilarlo
    "Se ha producido un error durante el procesamiento local de informes."}

    Saludos!!

    ResponderEliminar
    Respuestas
    1. Buenas, el problema que te puedes encontrar es que una vez agregado un control reportviewer a tu formulario; una vez elegido el origen de datos que vas a usar, donde indicas dónde están los datos o qué base de datos vas a usar, y una vez creado el informe y seleccionado éste en la pestaña que tienes a mano superior derecha del control reportviewer, veas que al ejecutar la aplicación que no te aparece nada o te da error.
      Es vía código donde cargas los datos en el dataset:
      Me.MiTableAdapter.Fill(Me.MiDataset) y refrescas el informe con
      Me.ReportViewer.RefreshReport()

      Pero el error que tú tienes me suena a que estás distribuyendo la aplicación, creando por ejemplo un instalador, y no has añadido a la carpeta donde se instala la aplicación todas las librerías necesarias para ejecutar el informe. Éstas son:
      Microsoft.ReportViewer.Common.dll
      Microsoft.ReportViewer.DataVisualization.dll
      Microsoft.ReportViewer.ProcessingObjectModel.dll
      Microsoft.ReportViewer.WinForms.dll
      Microsoft.SqlServer.Types.dll (si usas base de datos SQL o SQLLite)

      Eliminar
  82. Hola, como hago para mandar a imprimir directamente y sin sacar la vista previa"???

    ResponderEliminar
    Respuestas
    1. Otra cosa, existe alguna forma para saber cuantas paginas imprimio??? Es para rubricar el libro de iva. Muchas Gracias

      Eliminar
    2. Buenas, en el footer del informe se puede añadir el número de páginas arrastrando al informe desde 'Datos del informe' el campo integrado 'Número de página'. No sé si esto te sirve.
      Para la pregunta de si se puede imprimir informe hay que crear el método Print, como si se escribiese el códig para imprimir un documento, que se llamará cuando pulse en un botón Imprimir que se añadirá a la barra del informe. Más info:
      http://msdn.microsoft.com/it-it/library/ms252091.aspx



      Eliminar
  83. hola Raul .. me puedes dar una mano estoy programando en silverligth con el patron MVVM
    pero ahora me he cruzado con una pared de los reportes
    ya que no puedo mostrarlo
    me figura que no se ha espeficiado una deficion para report1.rdlc.

    me pueds ayudar .. gracias

    ResponderEliminar
  84. lo acabo de solucionar pero no se si la solucion fue .... instalarle el reporting service 2012
    o llamar a todas las tablas de la base de datos ...
    ??????
    Me puedes indicar por que no sale el boton imprimir .... en el report viewver ???

    ResponderEliminar
  85. Necesito ayuda con este error, estoy programando con visual studio 2012 en VB, al abrir por 1ra vez un informe lo puedo imprimir, pero la segunda vez ya no me lo imprime y me marca este error, que asumo como problema de liberación de recursos.
    He buscado y no he podido dar con una forma efectiva de liberar las instancias... intente con form.dispose() en el evento form_closing, pero no se bien en que evento ponerlo porque no me funciono, ni si tengo además que liberar datasets, datatables, datagrids, viewreports, etc o si hay alguna rutina ya hecha para liberar todo cuando cierro alguna ventana MDI
    saludos y gracias
    Necesito ayuda con este error, estoy programando con visual studio 2012 en VB, al abrir por 1ra vez un informe lo puedo imprimir, pero la segunda vez ya no me lo imprime y me marca este error, que asumo como problema de liberación de recursos.

    He buscado y no he podido dar con una forma efectiva de liberar las instancias... intente con form.dispose() en el evento form_closing, pero no se bien en que evento ponerlo porque no me funciono, ni si tengo además que liberar datasets, datatables, datagrids, viewreports, etc o si hay alguna rutina ya hecha para liberar todo cuando cierro alguna ventana MDI

    EL ERROR DEL DEBUGGER ES ESTE:
    Ocurrió System.AccessViolationException
    HResult=-2147467261
    Message=Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada.
    InnerException:

    EL INTELLITRACE MARCA ESTO:
    Excepción:Se produjo: "No se pudo encontrar el archivo 'C:\Users\lks\AppData\Local\IsolatedStorage\mkjmyjun.abm\fh2wjlsf.402\Publisher.wxjk2uaa1zo255cf33wt41hvo2aqpsds\AssemFiles\ReportPageTempFile-5c371af2-6237-4cbb-97d8-345b192da998'." (System.IO.FileNotFoundException)
    Se produjo una System.IO.FileNotFoundException: "No se pudo encontrar el archivo 'C:\Users\lks\AppData\Local\IsolatedStorage\mkjmyjun.abm\fh2wjlsf.402\Publisher.wxjk2uaa1zo255cf33wt41hvo2aqpsds\AssemFiles\ReportPageTempFile-5c371af2-6237-4cbb-97d8-345b192da998'."
    Time: 24/09/2014 01:17:16 p.m.
    Subproceso:Rendering[3484]

    ResponderEliminar
  86. hola necesito ayuda, he seguido tu ejemplo y he hecho uno igual pero cuando le doy clic al boton generar por segunda vez no carga no pasa nada... solo genera el reporte cuando le doy clic por primera vez... uso asp.net con c# y vs 2012, y en el evento si tengo reportviewer1.localreport.refresh() ...

    ResponderEliminar
    Respuestas
    1. tu error es similar al mio, solo que en mi caso es cuando mando a imprimir la segunda vez, pienso que es un error de liberación de memoria, con que construiste tu reporte? yo lo hice desde el asistente... si sabes de algo, te agradecería lo publicaras

      Eliminar
    2. yo lo hice con codigo en c# en, yo tengo 2 dropdownlist uno grupo y otro categoria, el grupo tiene un autopostback= true y AppendDataBoundItems = true en el lado de asp, y categoria se llena en el evento selectedchangedIndex del grupo le doy generar y funciona la primera vez, selecciono otra categoria...ya no me funciona.... pero si selecciono otra vez un grupo, y una categoria si funciona, creo que funciona por el auto postback pero... tengo que estar cambiando grupo para genrarlo de nuevo y no he podido solucionarlo... pero si lo soluciono te aviso

      Eliminar
    3. no has probado borrar los archvos temporales... que te marcan en esa direccion, a mi me pasaba algo similar con una referencia, y la referencia si estaba, pero decia que la dll no estaba... lo que hice fue borrar la carpeta bin y obj del proyecto(o bien cortar y pegar en otra carpeta fuera del proyecto) y generar la solucion o el proyecto nuevamente y te creara las carpetas otra vez... si no has probado deberias hacerlo..

      Eliminar
    4. agregale el postbackurl="urldemipaginadondeestaelreporte.aspx" en mi caso es la misma pagina supongo que en el tuyo igual.... espero lo soluciones

      Eliminar
  87. pues mi problema lo resolvi con un postbackurl="mipaginaactual.aspx".... ya me genera el reporte mas de una vez...

    ResponderEliminar
  88. se lo agrege al boton generar en el lado de asp y no en el code behid

    ResponderEliminar
  89. Buenas tardes caballero, disculpen la pregunta es para el moderardor la coloque donde no era, , mira tengo una duda estoy aprendiendo vb2010 y crXIII para VB2010, mira este es el codigo de un reporte
    Try
    'crear dataset
    Dim dset As New DataSet
    'seleccionar los registros de las bases de datos
    codifica = "SELECT * FROM EFEDERAL"
    enca = "SELECT * FROM ENCABEZADO"
    'CARGAR LOS DATATABLE
    Dim TABCODI As New OleDbDataAdapter(codifica, Conn)
    Dim TABENCA As New OleDbDataAdapter(enca, Conn)
    'LLENAR DATASET
    TABCODI.Fill(dset, "EFEDERAL")
    TABENCA.Fill(dset, "ENCABEZADO")
    'ASIGNAR REPORTE
    Dim REPORTAR As New efederal
    'ASIGNAR EL REPORTE
    REPORTAR.SetDataSource(dset)
    REPORTAR.Refresh()
    CRPV1.ReportSource = REPORTAR
    CRPV1.Refresh()
    Catch EX As Exception
    MsgBox(EX.ToString)
    End Try

    EL REPORTE ME MUESTRA BIEN LOS DATOS Y LA INFORMACION, EL PROBLEMA ES QUE CUANDO LO QUIERO EXPORTAR A CUALQUIER FORMATO, ME SALE REFERENCIA A OBJETO NO VALIDO REFFERENCIADO A UN OBJETO. ESTO ES UNA APLICACION DE ESCRITORIO, AGRADECIENDOTE DE ANTEMANO CUALQUIER COLABORACION

    ResponderEliminar
    Respuestas
    1. Hola, el tema que veo es que tienes 2 tablas en un dataset y el datasource del informe es ese dataset. El reportviewer veo que te da problemas a la hora de generar un Excel o Pdf con las tablas. Pregunta: ¿Están relacionadas las tablas?
      Porque creo que el problema está relacionado con que entre las 2 tablas no hay relación alguna y a la hora de exportar no funciona bien
      Te adjunto un vídeo de cómo combinar 2 tablas en un solo dataset: youtube.com/watch?v=mRxFT-G03-Q
      Ya me dices

      Eliminar
  90. Raul estoy haciendo un reporte en visual studio 2008 que contiene varios datos que estan en SQL express 2008, pero al momento que me muestra el reporte muestra todos los registros y requiero que solo me muestre el registro actual o uno anterior, me podrias apoyar como lo puedo hacer

    ResponderEliminar
  91. Hola, veo que has añadido una lista y te muestra todos los datos porque internamente hay una consulta que los recupera y los muestra en el área del informe.
    Si sabes el ID del registro o con la función Max sobre el campo Entero Id -si tienes ese atributo autonumérico e incremental- puedes hallar el último registro mediante una consulta y pasarle ya los datos filtrados al informe. Para hallar el registro anterior hay ya depende de cómo tengas implementada la base de datos, ya que desconozco los campos.
    Puede ser:
    SELECT * FROM MiTabla ORDER BY MiAtributoID DESC LIMIT 2;
    o para SQL SERVER
    SELECT TOP 2 * FROM MiTabla ORDER BY MiAtributoID DESC;

    Saludos,

    ResponderEliminar
  92. Muchas Gracias, me podiras apoyar con el codigo o me puedes dar algun correo para que te pueda localizar ya que no se como hacerlo y te mande pantallas para que veas lo que estoy haciendo

    ResponderEliminar
  93. te dejo el mio es nestorgoster@gmail.com

    ResponderEliminar
  94. hola tengo un problema realice un formulario para facturacion en access que funciona bien pero al momento de imprimir el informe para una factura preimpresa si utilizo dos item se me salta el pie de factura ( subtotal - iva- total factura ) no se como poder corregir este problema ... espero me puedas ayudar

    ResponderEliminar
  95. Hola Raúl, he hecho un programa con visual 2012 en código visual basic en el cual quiero imprimir un reportviewer directamente sin pasar por la vista previa. En el código que tengo al hacer click al botón imprimir me abre una nueva ventana que contiene el reportviewer y luego le daria a imprimir:
    Private Sub botonimprimir_Click(sender As Object, e As EventArgs) Handles botonimprimir.Click
    ticketimprimir.ticketarticuloBindingSource.Filter = "ticketarticuloticket='" + textcodigo.Text + "'"
    ticketimprimir.ticketBindingSource.Filter = "ticketcodigo='" + textcodigo.Text + "'"
    ticketimprimir.Show()
    End Sub
    Mi idea es que se imprima directamente, he visto otro código antiguo con crystal report y si que se podia, el problema es con 2012 no puedo crear crystal:
    crImprFact1.SetDataSource(dsInfImprFact)
    crImprFact1.PrintToPrinter(1, False, 0, 0)
    crImprFact1.Close()
    He probado poner el componente printform, printdocument,.. pero estoy muy perdido y no encuentro como hacerlo, espero que sepas alguna solución. Muchas gracias por tu tiempo.
    Un saludo.

    ResponderEliminar
  96. Hola Raul, utilizo ReportViewer en varios informes, existe alguna manera de enviar el informe directo a una impresora o a la impresora determinada. Un abrazo

    ResponderEliminar
  97. Hola Raul, si utilizamos Microsoft.ReportViewer.WebForms.dll v11, es necesario usar la versión Microsoft.ReportViewer.Common.dll v10..??
    Es decir ambas tienen que estar en las misma versiones..??

    ResponderEliminar
    Respuestas
    1. Hola, es mejor utilizar iguales versiones, ya que es posible que su usas una dll con versión superior ésta última añada algunas funcionalidades que la segunda no tiene.
      Cuando creas el instalador, prueba en buscar dependencias y verás que añadirás las mismas versiones.

      Saludos,

      Eliminar
  98. buenas tardes, amigo, mira ya hice el reporte, ya lo publique en el reporting services del servidor, pero tengo un problema, no lo deja ver a personas desde otros equipos, y si los deja ver es con el usuario de administrador, como hago para que sea por web services que no pida usuarios ni contraseña, y que no tenga que tener la ip del servidor, y que sea accesible desde cualquier parte del mundo, intenten meterlo dentro de un web services y no pude, por fa ayudenme gracias

    ResponderEliminar
  99. Hola, tengo un combo list (c#) q carga una tabla, realizo una busqueda y necesito que pinte en el combo el nombre hallado (busqueda x id), espero puedan ayudarme, gracias

    ResponderEliminar
    Respuestas
    1. Hola si usas combobox con enlace a datos usando el asistente de Visual Studio, te dirá que no se puede modificar un dataset que está enlazado a datos.
      Sin problemas haces una consulta SQL donde seleccionas los datos de la tabla y con el método additem lo añades al combobox.

      Parte b, la inserción de un dato nuevo al combobox después de la búsqueda.
      AddItem si no quieres que persista o si quieres que persista el dato pues INSERT en la tabla y luego vuelves a cargar los datos.

      Saludos,

      Eliminar
    2. Gracias por la ayuda, lo que pasa es que soy nueva en esto,, tengo otro problemita selecciono un dato de un combolist y necesito obtener el valor (id) para buscar otro dato en otra tabla y cuando uso el SelectedValue me devuelve cero siempre.

      Eliminar
  100. Hola Raúl muy interesante tu blog, Tengo una aplicación .NET c# imprimo informes en Reportviewer realmente son boletines del calificaciones de estudiantes, la cuestión es que son largos y de diferentes tamaños para cada estudiante. Para ahorrar papel debo imprimir a doble cara asi que si el informe de un estudiante tienes un número de paginas impar debo insertar un salto de página adicional para que la impresora tome otra hoja, definitivamente no lo he podido colocar, gracias por la ayuda.

    ResponderEliminar
  101. Hola, Si me pueden ayudar quiero leer una tabla y mandar correo a los integrantes pero me sale un mensaje de error: Se requiere una referencia de objeto para el campo, método o propiedad no estaticos (EnviarCorreo(string,string,strig). Adjunto mi detalle: foreach (DataRow row in dt_correos.Rows) {pCorreo =HttpUtility.HtmlDecode(row["VC_responsable"].ToString().Trim()); EnviarCorreo(pCorreo, "Reclamo de Cliente: " + pReclamo, cadena_rec); }. Gracias por la ayuda

    ResponderEliminar
  102. Hola Raul, buen día.
    Mi escenario es el siguiente:
    Tengo un reporte montado el SSRS pero necesito abrirlo desde CRM por medio de la URL, el tema es que cuando se hace de esta manera me pide Credenciales antes de poder ejecutar el informe. Para solventar este tema realice una pagina .ASPX en la cual mediante un control de ReportViewer hago el login y muestro el informe. El tema aquí es que las imágenes de mi reporte no se visualizan, he investigado configurar el SSRS para que no pida credenciales, y de igual manera como poder hacer que el control de ReportViewer presente el Reporte de manera correcta.

    Tendrás alguna sugerencia o alguna configuración especial para poder solventar esto. Te agradezco.
    Saludos.

    ResponderEliminar
  103. Hola Raul, Existe una manera de enviar un dato a un texto del Reportviewer pero sin usar parametros?
    De antemano te agradezco por tu respuesta.

    ResponderEliminar
  104. Hola, Raúl.

    Buenas tardes, muy bueno tu blog, me ha ayudado bastate, sin embargo quisiera hacerte una consulta.

    Tengo un proyecto web en asp.net con VB, el cual en uno de sus apartados genera un reporte (con datos de unas tablas en Access) directamente en Excel. Reciéntemente me han pedido implementar el botón "imprimir" de ese reporte, sin embargo estoy en un lío ya que no tengo idea de cómo debería abordar el problema puesto que pensé en varias opciones, desde crear un GridView con la información del reporte e imprimirlo, hasta imprimir con ese botón directamente el reporte que se genera. Sin embargo ninguna de las dos opciones sé muy bien como implementarla.

    Disculpa la molestia y de antemano agradezco tu respuesta.

    Saludos.

    ResponderEliminar
  105. Hola! Q' tal? Hace ya unas semanas estoy queriendo resolver un problema con ReportViewer y no encuentro la solución:
    Tengo una lista de objetos que se muestran en una tabla como sigue:

    ENCABEZADO
    REGISTRO 1
    REGISTRO 2
    ...
    REGISTRO N

    en donde cada REGISTRO comprende más de una fila, quedando los títulos del ENCABEZADO y los campos de cada registro así:

    ENCABEZADO -> | TITULO 1 | TITULO 2 | TITULO 3 |
    REGISTRO 1 -> | CAMPO 1 REG 1 | CAMPO 2 REG 1 | CAMPO 3 REG 1 |
    | CAMPO 4 REG 1 | CAMPO 5 REG 1 | CAMPO 6 REG 1 |
    | CAMPO 7 REG 1 | CAMPO 8 REG 1 | CAMPO 9 REG 1 |
    REGISTRO 2 -> | CAMPO 1 REG 2 | CAMPO 2 REG 2 | CAMPO 3 REG 2 |
    | CAMPO 4 REG 2 | CAMPO 5 REG 2 | CAMPO 6 REG 2 |
    | CAMPO 7 REG 2 | CAMPO 8 REG 2 | CAMPO 9 REG 2 |
    ...
    REGISTRO N -> | CAMPO 1 REG N | CAMPO 2 REG N | CAMPO 3 REG N |
    | CAMPO 4 REG N | CAMPO 5 REG N | CAMPO 6 REG N |
    | CAMPO 7 REG N | CAMPO 8 REG N | CAMPO 9 REG N |

    ... lo que sucede es que al llegar al final de la hoja, si se pudo mostrar sólo la 1ra fila del registro N-ésimo, me imprime la 2da y 3ra fila en la hoja siguiente. Y si se pudieron mostrar la 1ra y 2da fila del registro N-ésimo, me imprime la 3ra fila en la hoja siguiente.
    Lo que yo quisiera es que si no entran los 3 renglones del registro que no se llega a ver completo en la hoja actual, se "pasen" los 3 renglones que componen el registro en cuestión a la hoja siguiente. O sea, lo que quiero, en definitiva, es que no se vea parte de un registro en una hoja y parte del mismo en la hoja siguiente.
    Para eso intenté de mil maneras usar el atributo "Keep together" en True, para las 3 filas que componen el registro, pero no surte ningún efecto. Sigue cortando los registros que no se llegan a ver completos, separándolos así:

    HOJA 1
    ENCABEZADO -> | TITULO 1 | TITULO 2 | TITULO 3 |
    ....
    REGISTRO N -> | CAMPO 1 REG N | CAMPO 2 REG N | CAMPO 3 REG N |
    FIN HOJA 1

    HOJA 2
    ENCABEZADO -> | TITULO 1 | TITULO 2 | TITULO 3 |
    REGISTRO N -> | CAMPO 4 REG N | CAMPO 5 REG N | CAMPO 6 REG N |
    | CAMPO 7 REG N | CAMPO 8 REG N | CAMPO 9 REG N |
    ....
    FIN HOJA 2

    ó

    HOJA 1
    ENCABEZADO -> | TITULO 1 | TITULO 2 | TITULO 3 |
    ....
    REGISTRO N -> | CAMPO 1 REG N | CAMPO 2 REG N | CAMPO 3 REG N |
    | CAMPO 4 REG N | CAMPO 5 REG N | CAMPO 6 REG N |
    FIN HOJA 1

    HOJA 2
    ENCABEZADO -> | TITULO 1 | TITULO 2 | TITULO 3 |
    REGISTRO N -> | CAMPO 7 REG N | CAMPO 8 REG N | CAMPO 9 REG N |
    ....
    FIN HOJA 2


    Bueno, espero que alguien me pueda ayudar a resolver este problema que hace que los reportes no se vean nada prolijos.
    Muchas Gracias!

    ResponderEliminar
  106. Hola RAUL, Excelente tu blog.
    Como puedo hacer los siguiente? Estoy migrando paso a paso una aplicacion vb6 a vb net. Como puedo aprovechar (son muchos) los reportes de crystal report ya echos e incoporarlos a la nueva version net . Me puedes ayudar con un ejemplo completo,
    Mil Gracias.

    ResponderEliminar
  107. hola podrias ayudarme con algo similar porfa

    ResponderEliminar
  108. Tengo esta consulta que me funciona en sql server pero al tratar de usarlo en vb net o me manda que el tiempo de espera a caducado o solo me presenta un registro,
    ademas no se porque unas veces me manda tiempo de espera caducado y otras solo un registro, de antemano te lo agradesco.

    donaldaragon69@yahoo.es

    ************************
    USE [SIJATINVCAR]
    GO
    /****** Object: StoredProcedure [dbo].[RptObtenerFactura] Script Date: 12/15/2016 13:06:14 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[RptObtenerFactura]
    (
    @Codemp nvarchar(10),
    @Tipo_doc nvarchar(1),
    @Fecini DATETIME,
    @Fecfin DATETIME,

    @Msidolar nvarchar(1)
    )
    AS

    set dateformat dmy
    SET NOCOUNT ON
    DECLARE @NOMEMP VARCHAR(255)

    select Tf1.codemp,EMPR.empresa AS NOMBREEMPRESA,Tf1.numfact,CASE WHEN @Msidolar = 'S' THEN 'EXPRESADO EN DOLARES' ELSE 'EXPRESADO EN CORDOBAS' END SELECION,ISNULL(TF1.GRUPOEMP,'') AS GRUPOEMP,TF1.NUMCLI,tF1.NOMCLI,tF1.VENDEDOR,AGEN.NOMBRE,TF1.FECHA,CASE WHEN TF1.ANULADA = 1 THEN 'ANULADA' ELSE
    (case when tf1.TIPO_FAC='1' then 'CONTADO' ELSE 'CREDITO' END ) END TIPO,
    CASE WHEN @Msidolar = 'S' THEN SUM(ROUND(ISNULL(TF2.COSTOT,0)/TF2.TASA_CAMB,2)) ELSE SUM(ISNULL(TF2.COSTOT,0)) END COSTOT ,
    CASE WHEN @Msidolar = 'S' THEN SUM(ROUND(ISNULL(TF2.TOTDESC,0) /TF2.TASA_CAMB,2)+ROUND(ISNULL(TF2.TOTPREC,0) /TF2.TASA_CAMB,2)) ELSE SUM(ISNULL(TF2.TOTDESC,0)+ISNULL(TF2.TOTPREC,0)) END TOTDESC,
    CASE WHEN @Msidolar = 'S' THEN SUM(ROUND(ISNULL(TF2.SUBTOT,0) /TF2.TASA_CAMB,2)) ELSE SUM(ISNULL(TF2.SUBTOT,0)) END SUBTOT ,
    CASE WHEN @Msidolar = 'S' THEN SUM(ROUND(ISNULL(TF2.TOTIGV,0) /TF2.TASA_CAMB,2)) ELSE SUM(ISNULL(TF2.TOTIGV,0)) END TOTIVA ,
    CASE WHEN @Msidolar = 'S' THEN SUM(ROUND(ISNULL(TF2.TOTFACT,0) /TF2.TASA_CAMB,2)) ELSE SUM(ISNULL(TF2.TOTFACT,0)) END TOTFACT
    from dbo.F2 tF2
    RIGHT JOIN dbo.F1 TF1 ON tF2.CODEMP = TF1.CODEMP AND TF2.TIPO_DOC = TF1.TIPO_DOC AND TF2.NUMFACT = TF1.NUMFACT
    INNER JOIN dbo.AGENTES AGEN ON AGEN.AGENTE = TF1.VENDEDOR inner join dbo.empresa EMPR on EMPR.CODEMP = TF1.CODEMP
    GROUP BY TF1.CODEMP,TF1.TIPO_DOC,TF1.NUMFACT,ISNULL(TF1.GRUPOEMP,''),EMPR.empresa,TF1.FECHA,TF1.TIPO_FAC,TF1.ANULADA,TF1.NUMCLI,tF1.NOMCLI,tF1.VENDEDOR,
    AGEN.NOMBRE
    HAVING TF1.CODEMP = @Codemp AND TF1.TIPO_DOC = @Tipo_doc AND (TF1.FECHA >= @Fecini AND TF1.FECHA <= @Fecfin)

    *************************************

    ResponderEliminar
  109. hola estoy tratando de enviar un valor desde C# para que me dibuje el combo en report service filtrando el en el combo valores asignados para el usuario. gracias por su ayuda

    ResponderEliminar
  110. BUEN DIA, EN UN PROYECTO WEB COMO PUEDO EXPORTAR UN CHART A EXCEL MEDIANTE VISUAL STUDIO 2013? EH BUSCADO EN VARIOS FOROS PERO NO VEO ALGUNA SOLUCION.

    ResponderEliminar
  111. Hola tengo una enorme pregunta... Sera posible que me ayuden a hacer UNA IMPRESION DOBLE CARA CON CRYSTAL REPORTS??? y SI TENGO IMPRESORA MULTI USO y NO QUIERO LEVANTARME A DARLE VUELTA A LA PAGINA PARA HACERLO mi CRYSTAL es version 11.5.8.826 no quiero nada mas solo saber EJE: como IMPRIMIR un reporte de orden de compra en una oja y los terminos y condiciones en la parte de atras... GRACIAS...

    ResponderEliminar
  112. Hola necesito ayuda soy nuevo en programación ya tengo mi aplicacion y mi base de datos terminada mi pregunta es ¿cómo la instalo en otra pc? Hize la copia de mi base de datos full como hago para hacer una copia pero que no contenga los datos solo tablas y procedimientos almacenados

    ResponderEliminar
  113. Buenos dias con todos, me podrian ayudar por favor soy nuevo en este campo de la programacion.
    estoy intentando crear un reporte con graficos de lineas pero no logro hacerlo me salen graficas que nada tienen que ver con los datos que estan alamacenados en un dataset.

    no me aparecen los valores de los datos en el eje "Y".
    Estoy usando VB.Net 2017 y reportviewer 2017,
    Saludos cordiales

    ResponderEliminar
  114. Hola, necesito hacer un report que tenga diferentes grid de resultados agrupados por ciudad, el número de ciudades es variable y necesitan totales parciales por resultados de ciudad ¿es posible hacer este tipo de reports?. ¿Puedes gestionarse los report por código en lugar de crear objetos o conectores?

    Gracias

    ResponderEliminar
  115. HOLA, como puedo imprimir en formato media carta utilizando reportViewer, he intentado pasarle los parametros de el tamaño media carta pero al hacerlo cambia la orientacion de la hoja a Horizontal y la necesito en vertical.
    Gracias.

    ResponderEliminar
  116. Hola necesito ayuda, quiero hacer un informe de personas. La cual la tabla esta enlazada con otra (localiadad). Pero necesito que el informe me traiga la localidad y no el id de esa localidad. Es decir en la tabla personas tengo una columna que se lama personasLocalidadesId. Pero no se como realizarlo en c#2015.

    ResponderEliminar