Una funcionalidad que siempre es requerida para cualquier tipo de reporte (en cualquier formato) es su exportación a otros formatos. En Crystal Report para ASP.NET 2.0 tenemos metodos ya disponibles para realizar esta tarea. Una de las preguntas desde los grupos de noticias o foros es como realizarlo desde el codebehind.
Primeramente necesitamos importar los espacios de nombre:
Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared
El primero para el reportDocument y el segundo para las opciones de exportacion.
Veamos un ejemplo para exportar a PDF desde el codebehind, sin la necesidad de enviar a impresion (ya que por defecto la impresion viene con salida en modo PDF, y la podemos cambiar a modo ActiveX)
Si tenemos un boton:
<asp:Button ID="btnExportarAPDF" runat="server" Text="Exportar a PDF" />
Podemos hacer algo asi:
Protected Sub btnExportarAPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportarAPDF.Click 'Cargar reporte. Enlazando a la fuente de datos. ReporteCargar() 'Mas adelante veremos que estas lineas las podemos obviar
Response.Buffer = False Response.Clear() 'ClearContent, ClearHeaders reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo") End Sub
Nota: El metodo ReporteCargar enlaza la fuente de datos al reportDocument que luego lo visualizamos con un ReportViewer, pero en este ejemplo queremos no visualizarlo sino exportarlo
Podemos ver la forma del metodo ExportToHttpResponse
El primer parametro FormatType que es un valor de ExportFormatType con estos
CrystalReport | El formato de exportación del informe es un archivo de Crystal Report. |
Excel | El formato de exportación del informe es un archivo de Microsoft Excel. |
ExcelRecord | El formato de exportación del informe es un archivo Excel Record. |
HTML32 | El formato de exportación del informe es un archivo HTML 3.2. |
HTML40 | El formato de exportación del informe es un archivo HTML 4.0. |
NoFormat | No se ha especificado el formato de exportación. |
PortableDocFormat | El formato de exportación del informe es un archivo PDF. |
RichText | El formato de exportación del informe es un archivo de texto enriquecido. |
WordForWindows | El formato de exportación del informe es un archivo de Microsoft Word. |
Segundo parametro el objeto Response actual (es para «adozarlo»).. aqui podemos tener una idea de que dentro del metodo realiza ya los pasos para limpiar la salida de response y adozar el archivo
Tercer parametro, si va o no como un objeto incrustado (inline o attachment) si colocamos True es lo mismo que si estamos limpiando la respuesta y solamente enviando el archivo como parametro esto hara estas lineas innecesarias, ya que el mismo metodo se encargara de realizarlo.
Response.Buffer = False
Response.Clear()
Nuestro código queda mas simple 😉
Protected Sub btnExportarAPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportarAPDF.Click 'Cargar reporte. Enlazando a la fuente de datos. ReporteCargar() reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo") End Sub
Para finalizar podemos decir que este tipo de exportacin tiene un nivel mas general con el metodo .Export del reportDocument que con opciones puede configurarse para la misma tarea, solo que ya tenemos el metodo para enviarlo a la respuesta de la pagina.
Tambien tenemos ExportToDisk (como se imaginaran la misma tarea de exportacion a un archivo fisico), y ExportToStream (a una secuencia de datos en formato especificado). Con este ultimo podemos tambien lograr la salida a response.. pero tendriamos que hacer todos los pasos por nosotros mismos (mas artesanal como siempre digo)
Enlaces:
- ReportDocument.Export (Método)
Exporta un informe a un formato y a un destino especificados dentro del objeto ExportOptions. - Utilizar el método ExportToHttpResponse()
El método ExportToHttpResponse() le permite exportar el informe de Crystal a una ventana de explorador o como archivo adjunto. Este método se utiliza sólo en sitios Web. - ExportFormatType Enumeración
Especifica el tipo de formato de exportación de la propiedad ExportFormatType de la clase ExportOptions.
Uno de los mejores articulos de exportacion de crystal….. habia buscado por todos lados ….. ya lo habia solucionado el tema… pero me quedaban muchas cosas dando vuelta.
Pero tengo una duda, yo estoy haciendo reportes masivos, osea le estoy enviando varios parametros al reporte y este me imprime una cantidad considerable facturas, cuando lo visualizo con crystal todo bien pero al agragarle la linea
rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, «ExportedReport»);
que es la que me lo exporta, este no asume los cambios….??????
Hola Dario
Gracias por el comentario.
Con respecto a lo que comentas «no asume los cambios» que significa? no realiza la consulta?
Tienes que «enlazarlo» al reportDocument en tu caso se llama rpt nuevamente a los datos.
Estoy usando visual 2005 y quiero exportar a PDF, pero use las etiquetas inteligentes para hacer todo, osea que no tengo codigo que cargue el reporte en el crystalviewer, como puedo hacer en este caso?
Hola Jorge
No lo probe pero seguro deberias obtener el reporte para poder exportarlo.
Prueba lo siguiente:
(necesitas estas importaciones de namespaces)
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
…
(aqui va el codigo)
Dim reporteDoc As ReportDocument = Me.CrystalReportViewer1.ReportSource
reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, «NombreArchivo»)
Espero que te sirva
Jose mucha gracias por tu ayuda, al final lo solucione asi
Me.CrystalReportSource1.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, «Nombrearchivo»)
Unable to connect: incorrect log on parameters.
Aca el codigo:
CrystalDecisions.Shared.TableLogOnInfo TableLogOnInfo = new CrystalDecisions.Shared.TableLogOnInfo();
CrystalDecisions.Shared.TableLogOnInfos TableLogOnInfos = new CrystalDecisions.Shared.TableLogOnInfos();
CrystalDecisions.Shared.ConnectionInfo ConnectionInfo = new CrystalDecisions.Shared.ConnectionInfo();
ConnectionInfo.DatabaseName = ConfigurationManager.AppSettings[«baseDatos»];
ConnectionInfo.ServerName = ConfigurationManager.AppSettings[«servidorBD»];
ConnectionInfo.UserID = ConfigurationManager.AppSettings[«userID»];
ConnectionInfo.Password = ConfigurationManager.AppSettings[«password»];
TableLogOnInfo.ConnectionInfo = ConnectionInfo;
TableLogOnInfos.Add(TableLogOnInfo);
CrystalReportViewer1.LogOnInfo = TableLogOnInfos;
CrystalReportSource1.Report.Parameters[0].DefaultValue = sCveRemesa;
CrystalReportViewer1.RefreshReport();
CrystalReportSource1.ReportDocument.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, false, «»);
Es en web en c#, alguna observacion?
Cualquier ayuda bienvenida, de antemano, muchas gracias!
Hola Raymundo
El codigo esta bien, solo que parece que la parte de login los parámetros son incorrectos.
Pruebalo con los parametros en «crudo», algo asi:
ConnectionInfo.DatabaseName = «Northwind»
ConnectionInfo.ServerName = «Yoda»
ConnectionInfo.UserID = «sa»
ConnectionInfo.Password = «sa»
Para corroborar.
Porque no puede «reproducir el mismo error»
Otro tema en tu diseño tienes algo asi no?
Espero que te sirva, sino comentame como estas obteiendo los datos de la DB entonces puedo reproducir tu ambiente.
Saludos.
Este es el html:
Los parametros de conexion son correctos, esto debido a que al poner la sentencia para exportar fue cuando me empezo a marcar el error, antes funcionaba correctamente…
CrystalReportSource1.ReportDocument.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, false, «»);
En fin, el reporte lo diseñec con conexiones directamente a la base de datos, el codigo de parametros de conexion fue para que no me pidiera nuevamente el password de la base en ejecucion.
A resumidas cuentas, mi problema es que ocupo imprimir directamente el reporte a pdf en el navegador sin que me salga la ventana de print options. Espero que me puedan ayudar, muchas gracias por la atencion.
Por fin pude reproducir el error:
Logon failed.
Details: ADO Error Code: 0x
Source: Microsoft OLE DB Provider for SQL Server
Description: Login failed for user ‘sa’.
SQL State: 42000
Native Error: Error in File C:DOCUME~1JOSEFE~1LOCALS~1TemprptCategoriasDirectoDB {38C462E2-784F-4709-9FA0-B50FDBE4FF3C}.rpt:
Unable to connect: incorrect log on parameters.
Lo miro por la mañana y veo por donde va la solucion…
Hola nuevamente Raymundo
Lo que hice para solucionar fue colocar la linea que exporta en el evento PreRender del CrystalReportViewer1
Protected Sub CrystalReportViewer1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles CrystalReportViewer1.PreRender
Dim rpt As ReportDocument = Me.CrystalReportSource1.ReportDocument
rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, False, «»)
End Sub
Espero que te sirva de ayuda o guia
Listo!
En mi caso no fue en el evento PreRender, sino en el BeforeRender :s, pero al fin se soluciono.
Disculpa, no habia contestado debido al fin de semana, me desligo del trabajo lo mas que puedo jeje.
Por tu atencion, te estoy muy agradecido, ahora se que alguna duda, puedo contar con tu blog, quiza algun dia pueda aportar algun comentario de valor.
De nueva cuenta, gracias.
Hola Lisseth
De donde sacas este metodo? CreateCrystalReportDocument?? es un componente que lo armaste?
Lo que si veo es que te devuelve un ReportDocument ya que luego lo asignas como ReportSource.
Cuando llamas a tu evento exportar tendras que ejecutar los mismos pasos para armar el reporte. Entonces la idea es que encapsules en un metodo lo que ahora tienes en el Load de la pagina.
Gracias por contestar, ese metodo sale de una clase que uso para las conexiones y parametros, aqui esta el codigo de toda la clase:
public class Crystal
{
public Crystal()
{
}
public CrystalDecisions.Shared.ConnectionInfo logInfo;
public string rutaRpt;
public void conectar()
{
logInfo = new CrystalDecisions.Shared.ConnectionInfo();
logInfo.ServerName = «XYZ»;
logInfo.DatabaseName = «xyz»;
logInfo.IntegratedSecurity = true;
}
private static void logonrpt(ref ReportDocument rpt) {
Tables tables = rpt.Database.Tables;
Crystal cr1 = new Crystal();
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = cr1.logInfo;
table.ApplyLogOnInfo(tableLogonInfo);
}
}
public ReportDocument CreateCrystalReportDocument(string ruta)
{
ReportDocument rpt = new ReportDocument();
rpt.Load(ruta);
conectar();
Tables tables = rpt.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = logInfo;
table.ApplyLogOnInfo(tableLogonInfo);
}
return rpt;
}
public ParameterField parameter(string id,string valor)
{
ParameterField parametro = new ParameterField();//envio el nombre del parametro
ParameterDiscreteValue dVal = new ParameterDiscreteValue();//envio el valor del parametro
parametro.Name = id;//asigno el nombre del parametro
dVal.Value = valor;//asigno el valor del parametro
parametro.CurrentValues.Add(dVal);//adhiero a la coleccion de parametros
return parametro;
}
public ParameterField parameter2(string p1, string p2, string p3, string p4, string p5, string v1,
string v2, string v3,string v4, string v5 )
{
ParameterField parametro = new ParameterField();//envio el nombre del parametro
ParameterDiscreteValue dVal = new ParameterDiscreteValue();//envio el valor del parametro
parametro.Name = p1;//asigno el nombre del parametro
dVal.Value = v1;//asigno el valor del parametro
parametro.CurrentValues.Add(dVal);//adhiero a la coleccion de parametros
return parametro;
}
Pero a que se refiere cuando me aconseja que el evento click del boton exportar siga los mismas pasos para armar el reporte??
Yo sé que debe ser sumamente sencillo lo que pregunto pero soy nueva en c# y crystal report.
Gracias por su ayuda.
}
Hola nuevamente, siguiendo su consejo hice esto:
public partial class ViewReport : System.Web.UI.Page
{
ReportDocument rpt = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
CargarReporte();
}
protected void CrystalReportViewer1_Unload(object sender, EventArgs e)
{
rpt.Close();
rpt.Dispose();
}
protected void btn_exportar_Click(object sender, EventArgs e)
{
CargarReporte();
rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, true, «»);
}
protected void CargarReporte()
{
string p1 = «@codProd»;//crea el parametro del procedimiento almacenado
string p2 = Request.QueryString.Get(«ItemId»);
Crystal cr = new Crystal();
//ReportDocument rpt = new ReportDocument();
string reportPath = Server.MapPath(«CRPartida.rpt»);
//creo variable para el envio de parametros
ParameterField parametro = new ParameterField();//envio el nombre del parametro
parametro = cr.parameter(p1, p2);
rpt = cr.CreateCrystalReportDocument(reportPath);
CrystalReportViewer1.ParameterFieldInfo.Add(parametro);
CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
}
}
Pero me sigue saliendo el mismo error:
Missing parameter values.
Line 65: rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, true, «»);
Ayuda por favor es que necesito eso de suma urgencia para mi trabajo ;(
Hola Lisseth
Gracias por copiar la clase, esta probando y el inconveniente es que estas pasando el parametro al CrystalReportViewer, y la buenas practicas dice que debes pasarlo al ReportDocument.
En tu codigo deberias cambiar esta linea
CrystalReportViewer1.ParameterFieldInfo.Add(parametro);
Por esta otra
rpt.SetParameterValue(p1, p2)
Todo lo demas sigue igual a como estaba.
Comentame como te fue
Muchas gracias José, por fin logré exportar a .pdf mi reporte después de probar un montón de artículos, oye pero una última cosilla no me salió el recuadro de tu artículo que si quiero guardar el archivo o abrirlo, sino que de una se me abrio el pdf en el mismo browser, a que se deberá esto?
Una consulta tu creas que pueda exportar de la misma forma como exporto a excel a otros formatos como .doc o .xls escogiendo dicho fomato desde un dropdownlist(combo)?
Muchas gracias nuevamente.
Ya me salió la exportación desde el combo a varios formatos para escoger y me sale el recuadro de abrir, guardar o cancelar la exportación.
Muchas gracias José por su ayuda!!!!! 😉
Hola nuevamente, el problema de la exportación de crystal reports a pdf continua, es decir al cambiar lo que José me dijo:
En tu codigo deberias cambiar esta linea
CrystalReportViewer1.ParameterFieldInfo.Add(parametro);
Por esta otra
rpt.SetParameterValue(p1, p2)
se solucionó para ese reporte que solo tenia 1 parametro pero al hacerlo para un reporte que tiene varios parametros me sale el siguiente error:
Line 51: rpt = cr.CreateCrystalReportDocument(reportPath);
Line 52: //crv_completo.ParameterFieldInfo = parametro;
Line 53: rpt.ParameterFields.Add(parametro);
Line 54: crv_completo.ReportSource = rpt;
Line 55: crv_completo.DataBind();
No sé que hacer yo de verdad necesito poder exportar esos reportes a pdf.
Gracias. ;(
Hola José, excelente tu artículo pero tengo un problema al exportar a .pdf ya que me exporta el reporte pero en algunas filas sale el texto cortado.
Tienes alguna idea de como solucionar ese gran inconveniente?
Gracia por tu ayuda.
Hola Rodrigo
(es dificil darte una solucion sin ver algo.. pero lo intentaremos)
Cuando insertas un campo en el reporte, puedes ir las propiedades del objeto (boton derecho) y tienes una propiedad que es «Can Grow» (Puede crecar) y es para que crezca el contenido verticalmente, puedes ingresar el limite de filas (pero si colocas 0 este limite no existe y crece hasta visualice todo el contenido)
Espero que te sirva de ayuda o guia
Gracias por tu rápida respuesta, como mis reportes presentan muchos datos numericos y alfabeticos y los datos alfabeticos son muy grandes yo le puse el can grow check=true pero no especifique el limite en el campo de texto que se ve ahi, es decir lo deje por el valor default que es cero. Asi los textos largos se ajustan de acuerdo al largo del casillero.
Voy hacer lo que me aconsejas y darle valores al limite de caracteres a presentarse horizontalmente para ver que pasa.
Gracias amigo.
Me parecio muy bueno este pequeño pero explicita manual, me ayudo de mucho para un proyecto que tenia.
Queria hacerte una consulta… quiero exportar varios reportes a excel, pero no a distintos archivos xls sino a un mismo archivo pero con distintas hojas (sheets de excel), sabes alguna manera de hacerlo. Gracias.
Hola Javier… interesante pregunta, solo que para tener un mayor control sobre el render de excel tendrias que ver otra alternativa a un CR, a componentes de terceros, o dale una mirada al reciente SDK de OPEN XML donde podras manipular estos archivos.
Si ya habia visto algo con Open XML, pero me parece que solo funcionaria para office 2007 y yo estoy con 2003, al parecer tendre que buscar otra forma.
Gracias.
Alguien sabe como exportar desde visual 6 a un documento PDF pero con contraseña o protegido
Una pregunta estoy usando tu codigo pero me marca el siguiente error
CrystalDecisions.CrystalReports.Engine.ParameterFieldCurrentValueException was unhandled by user code
Message=»Missing parameter values.»
Source=»CrystalDecisions.ReportAppServer.DataSetConversion»
StackTrace:
El reporte tiene parametros pero no se como pasarselos a la hora de exportar me pantalla ya me sale pero no a la hora de exportar.
Gracias
Hola Armando
Lee detenidamente los comentarios de este post, que por ejemplo también hay una clase que te ayuda en la creación del reporte (junto con los paramentros)
hola, nose si me puedes ayudar, estoy trabajando con vs2005 c#. y hasta aqui todo esta bien:
CrystalReportSource1.ReportDocument.SetDataSource(tb);
tb esta con todos los datos de las tablas que voy a desplegar en el reporte. Pero cuando voy a exportarlo:
CrystalReportSource1.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat,Response,false,»»);
en el cliente despliega el reporte en pdf pero sin datos.
Agradesco tu respuesta..
Necesito esto mismo para VB6.0 alguien me puede ayudar ?
🙁
Hola NyselT
Para VB6 yo utilizaba (y en algunos proyectos legacy aun utilizo) CR8
Alli no era posible (si mal no recuerdo)exportar a PDF… pero si recien en la version CR8.5
Cual versión de CR8 estas utilizando??
Pero si quieres exportar desde VB6 mira:
Pero una vez encontre esta libreria en VB6 para generar PDF
http://www40.brinkster.com/oPdf/default.asp?IdS=1
Espero que te sirva de ayuda o guia.
Alguien sabe si es posible exportar un reporte a PDF con contraseña o mejor aun, exportar a PDF con alguna propiedad que solo permita visualizar el reporte y no poder imprimir?
al ejecutar la exportacion me sale el siguiente error:el codigo de usuario no encontro invalidArgumentException, le agradeceria la ayuda
Protected Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim oRptPrueba As PRUEBA22 ‘rptPrueba
Dim oArchivoDestino As DiskFileDestinationOptions
If Me.ddlTipos.Text.Length = 0 Then
MsgBox(«Seleccionar un formato para exportar»)
Exit Sub
End If
If Me.TextBox1.Text.Length = 0 Then
MsgBox(«Escribir nombre de archivo para exportar»)
Exit Sub
End If
oArchivoDestino = New DiskFileDestinationOptions()
oRptPrueba = New PRUEBA22()
oRptPrueba.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
Select Case Me.ddlTipos.Text
Case «PDF»
oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat
oArchivoDestino.DiskFileName = Me.TextBox1.Text & «.PDF»
Case «Excel»
oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.Excel
oArchivoDestino.DiskFileName = Me.TextBox1.Text & «.XLS»
Case «Word»
oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.WordForWindows
oArchivoDestino.DiskFileName = Me.TextBox1.Text & «.DOC»
Case «RTF»
oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.RichText
oArchivoDestino.DiskFileName = Me.TextBox1.Text & «.RTF»
End Select
oRptPrueba.ExportOptions.DestinationOptions = oArchivoDestino
oRptPrueba.Export()
MsgBox(«Informe exportado a » & Me.ddlTipos.Text)
End Sub
Hola que tal, bueno espero puedan darme alguna ayuda el tema es estoy trabajando con ASP.net c# (visual studio 2008) y genero un reporte de factras con crystalviewer1 el tema es el siguiente debemos enviar una parte de esas facturas electrónicamente por lo que debo primero exportarlas a pdf pero con Fuentes EMBEBIDAS que son necesarias si o si para la generación del código de barras de la misma a través del cual el cliente paga en bancos y otros medios por lo que esa fuente está licenciada y no la puedo cambiar y con el metodo ExportFormatType.PortableDocFormat no me toma las fuentes embebidas entonces necesito algun componente que me permita hacer esto «por código» no con interface sino que se hace transparente al usuario es decir se seleccionan el bloque de facturas se exporta cada una a pdf y se almacenan en el servidor o localmente luego por otro lado hace el envio de esos archivos. si alguien sabe algo de esto o que componente usar agradezco cualquier ayuda que me puedan dar muchas gracias
Hola Paola
Nunca tuve la oportunidad de necesitar incrustar fuentes (embeberlas en el pdf) en CR, pero creo si es para Codigo de barras, en CR2008 ya viene esas fuentes embebidas para utilizarlas. Mira:
http://www.businessobjects.com/pdf/product/catalog/crystalreports/cr_2008_whats_new.pdf
Si no estas utilizando CR2008… Tendrias que ver otras formas de generar tus reportes
(tengo un post en borrador hace un tiempo sobre generacion de pdf)
TE dejo algunos enlaces para que investigues sobre esto:
– iTextSharp
http://itextsharp.sourceforge.net/
Descarga:
http://sourceforge.net/projects/itextsharp/
Tutorial
http://itextsharp.sourceforge.net/tutorial/index.html
Ejemplo
http://www.elguille.info/colabora/NET2005/Percynet_Funcionalidad_itextsharp_con_csharp.htm
– iText.NET
Free PDF Library for .NET Framework
http://www.ujihara.jp/iTextdotNET/en/
Ejemplos de codigo en VB.NET con iText.NET
http://www.ujihara.jp/iTextdotNET/en/examplesvb.html
– Report.NET
http://report.sourceforge.net/
– SharpPDF
http://sharppdf.sourceforge.net/
Tutorial
http://sharppdf.sourceforge.net/Tutorials.html
Espero que te pueda servir, y tambien espero poder postear algo al respecto cuando tengo un tiempo 🙂
Saludos
por favor alguien me puede ayudar como puedo hacer la exportacion de un proyecto web c#.net a pdf o excel y tambien si alguien sabe como mandar imprimir un repeater ya que este muestra un repeater demaciado extenso quiero decir que tiene varias columnas que dicen…
auxilio me urenge las 2 cosas la exportacion a excel y la impresion
un favor quiza para ustedes es algo muy sencillo pero yo ya llevo las horas y no le encuentro el porque. mi detalle es que cuando exporto el reporte a pdf me sale la ventanita que me dice cuantas copias y si deseas imprimir todo pero despues de eso no me aparece la ventana de guardar como. asi que no se donde se guarda y el nombre que tiene, lo que quiero es que aparesca la ventanita.
esto no pasa en todas las maquinas solo en unas..
ojala me puedan ayudar, de antemano les mando un cordial saludo.
[Para Veroali]
Tendrias que mirar los componentes que menciono un comentario mas arriba del tuyo, para poder armar tuy propio PDF, Con respecto a Excel, puedes utilizar la famosa tecnica de armar una tabla HTML y cambiar el content-type
[Para elfaro]
Es dificil ayudar sin ver el problema. Es el mismo sistema operativo? el mismo navegador?
Puedes encontrar ayuda mas «rapida» que aqui por los newsgroup de ASP.NET
http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/topics?hl=es
o desde los foros de MSDN:
http://forums.microsoft.com/MSDN-ES/ShowForum.aspx?ForumID=309&SiteID=11
Espero que te sirva de ayuda o guia
Buenos Dias
Desde una pagina aspx exporto 5 reportes a word (No hay problema). Pero luego el usuario selecciona uno de los 5 reportes y lo debe imprimir en una impresora que se pasa por parametro…. Como puedo hacer esto lo estoy haciendo con interop.word para abrir el word en la pagina aspx y luego imprimir pero no me hace nada…. No abre el word ni nada en el servidor…. La pagina se queda haciendo nada…. Ya revise permisos en el IIS…. que puedo hacer…. El desarrollo es web y esta con visual studio 2008.
Gracias de antemano.
Nadie me responde Ayuda
🙁
Es muy bueno tu articulo,me voy a tomar la libertad de hacerte una consulta. Tengo el siguiente problema tengo un programa que entre muchas cosas que hace, genera informes en crystal report y estos se pueden exporta a varios formatos, pero cuando instalo el programa en algunos equipos no me funciona el boton de exportar de crystal (el icono de un sobre), he probado instalando cuanto dll y ocx he encontrado, pero no me permite exporta, no me envia un error, sino que no aparece el cuadro de dialogo Exportar… si me puedes ayudar te lo agradeceria
y como realisas todo este proceso pero para aplicaciones «Windows Forms»
trabajo con visual basic 6 y crystal 8 tengo problemas con el boton de exportar saca todos los cuadros pero el archivo que genera lo deja en blanco ya sea excel o otro formato
Hola necesito exporta d crystal a excel pero a una hoja espicifica de mi libro no se como hace esto me pueden ayudar
estoy usando el viewer 10 y vb.net
Hola kradle
En winform tambien puedes realizar esta tarea.
———————-
Hola Eli27
Puedes enviar datos a una hoja de excel de varias maneras, te dejo enlaces que te pueden ayudar
– Transferir los datos a un archivo de texto delimitado por comas o tabuladores que Excel puede analizar después en las celdas de una hoja de cálculo.
– Transferir los datos a una hoja de cálculo con ADO.NET.
– Transferir los datos XML a Excel (versiones 2002 y 2003) para proporcionar datos que tengan formato y estén organizados en filas y columnas.
mas info
– Cómo transferir datos a un libro de Excel utilizando Visual C# 2005 o Visual C# .NET
http://support.microsoft.com/default.aspx/kb/306023
Haciendo referencia a Microsoft.Office.Core
– Exportar datos a Excel (Javier Conesa y Carmen Hernández)
http://www.moreplus.es/index.aspx?accion=articulo&id=122
o tambien
– Pasar Datagrid a Excel
http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/browse_thread/thread/301907187de7d109
Hola que tal, tengo el siguiente problema al exportar un reporte de Seagate Crystal Reports producto 8.0.1.0 VErsion 8.0.0.37 a un Libro de Excel 2007, el campo de detalle me lo limita a cierto numero de caracteres, pero si edito la celda puedo seguir escribiendo mas caracteres de los exportados, me podria ayudar alguien a saber que propiedad tengo que modificar o que puedo hacer para que no limite la celda, el Crystal lo ejecuto desde un programa en Visual Basic 6.0 Saludos!!!
Hola, excelente blog amigo, hice la prueba en VS 2008 y funciona muy bien, ahora lo que requiero hacer es lo siguiente, quiero que a partir de un boton cargar el reporte, exportar el archivo en pdf y guardarlo en una ruta del directorio, tanto el nombre del archivo como la ruta donde se guardan son creados desde codigo de manera automática, todo esto lo quiero pero que no sea visible para el usuario, espero alguien me pueda ayudar, saludos a todo.
Hola,
Tengo el siguiente problema.
Desde el Crystal Reports genero un reporte basado en una consulta a la base de datos, una de esas columnas puede tener informacion muy larga. Si genero en reporte desde Crystal se visualiza bien el reporte. Si invoco el reporte desde un ASP, las filas con informacion larga se sobreescriben.
Gracias por su ayuda
Hice tal cual como pones en tu código, peor solo consigo el siguiente error:
An exception of type ‘System.InvalidCastException’ occurred in App_Web_at7lzrev.dll but was not handled in user code
Additional information: Unable to cast object of type ‘CrystalDecisions.ReportSource.NonHTTPCachedReportSource’ to type ‘CrystalDecisions.CrystalReports.Engine.ReportDocument’.
Hay que configurar alguna otra propiedad al reporte???
@Roberto
Tendrias que ver el codigo, pero por lo que comentas debe ser algo del ReportSource.
Como estas asignando?
O mejor…cuando haces debug en que linea te da el error?
Hoy hice otra prueba, y me di cuenta que el código funciona…siempre y cuando sea en una ventana anexa a la aplicación, si el reporte se abre en la misma página no hay caso.
Al parecer el error se presenta porque no puedo cambiarle el header a la página en tienmpo de ejecución.
¿Existe alguna forma de arreglar esto?
Al hacer un debug más acabado me encuentro con que el problema lo tiene al tratar de usar el objeto RESPONSE…¿tendra que ver con que esta en una masterpage?
(si abro el reporte en otra ventana no hay problema)
Hola, me sirvió mucho tu explicación, pero aún tengo un problema, no se si puedas ayudarme; resulta que puedo exportar el reporte a todos los formatos excepto a PortableDocFormat, sólo me aparece un recuadro con la barra de dezplazamiento bloqueada, no se tal vez tu sepas el por qué de esto.
Lo corregí…el problema se daba, no por el código de exportación…sino porque en la página que lo llamaba tenía el reporte en un updatepanel AJAX…
@Julio
Si tu exportacion es a PDF, parece ser que es un problema de tu navegador? prueba con exportar a disco a ver si funciona
@Roberto
Gracias por compartir tu experiencia.
No creo que se problema de compatibilidad con ASP.NET AJAX ya que tengo proyectos con ambas tecnologias
saludos, tengo el mismo problema que Roberto, cuando se me ocurre poner la exportación en un boton dentro de un UpdatePanel el Response me marca error, he tenido casos com oeste don deel ajax no me admite el Response, no se si tendras alguna solucion o ejemplo de como lo usas cuando trabajas dentro de un updatepanel, me seria muy útil, gracias, saludos
@Carlos
voy a ver si puedo postear con un ejemplo (recordamelo sino lo hago la semana que viene)
Saludos
pues solo para recordarte del ejemplo que ibas a postear sobre mandar de crystal a pdf con un botón dentro de un update panel, saludos desde México y muchas gracias
pues dijiste que si n olo posteabas la semana pasada te recordara, y aqui estoy puntual, saludos esperando el ejemplo, gracias
@Carlos
Aqui esta el post
Exportar Crystal Report Document ASP.NET dentro de un UpdatePanel
http://geeks.ms/blogs/fernandezja/archive/2009/03/30/exportar-crystal-report-document-asp-net-dentro-de-un-updatepanel.aspx
hola tengo una duda no me funciona bien
mi programa me marca el siguiente error
Referencia a objeto no establecida como instancia de un objeto. en la siguiente
linea
Línea 176: reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, «reporte»)
me podrias deciar por favor como le puedo hacer
Gracias!!!
Hola @Nancy
Debe ser por problemas de ExportFormatType?
Tu escribiste esa linea o copiaste? Escribiste con intellisense el metodo ExportToHttpResponse y el tipo de formato de exportacion?
Pero para ganar tiempo mira si importaste estos espacios de nombre:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
(al principio del articulo comento para que se necesitan ambos)
al tratar de exportar los datos desde un reporte cryhstal (4) a un archivo exel, me rechaza con el argumento 20540 «falta la dll de exportacion o no esta actualizada»
Hola Miguel
Hace cuanto no utilizo CR y mas aun la version 4… pero trataremos de ayudarte.
Te comento que cuando programaba en VB6 con CR8 teníamos problemas en el deployment para las DLL del CR.
– O haces tu instalación manualmente (de las DLL necesarias) copiar las dll en las carpetas correctas y algunas registrarlas
– u obtienes el merge module de CR4 y lo metes dentro de tu instalador
Como estas desplegando el CR en tus clientes?
Mas ayuda puedes buscarla en la «ayuda online»
Esto te puede ayudar:
https://www.sdn.sap.com/irj/scn/advancedsearch?query=Crystal+report+20540
Mas precisamente donde dice: «1209439 – Export Options Not appearing at runtime»
Estoy haciendo una aplicacion que de unas facturas y las estoy generando en pdf, pero ahora se hace necesario crearle una clave para que el usuario las pueda visualizar. Me podrian ayudar es muy urgente
Hola @SandraF, nunca necesite realizar esta tarea de crear un PDF con Password, asi que no te podria ayudar directamente…
Pero mira si te sirve este enlace:
– Merging and Password Protecting PDFs Exported by Crystal Reports
http://aspalliance.com/571
Que tal! primero que nada, excelente artículo, tenia ciertas dudas y pude despejarlas, pero lo que no he podido hacer, es que el reporte se abra en una ventana del navegador nueva. Imagine que debería usar el «target _blank», pero no se como implementarlo. Es bueno decir que uso UpdatePanel, por lo que el reponse.write o algo así no funciona. Gracias de antemano!
Hola @Anib,no lo hice pero se me ocurre que si quieres que el reporte o la exportación se abra en otra ventana, tendrás que implementar una llamada a una pagina que contenga el mismo código (podrías compartirlo como UserControl). Es decir no puedes enviar el reporte a otra pagina, tampoco creo que quieras guardar en disco solamente para mostrarlo en otra pagina, solución entonces (la que te comente) armar un UC que presente el reporte y el mismo UC que exporte solo que cuando quieres exportar abres una nueva ventana a la cual envías los parametros necesarios para que el UC vuelva a consultar «sus datos»… se entiende?
@Anib
Puedes utilizar una librería que si te permite esto, mira PdfSharp
http://www.pdfsharp.net/wiki/ProtectDocument-sample.ashx
Muy bien! Gracias José, ya logramos abrir el PDF en otra ventana. Pero en enlace para PDFsharp sería un bonus para el reporte. Gracias por la ayuda. Excelente blog.
@Anib, me alegro que te sirviera.
Gracias por los halagos, uno siempre se pregunta si lo que uno escribe puede llegara ayudar a alguien mas, y con esto corroboro 🙂
Saludos cordiales.
Señores buenas tardes desde ya gracias por el foro y la ayuda, tengo problemas al exportar un reporte a PDF desde asp net 1.1.
El reporte tiene un sub reporte estos si se visualizan pero a la hora querer exportar me sale el siguiente error, ojo que otros reportes si los exporta bien aqui todo el codigo:
Private Sub Unidades_Rpt()
Dim rptStream As New System.IO.MemoryStream
Dim subreportName As String
Dim subreportObject As SubreportObject
Dim mysub As New Rpt_Rs_Unidades
Dim rep As New ReportDocument
Dim RepSub As New ReportDocument
Dim reportPath As String = Server.MapPath(«Rpt_Unidades.rpt»)
oCRConnectionInfo.DatabaseName = «CnComisiones»
oCRConnectionInfo.ServerName = «192.168.1.7»
oCRConnectionInfo.UserID = «xxxx»
oCRConnectionInfo.Password = «0000000000»
CrystalReportViewer1.ReportSource = Server.MapPath(«Rpt_Unidades.rpt»)
rep.Load(Server.MapPath(«Rpt_Unidades.rpt»))
rep.SetDatabaseLogon(«xxxx», «0000000000»)
rep.Load(reportPath)
rep.SetParameterValue(«@Idcoordinador», Session(«filtro_sup»))
If TypeOf (rep.ReportDefinition.ReportObjects.Item(«Subreport1»)) Is SubreportObject Then
subreportObject = rep.ReportDefinition.ReportObjects.Item(«Subreport1»)
subreportName = subreportObject.SubreportName
RepSub = rep.OpenSubreport(subreportName)
End If
rptStream = CType(Rpt_Unidades.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)
End Sub
Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportar.Click
Dim rptStream As New System.IO.MemoryStream
If Session(«rpt1») = 1 Then
ElseIf Session(«rpt1») = 2 Then
rptStream = CType(Rpt_Personal.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)
ElseIf Session(«rpt1») = 3 Then
Unidades_Rpt()
ElseIf Session(«rpt1») = 4 Then
ElseIf Session(«rpt1») = 5 Then
End If
‘rptStream = CType(rptWebComisiones.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)
‘Limpiamos la memoria
Response.Clear()
Response.Buffer = True
‘Le indicamos el tipo de documento que vamos a exportar
Response.ContentType = FormatoDocumento()
‘Automaticamente se descarga el archivo
Response.AddHeader(«Content-Disposition», «attachment;filename=» + Me.nombreReporte)
‘Se escribe el archivo
Response.BinaryWrite(rptStream.ToArray())
Response.End()
End Sub
Private Function FormatoDocumento() As String
Dim tipo As String
Select Case Integer.Parse(ddlTipos.SelectedValue)
Case ExportFormatType.Excel
tipo = «application/vnd.ms-excel»
nombreReporte &= «.xls»
Case ExportFormatType.RichText
tipo = «application/rtf»
nombreReporte &= «.rtf»
Case ExportFormatType.WordForWindows
tipo = «application/msword»
nombreReporte &= «.doc»
Case Else
tipo = «application/pdf»
nombreReporte &= «.pdf»
End Select
Return tipo
End Function
Me olvidaba aqui el error:
Error de servidor en la aplicación ‘/WebComisiones’.
——————————————————————————–
Falta el valor actual del campo de parámetro.
Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.
Detalles de la excepción: CrystalDecisions.CrystalReports.Engine.ParameterFieldCurrentValueException: Falta el valor actual del campo de parámetro.
Error de código fuente:
Línea 140: RepSub = rep.OpenSubreport(subreportName)
Línea 141: End If
Línea 142: rptStream = CType(Rpt_Unidades.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)
Línea 143:
Línea 144: End Sub
Archivo de origen: C:InetpubwwwrootWebComisionesRptPrincipal.aspx.vb Línea: 142
Hola @jgavelan
Gracias por dejar tu comentario, justamente esto no es un foro sino un simple post de mi blog, dude en publicar tu código extenso pero al final lo hice.
Con respecto a tu problema, hace unos cuentos meses que no utilzo CR, pero el error de ParameterFieldCurrentValueException mas arriba en los comentarios podras ver que hay una clase que nos ayuda a crear reportes con CR, sin necesidad de estar escribiendo todo cada vez, dale una mirada. Es la clase que @Lisseth posteo en un comentario.
Espero que con eso te pueda ayudar.
Buenos dias,
De hace algunos dias me estoy quebrando la cabeza con esto, haber si me pueden ayudar.
En una pagina aspx, estoy creando una cotizacion, cuando pulso el boton de crear cotizacion, genero un reporte, pero este debe de aparecen en formato pdf.
Al mandar llamar la pagina que contiene el control CrystalReportViewer1 se abre esta pagina y se abre otra mas que ya es el pdf en si , ¿alguna sugerencia?, desde ya, muchas gracias
Hola, es muy bueno el reporte, pero no sabras de casualidad como abrir un archivo desde vb.net 2005 Word o de Excel, (como esos archivos son formatos se vueleven a reutilizar, el usuario llena el formato) y después lo exporte a pdf y se guarde la ruta en sql Server 2005.
Hola, tengo el siguiente problema. Estoy utilizando c# con vs2005 y utilizo un rpt el cual exporto a pdf. El rpt tiene un campo que es un código de barras. Cuando lo ejecuto en local todo sale perfecto pero al colgar la aplicación en el iis el campo del código de barras sale sin la fuente correspondiente.
He mirado las propiedades del pdf y en local aparece con la fuente pero en el servidor no la tiene.
¿Alguien puede ayudarme por favor? Me estoy volviendo loca y me urge. Muchas gracias
Hola Luis
El problema no es este?? de cantidad de trabajos simultaneos
«The maximum report processing jobs limit configured by your system administrator has been reached»
por defult es 75, asi que podria venir por ahi tu problema
Mira si te sirve cambiar en el registry el valor PrintJobLimit
Se encuentra aqui:
HKEY_LOCAL_MACHINESOFTWARECRYSTAL DECISIONS10.0REPORT APPLICATION SERVERSERVERPrintJobLimit
Mas info:
http://geekswithblogs.net/technetbytes/archive/2007/07/17/114008.aspx
Avísame si es este tu problema porque ni consigo ver la descripción de la excepción que envías
No puedo exportar un archivo de cristal reports 7 a excell, me dice que la versión de ser igual o superior a cristal report 9 , donde la puedo conseguir
Hola, tengo un problema, genero una exportación de a pdf de forma «artesanal», es decir:
MemoryStream rptStream = new MemoryStream();
rptStream = rptMan.getReportStream(sPath, sID);
Response.Clear();
Response.Buffer = true;
Response.ContentType = «application/pdf»;
Response.AddHeader(«Content-disposition», «attachment; filename=CartaRenuncia.pdf»);
Response.BinaryWrite(rptStream.ToArray());
Response.End();
esto en mi local corre perfecto, el problema que al subirlo al server de desarrollo o de producción, el primer reporte que se genera se tarda demasiado, despues de este, cualquier otro que se genera no tarda nada, incluso si es el mismo reporte el que se genera por segunda vez.
sabras a qeu se pueda deber el que se tarde al generar por primera vez?
Gracias
Y podrias decirme como exportar a PDF desde vb6 con crystal 8. Gracias, isabel
Genial..
Excelente post.
Muy bueno me ayudado mucho, se nota sabes bstante,asi es que espero me puedas ayudar.
Te cuento: logre levantar el informe pero me manda el sgte. error
«No es posible abrir un conjunto de filas. Detalles: Código de error ADO: 0x Origen: Microsoft OLE DB Provider for SQL Server Descripción: There is already an object named ‘##TEMP_TBL_LAB_RESULTADO_ANALISIS_101915’ in the database. Estado de SQL: 42S01 Error nativo: No es posible abrir un conjunto de filas. Error en el archivo C:DOCUME~1ADMINI~1CONFIG~1TempRpt_Informe_Asignacion_Lote {AE9934EB-4724-46E2-9470-FE730AB4E7FD}.rpt: Error al abrir el conjunto de filas»
Lo necesito por favro ayudame..
Desde ya muxas pero muxas gracias…
Marlenne
Jose
Excelente aporte.Me sirvió bastante.
Gracias
Hola Marlenne, tu error parece ser el origen de datos de tu reporte. Cada vez que aparece el error […]}.rpt: Error al abrir el conjunto de filas, reviso que el reporte esté actualizado contra el SP que lo genera y que el mismo no falle. Además, por la primera parte del error, observo que tu procedure crea una tabla temporal (##TEMP_TBL_LAB_RESULTADO_ANALISIS_101915) que ya existe. Para evitar este error, te sugiero que:
1 antes de crear la tabla verifiques su existencia (por si el procedmiento se ejecuta de manera simultanea en mas de un equipo, por ej.);
2- siempre al final del procedure en que se crea, la borres;
3- no repitas el nombre de creacion en procedimientos distintos;
4- no hagas una temporal ## si solo necesitas que sea visible de manera local al procedimiento (en su lugar utiliza del tipo #);
5- por que no usar varaibles de tipo table;
En fin, tu problema no está en el CR sino en el origen de datos.
Espero que te sirva mi pequeño aporte.
Saludos,
Sergio
Gente, alguien se topó con este error alguna vez?
El tipo ‘CrystalDecisions.Shared.ParameterFields’ del ensamblado ‘CrystalDecisions.Shared, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304’ no está marcado como serializable.
el problema surge cuando publico la aplicacion WEB en el server. En el entorno de desarrollo funciona bien.
Además, el botón export del CR viewer pide los parámetros de export (formato, páginas, etc.) pero al momento de Aceptar, no efectiviza la acción y se limita a mostrar la misma página de impresion en la pantalla emergente que surge al presionar el boton de EXPORT. Todo muy raro.
Toda ayuda es bienvenida.
Saludos,
Sergio
Hola
esta muy bien el tema y puede resultar muy util
solo que tengo un detalle
envia error missing parameters values y envio al objeto ReportDocument los parametros
Reporte.SetParameterValue(«TasaInteresNum», tasaInteresNumValue)
no se a que se deba esto??
alguna idea??
gracias y saludos
Muy buen post, pero tengo una duda…
si manda el recuadro de abrir, guardar y cancelar, pero lo que quiero es que mande a imprimir diretamente como doc de word.
ojala me puedan ayudar!!!
Gracias por el aporte.
oye sabi que no me funciona tu codigo me manda error en
ReporteCargar() (aki)
reporteDoc (aki).ExportToHttpResponse (ExportFormatType.PortableDocFormat, Response, True, «NombreArchivo»)
es solo eso el codigo o es mas? porque en realidad no entiendo, si es una funcion donde ets ala funcion reporte cargar()
HOLA NO SE SI ME PUEDAN AYUDAR PARA PONERLE UN FILTRO A CRYSTAL REPORT PARA QUE SOLO ME MUESTRE LA INFORMACION QUE NESESITO PORFA
Loco, estuve buscando algo parecido hace 5 días! Sos un groso!!! Un millón de gracias!
se crea la clase ReporteGeneral.vb
Imports Microsoft.VisualBasic
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports CrystalDecisions.Web
Imports System.IO
Imports System.Data.SqlClient
Public Class ReporteGeneral
‘ Parámetros de los Reportes
Public Structure Parametro
Public sNombre As String
Public oValor As Object
End Structure
‘************************************************************************************
‘ NOMBRE: iAsignarDatosConexion
‘ DESCRIPCION: Asignar datos de conexion a la bd para llenar el reporte se agrego static
‘************************************************************************************
Public Shared Function iAsignarDatosConexion(ByVal rptReporte As ReportDocument) As Integer
Dim iResultado As Integer
Try
If iResultado = 0 Then
Dim cn As New SqlConnection(ConfigurationManager.ConnectionStrings(«Comerciales»).ToString)
Dim ciConexion As ConnectionInfo = New ConnectionInfo()
ciConexion.ServerName() = cn.DataSource
ciConexion.DatabaseName() = cn.Database
ciConexion.IntegratedSecurity() = True
Dim liTabla As TableLogOnInfo = New TableLogOnInfo()
liTabla.ConnectionInfo() = ciConexion
Dim Tabla As Table
For Each Tabla In rptReporte.Database.Tables
Tabla.LogOnInfo.ConnectionInfo = ciConexion
Tabla.ApplyLogOnInfo(liTabla)
Next
iResultado = 0
End If
Catch ex As Exception
iResultado = -1
End Try
Return iResultado
End Function
‘************************************************************************************
‘ NOMBRE: iAsignarValoresParametros
‘ PARAMETROS: dParametro <-- Nombre del Reporte ' aParametros <-- Definición de Parámetros ' DESCRIPCION: Llenar los parametros con los valores de la bd ' Se agrego el shared a la funcion '************************************************************************************ Private Shared Function iAsignarValoresParametros(ByVal dParametro As ParameterFieldDefinitions, ByVal aParametros() As Parametro) As Integer Dim iResultado As Integer Try Dim pValor As ParameterDiscreteValue = New ParameterDiscreteValue Dim cValor As ParameterValues = New ParameterValues Dim pParam As Parametro Dim intParamatro As Integer intParamatro = 0 For Each pParam In aParametros pValor.Value = pParam.oValor cValor.Add(pValor) 'dParametro(pParam.sNombre).ApplyCurrentValues(cValor) dParametro(intParamatro).ApplyCurrentValues(cValor) intParamatro = intParamatro + 1 Next iResultado = 0 Catch ex As Exception iResultado = -1 End Try Return iResultado End Function '************************************************************************************ ' NOMBRE: iMostrarReporte ' PARAMETROS: sNombreReporte <-- Nombre del Reporte ' ctTipoComando aParametros <-- Arreglo de Parámetros ' crvReporte <-- ' DESCRIPCION: Desplegar una ventana secundaria, hacer click en el botón imprimir ' se agrego el static '************************************************************************************ Public Shared Function iMostrarReporte(ByVal sNombreReporte As String, ByVal aParametros() As Parametro, ByRef dReporte As ReportDocument) As Integer Dim iResultado As Integer Try 'Dim dReporte As ReportDocument = New ReportDocument dReporte = New ReportDocument dReporte.Load(sNombreReporte) 'crvReporte.EnableViewState = False iResultado = iAsignarValoresParametros(dReporte.DataDefinition.ParameterFields, aParametros) If iResultado = 0 Then iResultado = iAsignarDatosConexion(dReporte) If iResultado = 0 Then 'crvReporte.ReportSource = dReporte iResultado = 0 End If End If Catch ex As Exception iResultado = -1 End Try Return iResultado End Function Public Function iMostrarReporte(ByVal sNombreReporte As String, ByVal crvReporte As CrystalReportViewer) As Integer Dim iResultado As Integer Try Dim dReporte As ReportDocument = New ReportDocument dReporte.Load(sNombreReporte) crvReporte.EnableViewState = False iResultado = iAsignarDatosConexion(dReporte) If iResultado = 0 Then crvReporte.ReportSource = dReporte iResultado = 0 End If Catch ex As Exception iResultado = -1 End Try Return iResultado End Function End Class en una pagina Reporte.aspx Imports ReporteGeneral Imports System.Web Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Partial Class Reporte Inherits System.Web.UI.Page Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Dim intResultado As Integer Dim aparametros(1) As Parametro Dim strCodTrabajador As String strCodTrabajador = Request.QueryString("strCodTrabajador") aparametros(0).sNombre = "@intComunicado" aparametros(0).oValor = Session("NumComunicado") aparametros(1).sNombre = "@strCodTrabajador" aparametros(1).oValor = strCodTrabajador Dim dreporte As ReportDocument intResultado = ReporteGeneral.iMostrarReporte(Server.MapPath("Comunicado.rpt"), aparametros, dreporte) If intResultado = 0 Then Response.Buffer = False Response.Clear() 'ClearContent, ClearHeaders dreporte.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo") End If End Sub
Muchisimas gracias, gran explicación. Me has sacado de un apuro!!
Alguién sabe porque Crystal Reports al exportar a PDF agrega una letra «i» junto a todas las «t» que se encuentren en minúsculas? Cómo se puede corregir este problema?
Logre solucionar el problema de exportar los reportes de Crystal a PDF.
Como bien dice aqui, utilice el ExportToHttpResponse y me daba el mismo error del ThreadAbortExcepcion
lo solucione como aparece en esta pagina
http://www.codeproject.com/Tips/128893/Why-not-to-pass-endResponse-parameter-as-true-in-R.aspx
Para evitar que salga la «i» junto a las «t» cambia el tipo de letra. Eso a me paso y cambiandole el tipo de letra se soluciono.
tengo un problema con el crystal. Cuando genero cierta cantidad de reportes en crystal llega un punto en que me genera el siguiente error «Error: Load report failed.», creo q es por que falta cerrar la conexion pero no se como hacerlo
genera error despues de que genero cierta cantidad de reportes, creo q el error radica en q no cierra la conexion de crystal report pero no se como
alguien me puede ayudar
@Eliza este problema es por el limite de la cantidad de informes que tienes por app (no recuedo si es por app web o por server)
Este problema esta documentado en la ayuda. Dale una mirada a este articulo
CRYSTAL REPORTS MAXIMUM REPORT PROCESSING JOBS LIMIT
http://www.sdn.sap.com/irj/boc/index?rid=/library/uuid/f053713e-3e3d-2c10-2a81-f79259e54023
Espero que te sirva de ayuda o guia
Hola muchachos, al parecer tienen mucha experiencia en el tema de Cristal, espero ustedes puedan ayudarme con un problemita, digo problemota…
Resulta que necesito exportar un reporte en formato word, y que sea editable completamente, lo que quiero decir es que cuando ya tengo el reporte en el documento de word este no me permite modificarlo a gusto, se mueve todo si hago algo, pareciera que la informacion que muestra el documento, fuese como una imagen que va sobre el texto, si escribo algo en el documento esta escritura queda atras de de la iformacion del repote si presiono enter para saltar de linea no pasa nada solo a el texto que esta atras de la información, por favor si alguien tiene idea de como hacer que un reporte cristal sea totalmente editable como si fuese un documento normal de word le agredeciria muchisimo, ya no se que hacer y necesito una ayuda de como solucionarlo. Gracias yo utizo .net 2005
=(
Ayudaaa
Ojala alguien me pueda ayudar… Estoy generando reportes con Crystal Reports dentro de VisualStudioNet 2008, desde el ambiente de desarrollo (o sea mi maquina) funcionan bien, ya que tengo privilegios de administrador, sin embargo cuando lo publico en el servidor de producción, me solicita la clave de acceso al servidor para poder visualizar el reporte. Segun he leido es porque esta escribiendo el temporal del pdf en C:windows/temp, y aparentemente no tiene permisos para hacerlo. Ya genere la carpeta c:temp y direccione las variables de ambiente a esa carpeta como algunos foros lo suguieren, le di permisos al administrador, al iis_iusrs, al aspnet usr, al usuarios net bussines objsct. Ya no se que más hacer. Alguien podrá ayudarme… Saludos
Hola te consulto por lo sgt.
yo genero varios reportes crystal reports, los cuales loe he escogido por medio de checks, pero quisiera generarlos en un solo archivo PDF, osea yo quiero que si escojo 35 reportes, el archivo PDF me salga con los 35 reportes en uno solo, un solo archivo con 35 hojas, aunque trato de hacer que los exporte con el ExportToHttpResponse, me sale un error crystalrReport,Engine,ReportDocument no contiene una definicion para ExportToHttpResponse,
Estimado @sheccid65
Interesante la propuesta de «unir PDF». Nunca la hice pero si es interesante unir estos bytes de PDF en uno solo.
Para esto no creo que vas a necesitar utilizar el método ExportToStream para obtener el stream y luego con el arreglo de byte[] de cada uno poder «unir los pdf»
Mira la idea por aqui:
http://stackoverflow.com/questions/6778721/merging-memory-streams-to-create-a-http-pdf-response-in-c-sharp
PD: Otra alternativa seria poder descargar todo junto en un archivo .zip (algo de esto si lo hice)
Avisame si te sirvio de ayuda o guia.
Hola, gracias por tú ayuda
Encontré un código en internet el cual me genera archivos pdf simultaneos, pero tengo unos inconvenientes
1. No genera la selección que yo quiero, de hecho el me muestra toda la información que hay en la base de datos.
2. Solo me muestra la cabecera en la primera página, en las sgts hojas las quita.
3. cuando imprime lo hace en forma vertical, la quiero horizontal.
En dettalle.
Yo lo que quiero es hacer una impresión por lotes, el usuario escoge por medio de checksbox los reportes que quiere imprimir(esto es en una página web, por lo que he leido no puedo imprimir directamente en la impresora del cliente, así que por esa razón genero el pdf.
pero deberían salir los reportes que escojo con el check)
Código.
protected void btnImprimir_Click(object sender, EventArgs e)
{
// int i = 1;
foreach (GridViewRow row in GridView1.Rows)
{
bool isChecked = ((CheckBox)row.FindControl(«check1»)).Checked;
if (isChecked)
{
// Response.Write(««);
//lblOTH.Text = GridView1.Rows[0].Cells[1].ToString();
lblOTH.Text = row.Cells[0].Text;
Session[«criterio»] = «{OrdenesTrabajo.IdOrdenTrabajo}=» + lblOTH.Text;
Session[«informe»] = «OrdenTrabajo.rpt»;
//Response.Redirect(«mreporte.aspx»);
this.orpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
string strTemp = Session[«criterio»].ToString();
strTemp = strTemp.Replace(«=0», «=false»);
strTemp = strTemp.Replace(«= 0», «=false»);
Session[«criterio»] = strTemp;
string CaminoReporte;
Database crDatabase;
Tables crTables;
TableLogOnInfo crTableLogOnInfo;
ConnectionInfo crConnectionInfo;
CaminoReporte = ConfigurationManager.AppSettings[«CaminoReportes»];
//System.Drawing.Printing.PrinterSettings ImpresoraActual;
if (Session[«informe»] == null)
{
lblError.Text = «Informe no existe»;
return;
}
CaminoReporte += Session[«informe»].ToString();
orpt.Load(@CaminoReporte);
crConnectionInfo = new ConnectionInfo();
crConnectionInfo.ServerName = ConfigurationManager.AppSettings[«Servidor»];
crConnectionInfo.DatabaseName = ConfigurationManager.AppSettings[«Bd»];
crConnectionInfo.UserID = ConfigurationManager.AppSettings[«Usuario»];
crConnectionInfo.Password = ConfigurationManager.AppSettings[«Clave»];
//Get the tables collection from the report object
crDatabase = orpt.Database;
crTables = crDatabase.Tables;
Logon(orpt, ConfigurationManager.AppSettings[«Servidor»], ConfigurationManager.AppSettings[«Bd»], ConfigurationManager.AppSettings[«Usuario»], ConfigurationManager.AppSettings[«Clave»]);
orpt.RecordSelectionFormula = Session[«criterio»].ToString();
//Este es el código de internet
ExportOptions exp = new ExportOptions();
exp = orpt.ExportOptions;
exp.ExportFormatType = ExportFormatType.PortableDocFormat;
exp.FormatOptions = new PdfRtfWordFormatOptions();
ExportRequestContext req = new ExportRequestContext();
req.ExportInfo = exp;
System.IO.Stream st;
st = orpt.FormatEngine.ExportToStream(req);
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = «application / pdf»;
Response.AddHeader(«Content-Disposition», «inline; filename=OrdenTrabajo.pdf»);
Byte[] b = new byte[st.Length];
st.Read(b, 0, (int)st.Length);
Response.BinaryWrite(b);
Response.Flush();
Response.End();