Fran Diaz

Reporting Services, Business Intelligence, tecnologías Microsoft y otros

Email Notifications

Recent Posts

Tags

News

Community

Comunidades

  • Foro MSDN Español: Colaborador
  • CartujaDotNet

Webs Amigas

Archives

Exportando un informe desde Reporting Services

Hola,

Pues si, de eso se trata, de exportar, jejeje. Verás cuando vamos a crear un informe utilizamos tres formas diferentes de crearlo, desde código, desde el Visual Studio.NET y desde Report Builder, podéis ver más información aquí. Hasta aquí todo bien, lo subimos al servidor y listo, pero... ¿que pasa si queremos personalizar nuestra aplicación controlando lo que hace nuestro usuario y como se lo permitimos?.

Pues bien, MS SQL Server Reporting Services nos provee de unas API´s que se encargan de manejar toda las interfaces con las que nosotros interactuamos para hacer nuestros Informes.

Estas API`s son tres servicios web que se alojan en la máquina cuando se instala Reporting Services y son los siguientes: ReportExecution2005, ReportingServices, y ReportService2005. Con ellos podemos montar toda la interfaz para crear, implementar y manejar nuestros reportes. Aunque hacer todo esto es podría resultar pesado (según por donde se mire), tenemos la ventaja de que por otro lado podemos controlar como lo hace, seguridad, implementación y paso de parámetros a través de otros controles propios. Todo esto iré explicandolo en mi blog a medida que vaya viéndolo, por ahora vamos solo vamos a hacer este ejemplito simple.

Para crear exportar un informe desde código vamos a añadir un proyecto nuevo de tipo Windows Forms y a continuación vamos a añadirle el control ReportViewer, dos botones y un combobox para elegir el formato a guardar., uno para ver el informe y otro para guardar el informe. La pantalla quedaría una cosa así:

A continuación editamos las propiedades del control ReportViewer, le especificaremos que el tipo de informe es de servidor (Reporting Services), a continuación especificaremos la ruta a nuestro servidor de informes, por defecto es: http://localhost/reportserver en una máquina local y si tenemos el servidor de informes en otra máquina con la configuración del nombre por defecto sólo tendríamos que cambiar localhost por el nombre de la máquina o dirección IP de la misma [:D].

Nota: si la dirección de nuestro servidor de informes está en otra máquina tendríamos que configurar en esa máquina los permisos para un usuario en concreto. O darle permisos desde nuestro código para que entrase con una cuenta predefinida. Este tema lo podría ser un posterior post, quien sabe.

A continuación en “Ruta de acceso del Informe” colocaremos el informe que queremos visualizar. Si nuestro informe está dentro de subcarpetas los pondremos tal que así: Carpeta1/Carpeta2/…/NuestroInforme. No hace falta volver a indicar la ruta de nuestro servidor de informes con nuestro informe como podréis comprobar.

Para ejecutar el informe, dentro del evento Click del botón “ver informe” escribiremos la siguiente línea:

reportViewer1.RefreshReport();

Si queremos introducir la dirección de nuestro report y servidor desde código lo haremos de esta forma:

      reportViewer1.ServerReport.ReportPath = "/MiCarpeta/MiInforme";       Uri url = new Uri("http://localhost/reportserver/");      this.reportViewer1.ServerReport.ReportServerUrl = url;      this.reportViewer1.RefreshReport();

A continuación para guardar el informe en un formato de los que nos provee la API de Reporting Services vamos a agregar un nuevo control SaveFileDialog para guardar dichas extensiones. Vamos a comentarlas un poco cuales son y que hacen.

· XML. Crea una estructura de datos en XML que la forma las tablas, filas y conjuntos de los mismos.

· CSV. Genera un archivo con los datos de las columnas que intervienen en el informe y los datos que lleva separados por comas.

· Image. Guarda los datos que tal como están en pantalla en el momento de guardar en formato Tiff.

· PDF. Crea un archivo Tiff que luego guarda en formato PDF.

· EXCEL. Crea un archivo completo del informe mostrado y con los datos actuales. Este informe te permite modificar todos su datos y da igual que todos los nodos estén colapsados, este te permite abrirlos para una posterior edición.

· MHTML. Convierte un archivo para verlo en el web.

A este control le vamos a agregar a la propiedad filter los parámetros por los que queremos que nos guarde, que son las extensiones que anteriormente he explicado que serían las siguientes:

  • PDF = "PDF file (*.pdf)|*.pdf".
  • IMAGE = "Tiff file (*.tif)|*.tif".
  • MHTML = "Página Web (*.mhtml)|*.mhtml".
  • EXCEL = "Microsoft Excel Workbook (*.xls)|*.xls".
  • CSV = "CSV (*.csv)|*.csv".
  • XML = "XML (*.xml)|*.xml".

¿Cómo se lo agregamos?, pues lo haremos de la siguiente forma, cada vez que pulse en guardar informe, comprobaremos lo que hay en el combobox y llamaremos a un función que dependiendo del parámetro que le pasemos (que será el que haya en el combobox) nos pasará un string para asignar a la propiedad filter. Evidentemente a este combobox deberemos pasarles las extensiones que queramos que nos muestre como ítems del mismo y la función nos devolverá las que hemos explicado anteriormente.

Lo siguiente que haremos es importar el servicio Web que instala SQL Server Reporting Services 2005. Esto lo haremos haciendo botón derecho sobre el proyecto y pulsando sobre Agregar Referencia Web. De la pantalla que nos muestra seleccionaremos el link Servicios Web del Equipo Local y a continuación ReportExecution2005. Nos saldrá esta ventana:

Esta ventana nos muestra una serie de valores:

· Dirección URL. Indica la dirección donde está alojado nuestro servicio Web. En este caso es en nuestra máquina pero podría ser en otro servidor. Si fuese otro servidor tendríamos que estar como usuario del mismo y al conectarnos, este nos pedirá el nombre de usuario y contraseña.

· Nombre de referencia Web. Este es el nombre de la referencia Web que nosotros vamos a asignarle para llamarlo desde nuestro proyecto. Esto no indicia que haya que poner ahí el nombre del Servicio Web, sino uno con el que nosotros recordemos que es lo que hacía.

· Descripción del servicio. Este es el cuadro principal que sale al cargar la pantalla. Este muestra la Documentación donde incluye que hace el servicio Web. Por otro lado, muestra los métodos y parámetros que contiene el servicio Web

Una vez añadido el servicio Web, editaremos el evento click del botón “Guardar Informe”, al cual le añadiremos el siguiente código:

// Asignamos el filtrado.
this.saveFileDialog1.Filter = this.DameCadenaFilter();
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK){
// Creo una variable que contendrá el nombre y ruta del archivo.
string archivo = this.saveFileDialog1.FileName;
// Creo una variable que contendrá el formato.
string formato = null;string history = null;
// Creo una instancia del Servicio web de ejcución.RSExecution2005.ReportExecutionService RSGuardar = new WApp_FormatoRS.RSExecution2005.ReportExecutionService();      
// Asigno el formato.      formato = this.comboBox1.Text;                     
// Asigno las credenciales.RSGuardar.Credentials = System.Net.CredentialCache.DefaultCredentials;      
// Cargo el report.
RSGuardar.LoadReport(this.reportViewer1.ServerReport.ReportPath, history); 
// Si el formato trae algo(significa que seleccionó algo del combobox) lo guardo.      if (formato != null)     
{      
     string deviceInfo                   = String.Empty;      
     string Extension                    = formato;      
     Byte [] Resultados                  = null;      
     string Codificacion                 = String.Empty;      
     string mimeType                     = String.Empty;      
     RSExecution2005.Warning[] warnings  = null;      
     string[] streamsIDs                 = null;       
     // Paso los resultados de renderizar a un conjunto de bytes.      
     Resultados = RSGuardar.Render(formato, deviceInfo, out Extension, out Codificacion,out mimeType, out warnings, out streamsIDs);                         
     // Escribo el conjunto de bytes en un archivo con su extensión.     
     using (FileStream stream = File.OpenWrite(archivo))     
     {  stream.Write(Resultados, 0, Resultados.Length);}  
}}

Este lo que hace básicamente es cargar un report a través de su path, lo que significa que no haría falta cargar primero el informe y luego guardarlo, sino que podemos pasarle el report, este lo carga y a continuación crea un array de bytes que serán almacenados como un archivo en disco.

La función que me traerá la extensión que agregaremos al filter y a la que le pasaremos el valor que hay en el combobox es la siguiente:

private string DameCadenaFilter()       
{           
  switch (this.comboBox1.Text)           
  {                
     case "MHTML":  return "Page, single file (*.mhtml)|*.mhtml";               
     case "PDF":    return "PDF *.pdf|*.pdf";               
     case "IMAGE":  return "Tiff file (*.tif)|*.tif";               
     case "EXCEL":  return "Microsoft Excel Workbook (*.xls)|*.xls";               
     case "XML":    return "XML (*.xml)|*.xml";               
     case "CSV":    return "CSV (*.csv)|*.csv";                   
     default:       return null;           
  }       
}

Bueno, espero que os haya sido de utilidad, otro día más, jejeje.

Un Saludo

Fran Díaz

Posted: 17/10/2006 15:55 por Fran Díaz | con 91 comment(s) |
Comparte este post:

Comentarios

Miguel José Rodríguez Griñolo ha opinado:

Ey Fran!!!, buen trabajo con RS tío, seguro que el artículo es de utilidad. Veo que te propones llegar hasta las tripas de RS :-). Ánimo.

# October 17, 2006 9:03 PM

Isaac Fernandez ha opinado:

Hola Fran, muy buen articulo, sin duda de gran utilidad. Veo que en esa pelea con los servicios web ssrs las estas ganando con creces :^) mucho ánimo

# November 1, 2006 8:42 AM

Sgil ha opinado:

me parece  un articulo buenisimo.. gracias..

 solo una pregunta...  quiero meter mis propias  funciones o codigo al reporte  en que seccion lo hago  y como las mando llamar como esxpercion  para enviarle parametros

# November 24, 2006 12:04 AM

Polux ha opinado:

Buen día.

Soy nuevo en .Net y en RS y al correr el programa me sale este error y no lo he podido corregir.

Error 1 The type or namespace name 'WApp_FormatoRS' could not be found (are you missing a using directive or an assembly reference?)

Agradeceria cualquier recomendacion al respecto.

Diego.

# December 26, 2006 6:25 PM

Fran Díaz ha opinado:

Hola Polux,

Perdona por no contestar antes, no vi el comentario. Verás el nombre 'WApp_FormatoRS' es el nombre de mi proyecto, tu deberás de cambiarlo por el tuyo.

Un Saludo

# January 11, 2007 12:09 PM

Fran Díaz ha opinado:

Hola Sgil,

Que tipo de funciones quieres meter, es decir que vas a hacer, o si puedes explicame un poco mejor cual es tu necesidad para poder ayudarte.

Un Saludo

# January 11, 2007 12:10 PM

Oscar Alvarez ha opinado:

Estoy tratando de crear un reporte que tiene un subreporte, pero no se como establecer los valores de los parámetros de consulta para el subreporte.

Les agradezco su ayuda.

# January 31, 2007 5:20 PM

Fran Díaz ha opinado:

Hace unos dias recibí un comentario en unos de mis posts sobre SSRS, el caso es que me preguntaban como

# February 4, 2007 3:01 PM

Fran Díaz ha opinado:

Hola Oscar,

En el comentario anterior tienes mi respuesta, espero que te sea de utilidad.

Un Saludo

# February 4, 2007 3:02 PM

Fran Díaz ha opinado:

Hace unos dias estaba terminando mi aplicación de informes para el proyecto de mi empresa. Entre uno

# February 20, 2007 10:02 PM

Cristina ha opinado:

Hola Fran, me ha servido de mucha utilidad tu artículo.

Ahora he querido ir un poco más lejos y he añadido parámetros a mi report (parametro a asignar en clausula where) y no encuentro la forma de asignarlos en la llamada.

Thanks in advance.

# February 21, 2007 11:33 AM

Cristina ha opinado:

Hola Fran, me ha servido de mucha utilidad tu artículo.

Ahora he querido ir un poco más lejos y he añadido parámetros a mi report (parametro a asignar en clausula where) y no encuentro la forma de asignarlos en la llamada.

Thanks in advance.

# February 21, 2007 11:33 AM

Fran Díaz ha opinado:

Hola Cristina,

Para implemetnar en una consulta un parámetro, dentro del editor de consulta, cambia tu consulta de la forma siguiente:

="select campo1, campoN from tabla/s where campoX = '" & Parameters!NombreDeTuParametro & ","

Listo, con esto cuando le pases algun valor a tu parámetro en el informe te generará la consulta correctamente. Si te das cuenta puse igual(=) y comillas("") para encerrarlo en una cadena. Ya que en el editor se puede utilizar sentencias de Visual Basic. Y es correcto utilizarlo así.

Espero que te sea de utilidad.

Un Saludo

# February 21, 2007 12:04 PM

Cristina ha opinado:

Hola de nuevo Fran, he probado pero me temo que no va a ser tan sencillo.

Resulta que no estoy utilizando un servidor local de reports, asiq tengo que hacer deploy.

Y al meter la consulta entre comillas me muestra un agradable cartel diciendome que el máximo de cadena es 128!!.

Estoy bastante desesperada.

# February 21, 2007 2:18 PM

Fran Díaz ha opinado:

Hola Cristina,

Te recuerdo que esa select la tienes meter en el editor de consultas del diseñador y no en el campo. ¿es eso lo que haces ahora?.

Para hacer el deploy tienes que configurarlo, es decir, una carpeta para el datasource(si lo vas a compartir), para el informe y el servidor de informes. Una vez hecho esto podrás implementar.

Estoy a la espera.

Un Saludo

# February 21, 2007 3:42 PM

Cristina ha opinado:

Joer, Muchas Gracias. Todo funciona ahora a las mil maravillas.

# February 21, 2007 4:22 PM

Marcps ha opinado:

Hola Fran me parece formidable la informacion que nos facilitas, mira tal vez yo estoy un poquillo fuera de entorno pero tengo un problema con la suscripciones del RS, quiero enviarle parametros de fechas restandole un dia para que se envie diariamente, tu crees que esto sea posible?.. espero tus comentarios,

Gracias de antemano.

# March 17, 2007 9:23 PM

Fran Díaz ha opinado:

hola Marcps,

No he estado tratando mucho ese tema, pero investigaré sobre ello. Cuando tenga una respuesta te avisaré por aquí, si lo consigues tu antes, avísame aquí como lo hicistes, así compartimos con la comunidad.

Un Saludo

# March 18, 2007 10:00 PM

Gari ha opinado:

Un articulo muy interesante. Estoy usandolo como guia.

Tengo una duda al respecto. Cuando intento pasar desde un webform de asp.net usando una funcion de javascript para abrir el report nos da un error con uno de los parametros pasados en la URL:

"El parametro de informe "Fecha" es de solo lectura y no se puede modificar. (rsReadOnlyReportParameter)".

Un saludo.

# May 7, 2007 5:58 PM

Fran Díaz ha opinado:

Hola Gari,

Realmente no se porque te puede pasar, ya que no se como le pasas los parámetros y como es la función.

¿Podrías especificar algo más? Gracias.

Un Saludo

# May 8, 2007 12:00 PM

Bea ha opinado:

Hola Fran,

Un artículo interesante para aprender a exportar informes. Lo he seguido para exportar un informe a excel (con RS 2000), pero me surge un problema: no me aparece la barra de menú (la típica con el icono de guardar el archivo, etc). En cambio, al exportar a PDF sí que aparece. Esto es problema del RS o de algun parámetro que me falta por configurar?

Gracias por adelantado :)

# May 29, 2007 11:29 AM

Fran Díaz ha opinado:

Hola Bea,

No trabajé nunca con SSRS 2000, solo con 2005. No sé si tiene los mismos servicios y no sé si funciona igual.

Siento mucho no poder ayudarte Sad.

Un Saludo

# May 30, 2007 11:25 AM

Javier Payró ha opinado:

Al exportar a Excel un reporte, quiero que los encabezados de las columnas se repitan en todas las hojas de excel al mandar a imprimir.

(Las columnas a las que me refiero estan dentro de una tabla en el cuerpo del informe)

¿Como puedo hacer esto?

¿Se puede con alguna propiedad desde la creacion del reporte?

Ya le puse las propiedades que repita los encabezados y pie de paginas, pero aun asi no se repiten en Excel los encabezados.

Les agradezco de antemano su ayuda. Gracias

# June 7, 2007 7:57 PM

Fran Díaz ha opinado:

Hola Javier,

Tan solo tienes que decirle que se repitan en la cabecera de la tabla. Sino mal recuerdo es la misa propiedad(No tengo la herramienta ahora aquí).

Sitúate en la tabla, luego selecciona la cabecera entera y busca la propiedad.

Espero que te sirva.

Un Saludo

# June 7, 2007 8:09 PM

Carlos ha opinado:

Hola Fran

Me parece interesante que compartas todos tus conocimientos con nostros que recien empezamos en el RS2005, gracias por eso, bueno sabes tengo una duda, como puedo exportar un .rdl desde un web form por medio de un control button por ejemplo.

Un Saludo

# June 11, 2007 7:17 PM

Fran Díaz ha opinado:

Hola Carlos,

Si ya sabes a que formato lo vas a exportar, tan solo basta con poner ese código en el botón o en una clase aparte.

También podrías poner un combobox con los tipos de formatos a exportar(los que tu creas convenientes Wink) y un botón de exportar.

Espero que te sirva.

Un Saludo

# June 13, 2007 9:18 AM

mlopez ha opinado:

enhorabuena por tu artículo y gracias por tu tiempo. Desearía imprimir un reporting, sin visualizarlo el usuario, directamente en la impresora por defecto y sin ningún mensaje. Directamente del "button" impresión del formulario a la impresora. Muchas gracias.

# June 15, 2007 7:57 AM

Javier Payro ha opinado:

Gracias , te agradezco tu ayuda, sin embargo, funciona bien la propiedad al verse en WEB, pero al exportar a Excel en un libro que tiene mas de una hoja no se repite en encabezado de la tabla, solo se repite el encabezado del informe.

Tengo que hacer en Excel que el encabezado de la tabla sea parte del encabezado de la pagina, pero quisiera de saliera de manera automatica.

Le he intentado todas la propiedades y combinaciones,y aun no logro que salga de manera automatica.

Gracias!

# June 15, 2007 5:34 PM

Fran Díaz ha opinado:

Hola mlopez,

Tan solo tendrías que poner el trozo de código de exportar en tu botón con el formato que tu quieras.¿responde eso a tu pregunta?

Un Saludo.

# June 19, 2007 9:05 AM

Fran Díaz ha opinado:

Hola Javier Payro,

Veamos, yo cuando exporto a excell(en SSRS 2005) me exporta la cabecera del informe junto con la de la tabla. Despues de esto los datos, y solo una vez, no se me repiten ni cabecera de informe ni de tabla. ¿Es ese tu problema?.

Un Saludo

# June 19, 2007 10:03 AM

Romina ha opinado:

Hola Fran, muy bueno el articulo. Tengo que exportar a exel desde una web application aproximadamente 20 reportes. La idea es que se exporten todos al mismo tiempo al presionar sobre un button. Tenes idea como ùedo encararlo?

# June 20, 2007 3:44 PM

Romina ha opinado:

Hola Fran, muy bueno el articulo. Tengo que exportar a exel desde una web application aproximadamente 20 reportes. La idea es que se exporten todos al mismo tiempo al presionar sobre un button. Tenes idea como ùedo encararlo?

# June 20, 2007 3:46 PM

Fran Díaz ha opinado:

Hola,

Pues si sabes la ruta, los informes que son, tan solo tienes que hacer un for o while(como mejor creas) y exportarlos tal como te indico en este post. La diferencia, es que no tienes que pedirle al usuario la extensión, ya la sabes Wink.

Espero que te sirva de ayuda.

Un Saludo.

# June 20, 2007 6:29 PM

Rose ha opinado:

hola tengo un apregunat quisiera saber si se pueda hacer la entrega de in reporte cuando lo solicita el usuario y no en forma automatica , porfavor ayuda

# June 26, 2007 12:21 AM

Fran Díaz ha opinado:

Hola Rose,

¿Te refieres a que el usuario elige un informe y este se ejecuta en algún visor?

Un Saludo

# June 26, 2007 12:28 AM

Rose ha opinado:

No me refiero a que si se pude crear una pagina o pantalla que  pueda accesar el usuario y que cuando modifique la informacion esta pueda hacerle cambios a la suscripcion de los infromes cambiando la hora y/o  fecha del envio de dicho reporte

# June 26, 2007 10:06 PM

Fran Díaz ha opinado:

Hola Rose,

Realmente no he probado las suscripciones de los informes, pero creo que puedes hacer algo con los servicios web.

Un Saludo.

# June 26, 2007 11:08 PM

Gonzalo ha opinado:

Hola Fran,

Estupendo artículo el tuyo. No obstante poniendo este ejemplo en producción me encuentro con que salta la siguiente excepción:

System.Web.Services.Protocols.SoapException: The permissions granted to user 'NT AUTHORITY\NETWORK SERVICE' are insufficient for performing this operation. --->

¿Sabes a que puede ser debido?

# June 28, 2007 1:09 PM

Fran Díaz ha opinado:

Hola Gonzalo,

Cuando trabajas en local todo va a las mil maravillas. El caso es que estando en local tienes permiso para entrar en tu servidor de informes porque tu máquina por defecto los tiene.

El problema viene, cuando intentas acceder a otro servidor para traerte esos reportes. Accede al servidor(http://TuServidor/reports) y configura los permisos necesarios para que tú máquina pueda entrar.

Si te apetece mejor tener una cuenta en la máquina del servidor y entrar con esta(controlando tu que usuario entra y demás a través de formularios) date una vuelta por aquí(geeks.ms/.../configurando-seguridad-desde-el-reportviewer.aspx) que explico como hacerlo.

Espero que se te solucione.

Un Saludo

# June 30, 2007 11:05 AM

Jesús Daniel Portillo ha opinado:

Buenas.

Quisiera saber cómo se hace para exportar un informe de reporting services en formato pdf desde un formulario aspx en un proyecto web. Solamente quiero que al hacer click en un botón se le pasen los parámetros al reporte y se me abra el pdf generado con el reporte para poder imprimirlo.

Gracias

# July 9, 2007 9:40 PM

Lucia ha opinado:

Hola,

Muy bueno el artículo, ayuda mucho.

Me da un error cuando ejecuto el refresh report:

"El cliente encontro el tipo de contenido de respuesta ", pero se esperaba 'text/xml'. Error de la solicitud con una respuesta vacia."

´

¿Sabes que podría haber hecho mal?

Gracias, un saludo

# July 16, 2007 11:03 AM

Fran Díaz ha opinado:

Hola Jesús Daniel,

Realmente me coges fuera de juego. En verdad hay que obtener los parámetros de tu página web(de tus controles), pasarselos al informe y decirle que exporte.

Me imagino que esto es lo que habrás pensado ya tu claro. Sigue pensando y yo en estos dias lo miro y te comento como lo hice(si no lo consigues tu antes claro).

Un Saludo

# July 17, 2007 11:35 PM

Fran Díaz ha opinado:

Hola Lucía,

Dame un poco más de información ¿ok?. ¿Eso te pasa cuando lo ejecutas desde el visual studio(en vista previa digo) o desde un control(reportviewer o browser)?

Un Saludo

# July 17, 2007 11:45 PM

Melvy ha opinado:

Hola Fran : Gracias por tu blog , me ah ayudado muhco en mis tareas , bueno mi consulta es la siguiente y agradeceria mucho me pudieras ayudar , por q ya nos e q mas puedo hacer :

Necesito exportar un reporte  a excel , pero mi reporte tiene mas de 65000 registros , y pues me sale un error a generarlo en excel , quisera q me digas que puedo hacer , al respecto me dan la posibilidad de que se exportado a .txt , pero tampoco se nos ofrece esa opcion que puedo hacer? , por ayudame!!

100000 d gracias

# July 27, 2007 5:07 AM

Fran Díaz ha opinado:

Hola Melvy,

Hace unos dias me pasó lo mismo. Por ahora no lo traté pero si se me ocurrió cosas para cuando vaya a hacerlo. Esto es un problema para el usuario, ya que no podrá exportar como tu bien dices, más de 65000 registros, es decir, una más de una hoja de excell.

Se podría controlar el tema poniendo un mensaje al usuario con el problema para que lo entendiera. Ponder parámetros para que pudiera traer los registros entre unos rangos o controlarlo tu al exportar y juntar "X" hojas de excell en una misma.

En fin, cuando mire mi caso postearé al respecto. Si tienes o haces alguna solución coméntala Wink.

Un Saludo

# July 30, 2007 8:50 AM

DSL ha opinado:

buenas!

quiero exportar un report con parámetros a PDF sin abrir el viewer

me devuelve el 'famoso' error:

  "Falta el valor actual del campo de parámetro"

¿alguien tiene la solución a este problema?

muchas gracias

# August 13, 2007 2:53 PM

Fran Díaz ha opinado:

Hola DSL,

Tan solo tienes que agregar los  parámetros del informe, ya que si los marcas como obligatorios los necesitarás poner.

Un Saludo

# August 14, 2007 6:11 PM

DSL ha opinado:

Buenas Fran

No se si he entendido bien la solución que me propones para mi problema con .NET y Crystal Reports, me he decidido a escribirte ya que poder solventar este inconveniente me supondría un gran ahorro en mi tarea.

Quiero exportar varios rpt's a PDF automáticamente, sin utilizar viewer ni ventanas de "guardar como" ni similares, así que trataba de utilizar el motor de CR desde .NET.

Mis rpts tienen parámetros que le envío desde programa, así como parámetros de enlace con subinformes.

He implementado una rutina para aplicar los valores de TODOS los parámetros; el problema que me he encontrado es que la clase ParameterValue no tiene una propiedad value, y si aplico la clase ParameterDiscreteValue tampoco me aplica el valor que le introduzco en su propiedad (las funciones ApplyCustomParameters o algo así...).

No se si hago algo mal, o existe un bug en el .NET 2002 que no realiza esto correctamente.

Lo que entiendo de la solución que me propones es que cree los prámetros en ejecución desde programa, si es así, esto no me sirve, ya que tengo los parámetros de enlace entre subinformes.

A ver si puedes echarme una mano.

Muchísimas gracias por tu tiempo y por tu atención.

Un saludo,

DSL.

# August 16, 2007 2:37 PM

Fran Díaz ha opinado:

Hola DSL,

Creo que ha habido un mal entendido desde el principio. Yo creía que utilizabas Reporting Services como sitema de informes y tu utilizas Crystal Reports.

La verdad es que no utilizo Crystal Reports y no puedo ayudarte con ello Sad.

Lo siento.

Un saludo

# August 16, 2007 2:48 PM

Armando Mexico ha opinado:

tengo un reporte al cual ya le agregue un subreporte, pero al momento de mandar a imprimir solo me imprime el reporte principal no asi el subreporte, como le puedo hacer para que se impriman los dos??'

# August 21, 2007 11:05 PM

Fran Díaz ha opinado:

Hola Armando,

Es raro que no puedas imprimir los dos Tongue Tied. En el momento de imprimir el report, ¿ya está ejecutado el subreporte?

Si lo solucionastes ya me comentarás.

Un Saludo

# August 25, 2007 12:59 PM

Derly ha opinado:

Hola Frank,

Te felicito por ayudar a tanta gente y brindarles tu conocimiento.

Estoy trabajando con unos reportes de tipo Tabla, y les tengo el "drilldown". Estos los invoco a partir del Web Services en .net.

Deseo hacer que cuando el usuario seleccione el formato PDF, el reporte generado sea como si no tuviera el "drilldown". Es decir saliera todo expandido.

Gracias por tu ayuda.

# September 2, 2007 7:35 AM

Fran Díaz ha opinado:

Hola Derly,

Lo puedes hacer igual que ahora, con los web services. Eso por una parte para cargarlo de nuevo. A ti te ha pasado lo mismo que a mí en su día. Está muy bien todo contraido porque así es el usuario el que abre cada nodo o region. Pero cuando queremos imprimir o exportar, este sale tal como lo tengamos en ese momento. Yo para ello, creé un parámetro de tipo boolean que me expande o contrae todo según su valor. Podrías hacer lo mismo a la hora de exportarlo. Puedes crearte el parámetro oculto y pasarle el valor este al exportar al formato que tú quieras.

Bueno, ¿como hacemos esto?, igual a estas alturas ya sabes más o menos, pero en otra entrada de mi blog lo hice hace tiempo. Te la dejo ahí para que le eches un vistazo.

geeks.ms/.../how-to.aspx

Espero que te sirva. Ya me contarás que tal te fué.

Un Saludo

# September 2, 2007 12:26 PM

Miguel ha opinado:

Hola Fran,

Gracias por compartir tus conocimientos para todos los que estamos aprendiendo a utilizar esta herramienta, muy buen articulo.

Tengo una consulta, hay alguna forma de imprimir un reporte en un tamaño de pagina determinado por ejemplo tamaño A4 sin necesidad crear el reporte con este tamaño, es decir que se realice un zoom de reduccion para que salga impreso correctamente en la hoja?

Gracias.

# September 5, 2007 9:36 PM

Derly ha opinado:

Hola Fran:

Muchas gracias por tu ayuda, tus indicaciones y ejemplo funcionaron.

Excelente.

Un saludo,

Derly.

# September 6, 2007 8:57 AM

Fran Díaz ha opinado:

Hola,

Gracias Derly, hacemos lo que se puede Smile. Me alegro de que te vaya bien.

Miguel, ¿te refieres a imprimir directamente el informe?. El zoom lo puedes manejar tu desde el ReportViewer con las propiedades ZoomMode y ZoomPercent.

Si no es esto lo que buscas por aquí estaré.

Un Saludo.

# September 12, 2007 12:04 AM

Mayra UC ha opinado:

Necesito que los datos que muestro en mi enzabezado, los cuáles son llamados desde una BD, aparezcan en todas mís páginas ya que solo aparecen en una 8-S, ayuda please ya llevo un rato con esto, cualquier tip o sugerencia es bienvenida!

Gracias Frank o quién sea que me conteste!!

# September 12, 2007 9:09 PM

Fran Díaz ha opinado:

Hola Mayra,

Te he contestado en geeks.ms/.../Error-el-imprmir-un-informe-desde-el-reportviewer.aspx

Ya me contarás que tal te fue.

Un Saludo

# September 14, 2007 10:07 AM

David ha opinado:

Saludos, tengo una gran duda, ya que obtengo el arreglo de bytes y lo quiero guardar con el dialogfile, no lo guarda, elijo un archivo .pdf y le doy sobreescribir, no marca errores pero cuando abro el archivo esta en blanco, si lo abro con notepad, aparece un encabezado de pdf, si alguien me puede decir que sucede estare muy agradecido.

# September 18, 2007 1:53 AM

David ha opinado:

Saludos, tengo una gran duda, ya que obtengo el arreglo de bytes y lo quiero guardar con el dialogfile, no lo guarda, elijo un archivo .pdf y le doy sobreescribir, no marca errores pero cuando abro el archivo esta en blanco, si lo abro con notepad, aparece un encabezado de pdf, si alguien me puede decir que sucede estare muy agradecido.

# September 18, 2007 1:54 AM

David ha opinado:

Saludos, tengo una gran duda, ya que obtengo el arreglo de bytes y lo quiero guardar con el dialogfile, no lo guarda, elijo un archivo .pdf y le doy sobreescribir, no marca errores pero cuando abro el archivo esta en blanco, si lo abro con notepad, aparece un encabezado de pdf, si alguien me puede decir que sucede estare muy agradecido.

# September 18, 2007 1:54 AM

Fran Díaz ha opinado:

Hola David,

No hacía falta escribirlo tres veces, jejeje. Normalmente al gente que no está registrada en este portal de blogs no les permito escribir directamente por el tema del spam en los comentarios. Para otra vez con que pulses una vez irá bien Wink.

Volviendo al tema, lo que explico en este post, es como exportar un informe a diferentes formatos. Para poder guardar la información el informe tiene que estar generado antes. Probablemente sea es tu problema.

Ya me contarás que tal te fué.

Un Saludo

# September 19, 2007 11:33 AM

David ha opinado:

Antes que nada una disculpa por postearlo tantas veces, ahora, el informe ya se encuentra guardado en el report server en una carpeta donde tengo mis informes /reportes/informe1 etc, ahora cuando lo mando a llamar para ejecutar el render del report service me responde de forma correcta y extraigo el arreglo de bytes, pero a la hora de guardarlo ocurre lo que te describo en el post anterior, gracias de antemano

# September 19, 2007 5:35 PM

David ha opinado:

Antes que nada una disculpa por postearlo tantas veces, ahora, el informe ya se encuentra guardado en el report server en una carpeta donde tengo mis informes /reportes/informe1 etc, ahora cuando lo mando a llamar para ejecutar el render del report service me responde de forma correcta y extraigo el arreglo de bytes, pero a la hora de guardarlo ocurre lo que te describo en el post anterior, gracias de antemano

# September 19, 2007 5:35 PM

David ha opinado:

Antes que nada una disculpa por postearlo tantas veces, ahora, el informe ya se encuentra guardado en el report server en una carpeta donde tengo mis informes /reportes/informe1 etc, ahora cuando lo mando a llamar para ejecutar el render del report service me responde de forma correcta y extraigo el arreglo de bytes, pero a la hora de guardarlo ocurre lo que te describo en el post anterior, gracias de antemano

# September 19, 2007 5:35 PM

Sap ha opinado:

Hola Fran,

tus articolus siempre son muy intresante y me ayudan mucho, eres un gran programador.

Tengo un problema con la linea:

// Cargo el report.

RSGuardar.LoadReport(this.reportViewer1.ServerReport.ReportPath, history);

A mi me sale un error que no se por que me sale, el informe me lo presenta bien pero al guardar a un formato me falla.

Este es el error que me sale:

No es posible conectar con el servidor remoto

Pero esto es mentira porque si que me lo presenta el informe y se conecta al servidor, tengo todos los permisos, no lo entiendo, si sabes algo por que me pasa esto dimelo.

Muchas gracias, un saludo.

# September 21, 2007 9:25 AM

Fran Díaz ha opinado:

Hola David,

Ya tan solo te queda dejarme un fragmento de tú código por aquí. Tal como tu me comentas debería de funcionarte.

Un Saludo.

# September 21, 2007 9:42 AM

Fran Díaz ha opinado:

Hola Sap,

¿Te conectas desde tu máquina a la del servidor?. Si estás siguiendo mi código, este pone las credenciales por defecto. Y entonces tú máquina debe de tener permisos en el servidor al que accedes para poder ejecutar el informe.

Ya me vas comentando.

Un Saludo.

# September 21, 2007 9:44 AM

Sap ha opinado:

Hola otra vez yo,

que rapido eres en contestar, yo he pensado que mañana lo vera una respuesta xD

Bueno esto puede ser el problema pero no tengo idea como tendria que ponerlo.

Es algo con:

System.Net.CredentialCache.DefaultNetworkCredentials.UserName y System.Net.CredentialCache.DefaultNetworkCredentials.Password?

Lo siento por las molestias, pero es que yo soy nuevo en .NET y no tengo muchas experiencias.

# September 21, 2007 10:42 AM

Fran Díaz ha opinado:

Hola Sap,

Tienes más información acerca de las credenciales en este post: geeks.ms/.../configurando-seguridad-desde-el-reportviewer.aspx

Todo lo que escribí de SSRS está en esta otra: geeks.ms/.../default.aspx.

Espero que te ayuden, sino por aquí ando.

Un Saludo Wink.

# September 21, 2007 11:09 AM

David ha opinado:

Saludos Fran, de nuevo disculpas por que el post se muestra 3 veces, pero esta vez esoty seguro de que no fui yo, por lo que creo que hay un problemita con el sitio, asi que tel vez este post tambien se replique 3 veces, por otro lado que dejo el codigo que estoy ocupando

private void button2_Click(object sender, EventArgs e)

       {

           this.comboBox2.SelectedValue = 3;

           string rep = Rep.ObtenerPDF(30, 1);

           byte[] reporte = System.Text.Encoding.Unicode.GetBytes(rep);

           this.saveFileDialog1.Filter = "PDF *.pdf|*.pdf";

           try

           {

               if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)

               {

                   using (FileStream stream = File.OpenWrite(@"C:\Rep\1.pdf"))

                   {

                       stream.Write(reporte, 0, reporte.Length - 1);

                   }

               }

           }

           catch (Exception ex)

           {

               throw;

           }

       }

como veras la clase Rep contiene el metodo que me carga el reporte y me lo devuelve en un string Rep.ObtenerPDF(30, 1), hasta ahi no tengo inconveniente, el problema es al guardar,

   private static string ObtenerPDF(ParameterValue[] param, string nombreReporte)

       {

           // Se crea la clase proxy al WS

           ReportingService rs = new ReportingService();

           string pdf = string.Empty;

           // Preparación de argumentos del reporte

           string historyID = null;

           string deviceInfo = null;

           string format = "PDF";

           string showHide = null;

           DataSourceCredentials[] credentials = null;

           Byte[] results;

           string encoding;

           string mimeType;

           Warning[] warnings = null;

           ParameterValue[] reportHistoryParameters = param;

           string[] streamIDs = null;

           // Se especifican las credenciales para el acceso al WS

           //string usuario = System.Configuration.ConfigurationSettings.GetConfig["usrRS"];

           //string pwd = System.Configuration.ConfigurationSettings.GetConfig["pwdRS"];

           rs.Credentials = System.Net.CredentialCache.DefaultCredentials;//new System.Net.NetworkCredential("MX-D-DXM03045","");

           // Se especifica el URL del WS de MSRS

           rs.Url = "localhost/.../ReportService.asmx";

           // Se ejecuta el reporte y se guarda el resultado en una cadena de caracteres

           try

           {                

               results = rs.Render(nombreReporte, format, historyID, deviceInfo, param,

                   credentials, showHide, out encoding, out mimeType,

                   out reportHistoryParameters, out warnings, out streamIDs);

               pdf = System.Text.Encoding.Unicode.GetString(results, 0, results.Length);

           }

           catch (Exception ex)

           {

               bool rethrow = ExceptionPolicy.HandleException(ex, "Negocio Exception Policy");

               if (rethrow)

                   throw;

           }

           return pdf;

       }

de antemano gracias

# September 22, 2007 10:38 PM

Fran Díaz ha opinado:

Hola de nuevo david Smile,

Vuelve a aparecerme tres veces Tongue Tied(esta vez solo dejo uno).

Yo tu código lo veo bien, solo algunas cosillas:

rs.Url = "localhost/.../ReportService.asmx";

En los ... pones algo ¿no?

¿que error te da?

Un Saludo

# October 2, 2007 1:53 PM

VictorDelay ha opinado:

Hola,

  Tengo una aplicación Windows que visualiza un Report rdlc con reportviewer desde local y luego lo exporta a .PDF.

 Ahora debo realizar el mismo proceso pero desde un servicio windows (programado en Vb.NET). Debo sustituir el ReportViewer por otro objeto. Podéis indicarme que objeto?

Gracias

# October 9, 2007 8:37 PM

Norma ha opinado:

tengo un reporte en crystal report 8 y requiero hacer un subreporte en el, alguien me podra ayudar con algunos link donde venga informacion, he buscado pero no encuentro informacion que pueda ayudarme, si tienen algun ejemplo, se los agradeceria

Saludos

Norma

# October 15, 2007 8:43 PM

Fran Díaz ha opinado:

Hola Victor,

He visto que también escribistes en los foros de MSDN, pongo aquí la respuesta.

Enlace: forums.microsoft.com/.../ShowPost.aspx

PD: Perdonad la tardanza, estuve liado estas semanas.

Un Saludo

# October 17, 2007 11:02 PM

Fran Díaz ha opinado:

Hola Norma,

Siento decirte que no trabajo con esta tecnología. Si quieres puedes preguntar por aquí:

forums.microsoft.com/.../default.aspx

Un Saludo

# October 17, 2007 11:40 PM

Olguita ha opinado:

Hola, se que fran no ha trabajado con RS2000, pero de pronto alguien mas que entra ha esta pagina me puede ayudar, mi problema es que ya publico mis reportes pero cuando hago algun cambio y entro a ver nuevamente el reporte, este no se actualiza, el 2000 no tiene el ReportViewer1.RefreshReport();, en su lugar hay un boton de actualizar en la barra de herramientas, pero yo no quiero que el usuario que ve el reporte pueda exportarlo, por eso necesito deshabilitar la barra de herramientas e implementar la funcionalidad del boton actualizar, si alguien sabe como hacer eso, por fa ayudenme... Gracias ;)

# October 31, 2007 4:14 PM

Fran Díaz ha opinado:

Hola Olguita,

No sé si esto funcionará, pero puede ser una solución. En SSRS, si te vas al IIS y entras en la carpeta ReportServer, luego abres el archivo rsreportserver.config podrás ver una estructura xml. Navega y comenta(con <!-- linea -->) todo el contenido de Render(esta etiqueta no) para que te desaparezcan las opciones de exportar o deja las que te parezcan.

Espero que esto te pueda ayudar.

Un Saludo

# November 6, 2007 9:01 AM

Tlacaelel ha opinado:

Hola Fran:

Agradeciendo enormemente tu apoyo te escribo para comentarte que implementé este código en un WebForm de aspx y aunque solucioné algunos detalles (como la ausencia del control SaveFileDialog) no he podido solucionar lo siguiente:

- Mi reporte tiene parámetros que filtran los resultados pero al momento de exportar (conforme a este ejemplo) el archivo que resulta trae siempre todos los datos de la consulta principal, es decir, no respeta el filtrado de los parámetros. ¿Que me estará faltando? Saludos y de antemano muchas gracias

# November 28, 2007 7:54 PM

ritaE ha opinado:

consulta:

es posible modicar el tamaño(largo,ancho) de un parametro (en modo diseño)????

# March 6, 2008 8:05 PM

virgy_l ha opinado:

hola,

tengo una duda, segui tu ejemplo y resulta muy interesante, sobre todo porque hace mucho que no hago algo con SSRS, pero cuando lo ejecuto me aparece un error.

en el reportpath puse lo siguiente :

reportViewer1.ServerReport.ReportPath = "D:/Documents and Settings/virginia.luduena/My Documents/nueva_prueba_reports/Report_Test.rdlc";

y me tira un error :

The path of the item "D:/Documents and Settings/virginia.luduena/My Documents/nueva_prueba_reports/Report_Test1.rdlc" is not valid. the path must be less than 260 characters long and must start with slash. Other restrictions apply. (rslnvalidItemPath)

por favor si me pueden ayudar, desde ya muchas gracias :D

virgy

# March 17, 2008 5:04 PM

Fran Díaz ha opinado:

Hola,

RitaE.- A que te refieres con modificar el ancho y alto de un parámetro. ¿Puedes explicarte un poco más?

virgy_1.- El problema que tienes, es que estás intentando subir un informe que es de tipo local(rdlc) y no de servidor(rdl). Para exportar un informe de tipo local, no deberías de tener mayor problema con hacerlo desde el reportviewer. Voy a ver si saco tiempo y explico en un artículo como hacerlo Wink.

Un Saludo

# March 17, 2008 7:40 PM

Pilar ha opinado:

Hola Franz

Que gusto saber que se puede contar contigo para salir de nuestras dudas, queria preguntarte si es posible enviar un informe a un correo electronico desde codigo, lo que deseo hacer es que clicando en un boton se pueda enviar un informe en formato .pdf a un correo pero todo desde codigo y que el correo cambie cada vez que yo lo indique creo que para esto se tiene que crear una nueva suscripcion cada vez, lo cual tambien quisiera hacerlo por codigo, si tienes alguna idea de como hacer esto porfavor dimela, te agradezco mucho, Pilar.

# March 19, 2008 2:13 AM

Fernando Andrade ha opinado:

Hola Fran!!! Oye, tu apoyo es muy valioso. Ojala me puedas ayudar :) Necesito enviar directamente a impresión un reporte que está en un reportserver. Ya le paso parámetros, le paso las credenciales, lo puedo pasar a un arreglo de bytes en formato PDF, pero no sé cómo imprimirlo directamente a la impresora!!! Probé utilizando el objeto PrintDocument, pero hay que sobrecargar el evento PagePrint, pero me envía basura a la impresora. ¿Tendrás la solución a éste asunto?

De antemano gracias por tu atención.

# March 19, 2008 2:19 AM

Fran Díaz ha opinado:

Hola Pilar,

Lo que pides no es muy dificil [:)]. Verás, exporta el informe, crea el pdf y envíalo a cuantas direcciones quieras. ¿Qué es lo que te falta para terminar esta acción?

Las suscripciones son otro tema. Si quieres suscribir a un usuario a un informe, cuando se actualize este le mandará el correo.

Creo que lo que me comentas son dos temas distintos. De suscripciones no estoy muy puesto, pero puedo mirar como funciona [;)].

Ya me contarás.

Un Saludo

# March 19, 2008 10:36 AM

Fran Díaz ha opinado:

Hola Fernando Andrade,

Aquí tienes un ejemplo de como mandar a imprimir tu informe [;)].

Enlace: msdn2.microsoft.com/.../system.diagnostics.process(VS.80).aspx

Un Saludo

# March 19, 2008 10:36 AM

Fernando Andrade ha opinado:

¡Fran Díaz! Qué manera tan elegante de solucionar éste problema. Te agradezco muchísimo tu ayuda.

Recibe luz en tu misión de vida, y que tu cosecha sea de abundancia en lo que más atesores.

Quedo de ti, por si en algún momento del camino puedo corresponder tu orientación.

Un abrazo.

# March 20, 2008 12:43 AM

Pilar ha opinado:

Hola Franz

Muchas gracias por responder, de tu respuesta entiendo lo siguiente: visualizar el report en un control ReportViewer y exportar este report en .pdf lo cual se podria hacer por codigo creo (desde un boton por ejemplo, lo cual nunca he probado)y despues enviarlo a diferentes direcciones una vez que tenga el .pdf, solo que no tengo idea como hacer este envio a los mail, nose si existen metodos ya encargados para esto en el WebService ReportServer o si devo utilizar una herramienta para hacer el envio a los direcciones como las clases del SMTP, todo este proceso lo he ya probado manualmente en el webservice ReportManager creandome suscripciones, pero lo quisiera hacer por codigo. Gracias por escucharme, Pilar.

# March 20, 2008 6:51 PM

Cesar ha opinado:

Hola muchas gracias por el apoyo que me puedas brindar

Tengo un requerimiento sobre obtener el formato de un reporte segun el numero de filas que se obtiene al ejecutar. Quiero decir si el resultado del reporte tiene menos de 10000 registros entonce que lo muestro solo por web, si el resultado del reporte tiene mas de 10000 pero menor que 60000 registros entonce que lo muestre por excel se puede configurar con esos criterio que te expongo ???

GRACIAS

# March 25, 2008 7:14 PM

Nicolas Pascual ha opinado:

Fran Diaz, tengo el siguiente problema en reporting services y quisiera saber si puedes ayudarme.

Actualmente tengo un reporte alojado en el report server.

El mismo tiene un link hacia un form.net, el cual se invoca mediante la funcion JS window.open embebida dentro del reporte.

Este feature funciona a la perfeccion accediendo al reporte desde el report viewer site. (http://server/reports)

Pero yo necesito mostrar el reporte dentro de un frame de un website.

Hasta ahi voy bien, ya que logro mostrarlo sin problemas utilizando lo siguiente:

servername/reportserver

El reporte se muestra correctamente, pero el feature del popup javascript esta deshabilitado.

Sin embargo, si accedo al reporte desde el report viewer funciona de maravillas.

Se te ocurre alguna idea?

Quizas sea el frame el que este deshabilitando el codigo javascript?

Espero tus comentarios, muchas gracias.

# April 4, 2008 6:50 PM

Fran Díaz ha opinado:

Hola a tod@s,

Estoy contestando todos los comentarios en los foros de MSDN. Más información del porque la podéis encontrar aquí:geeks.ms/.../191-adi-243-s-a-los-comentarios-en-el-blog.aspx

Un Saludo

# April 26, 2008 9:59 AM