Hola amigos, hoy les traigo aquí una forma bien sencilla de hacer reportes con crystal report en Visual Basic, la forma que utilizaré no es la más óptima pero en las diferentes formas que he hecho reportes con Crystal Reports si es la que más facilidad me ha dado.
Como ya les dije la forma que utilizo no es la más óptima debido a que utilizo métodos algo pesados para traer los datos, espero en el futuro hacer un post más en la que lo haga con procedimientos almacenados o alguna otra forma más eficaz que la que pondré a continuación.
Lo siguiente sirve en muchos casos para proyectos pequeños de la universidad, a pesar de que utlizaré Visual Studio 2008 esto sirve muy bien para Visual Studio 2005 también, asi que comencemos:
1.- Procederé a crear un proyecto en Visual Basic 2008, con el Framework 2.0, y le pondré de nombre EjemploReporteCrystal, obviamente si ya tienen el proyecto creado no deben de hacerlo.
2.- Después lo que hacemos es insertar un DataSet de nuestra base de datos, si no sabes como hacerlo da clic aquí.
3.- Luego de eso agregamos un nuevo elemento, para esto damos clic derecho en nuestro proyecto –> Agregar –> Nuevo Elemento.
4.- Tendremos un formulario como el siguiente en donde escogeremos la opción de la izquierda, seleccionamos Reporting –> Seleccionamos ahora Crystal Report –> Le ponemos un nombre –> y damos clic en Adjuntar.
5.- Ahora lo que veremos será un wizard o ayudante que nos permitirá crear un reporte de manera sencilla, deberán entonces de ver una imagen como la siguiente y darle clic en ok. Dejen las opciones tal como las tengo en mi imagen.
6.- Lo siguiente es escoger de donde sacaremos los datos que mostraremos, para esto en la siguiente pantalla que se les mostrará que deberá ser como la imagen que coloco abajo, ustedes deberán escoger Datos del Proyecto –> ADO.NET DataSets –> EjemploReporteCrystal.BD_EjemploProcedimientosDataSet (Este es mi dataset que puse enante, entonces aquí colocan el de ustedes) –> y escogen las tablas que utilizarán en su reporte, en mi caso escogí 2, ya que utilizaré datos de las 2 tablas –> Presionamos el boton «>» para cada tabla que queramos utilizar en el reporte y una vez hecho esto damos en siguiente.
7.- En la siguiente pantalla veremos como están relacionadas las tablas, no hay practicamente nada que explicar asi que damos clic en siguiente.
8.- Ahora en esta pantalla siguiente si hay que poner asunto, porque es aquí en donde diremos que campos de que tablas y en qué lugar los queremos en nuestro reporte, entonces vemos como tengo mis 2 tablas y escojo los datos que necesito de las 2, sin preocuparme de como estén relacionadas ni nada por el estilo, como ven en esta parte lo que hago es darle sentido a la forma de presentar mis datos.
9.- Luego de esto vendrán ciertas opciones como la que utilizaré a continuación que es de agrupar los datos en un cierto orden, y la forma que escogi de agruparlos es por géneros iguales, esto lo hago especificando en la parte de agrupamiento qué campo es el que quiero agrupar.
10.- Lo que sigue son más opciones como les dije, pero en este momento yo ya le di en finalizar, ya que no necesito hacerle más cosas a mi reporte, por ahora. Luego de dar clic en finalizar tendré una imagen como la que está abajo, la parte que tengo tachada es una parte que no quiero mostrar en ejecución por tanto para ocultarlas les damos clic derecho en la parte gris y al desplegarse un menú de opciones seleccionamos ocultar.
11.- Bien ahora regresamos y abrimos nuestro form, y buscamos nuestro origen de datos, si no lo vemos por ahi, damos clic en el menú de Visual Studio en la opción de Datos –> Seleccionamos ver Origenes de Datos y listo, tendrán que poder ver su dataset con las tablas al lado como en la imagen. Pero bueno lo que debemos hacer con esto es arrastrar esas 2 tablas a mi formulario, y esto para qué es? pues es para colocar esos controles que ven abajo junto con el dataset que están encerrados en el rectángulo verde, son controles que ya vienen cargados con datos necesarios y que no tendremos que ponerlos nosotros, por ejemplo ruta de la base de datos o metodos de conexión y desconexión, etc.
12.- Después de poner esas tablas las sacamos junto con la barra que se pone en la parte superior, y deberá quedarnos tener algo como lo que sigue.
13.- Luego de lo que hicimos vamos a la caja de herramientas y buscamos un control llamado CrystalReportViewer, lo arrastramos y colocamos en el formulario, este control será el que nos permita vizualizar nuestro reporte hecho anteriormente.
14.- Entonces una vez hecho esto damos doble clic en el borde del form para entrar al metodo load del mismo y poner el codigo que sigue a continuación. Aclarando un poco sobre ese código, lo que hacen las 2 primeras líneas es filtrar los datos de las tablas indistintamente si están relacionadas, las otras 3 líneas sirven para cargar nuestro reporte en el reportviewer que pusimos en el form, para esto cree un objeto llamado rpt del reporte(), que fue mi reporte que creamos hace rato, y en su propiedad SetDataSource le envie el dataset del proyecto que obviamente ya tiene los datos filtrado gracias a las 2 líneas primeras, por último mande a cargar este reporte al control del form con su propiedad ReportSource.
15.- Luego de esto si lo ejecutan deberán ver algo como esto.
16.- Ahora abramos el DataSet para crear algo extra, a continuación lo que haremos es crear un método que nos filtree solo los datos de las personas de género masculino. Para esto demos doble clic sobre el dataset o clic derecho y Open.
17.- Damos clic derecho sobre la tabla en la que crearemos el filtro –> Adjuntar –> Query.
18.- Lo que haremos a las siguientes 2 pantallas es simplemente darles clic en siguiente.
19.- Luego tendremos esto y lo que haremos es agregar otra tabla para relacionarla con la actual, para esto damos clic derecho en la parte blanca al lado de la tabla y en las opciones que se despliegan seleccionamos Adjuntar Tabla.
20.- Ya que nuestra Base de Datos solo posee 2 tablas solo podremos escoger 1, que es la tabla TGenero que es la que no tenemos puesta, la seleccionamos y damos clic en Adjuntar y luego en Cerrar.
21.- Como vemos a continuación ya nos aparece la tabla que agregamos relacionada con la primera que teniamos, esto es debido a que ya desde que las creamos hicimos esta relación; lo que sigue el como se ve en la imagen poner en la parte del medio o directamente en el query que necesitamos de la tabla TGenero el campo nombre_genero y que este nos servirá como filtro, por eso colocamos en la parte de filtro la palabra =@nombre_genero además debemos de sacar este campo de área Select, ya que si lo dejamos ahí no nos mostrará datos en nuestro reporte, o por lo menos eso es lo que me ha sucedido en la práctica, porque si lo ejecutamos en ese instante con el botón Execue Query si funciona normalmente pero con el Crystal Report encontre esa falla.
22.- Ya al haberle dado clic en OK debe de presentarnos la siguiente imagen en la cual veremos ya hecha nuestra sentencia query de consulta, damos clic en siguiente para continuar.
23.- Ahora le pondremos un nombre tanto en la parte donde dice Fill a DataTable como en Return a DataTable, damos clic en siguiente.
24.- Lo que viene es que ejecutará lo que hicimos en el DataSet y guardará los cambios, solo le damos clic en Finalizar.
25.- Ahora en el código modificaremos la línea que hacia el filtro en la tabla TPersona, en mi caso la puse como comentario, y coloqué la que cree recién, pueden ver que después del DataSet le pongo una coma y le envio un parámetro, esto es debido a que en mi query le puse el @nombre_genero, entonces por cada parámetro así que pongamos en el query que hicimos debemos enviarlo aquí es esa línea después del DataSet en el orden que nos lo pide la instrucción; en ese código yo puse la opción masculino directamente, si nosotros la colocaramos o escogieramos desde un textbox o un combobox este sería el que pondríamos ahí con su propiedad text.
26.- Ya lo que queda es ejecutar la aplicación y podremos ver que solo nos filtrará los datos de las personas de género masculino.
Bueno con eso he finalizado este pequeño manual de cómo hacer un Crystal Report en Visual Basic.NET, espero les haya sido de ayuda y ahí me cuentan que tal les fue, hasta, a2.
Hola J, qué hay? está chevere este manual, gracias, sin duda me servirá de mucho, saludos…
Hola, pues la idea es esa de que sirva de algo jeje, cualquier duda hay ayudo en lo que pueda…
Bendiciones, varon horita estoy realizando un programa sencillo.. pero me he visto cmplicado en hacerlo. es programa q reguistre empleados y que capture la fechas q los empleados entre a la empresa . y si el empleado falta mas de 3 veses el sistema los coloque cm observacion u suspenda… hay q realizarlo en visual basic 2008 .. mi nombre es maikel espero tu respuesta este es mi msn maikel_yeshua10@hotmail.com
Hola, disculpa pero no entiendo que necesitas… o que respuesta necesitas…
en el punto 12 al sacarlo no entiendo a que te refieres soy principiante perdonen lo bruto jeje :p porfavor!!!
Quizas el tutorial pueda ser de utilidad: http://www.youtube.com/watch?v=fSLDw8sde3U
Jota… seria mejor que pusieras mas explicito el codigo… aunque con lo que se sabe de programacion pasa super piola el manual…
QUE BUEN MANUAL!! ME SACO DE UN APURO DE UN SISTEMA DE FACTURACION QUE ESTOY CREANDO
SALUDOS!! JOSE MENDOZA
hola q weno q t sirviera, en realidad ahora manejo un modelo mas sencillo y más óptimo para hacer eso, pero no he podido postear nada en meses x el poco tiempo q he tenido, espero en unos meses poder postear otra vez como antes y hacerlo con las nuevas cosas q he aprendido… saludos y a2.
Hola Jota esta muy bueno este manual explica todo… orita m sirve xq estoy interasada en aprender todo esto graciasss…
Hola Jota, primero te felicito por que el manual esta bastante detallado, lo segundo es para realizarte una consulta, resulta ser que estoy realizando reportes casi de emergencia por medio de datasets pero de dos bases de datos (Oracle, SqlServer), los datasets trae querys de Oracle y Sql Server , se unen en el dataset y se genera el reporte ademas, al cargar los datasets le paso la información de conexión de la base de datos, he llegado a nivel de pasar la contraseña y usuario de la base de datos de las tablas del crystal , pero aun me da el siguiente error:
«El informe solicitado requiere información adicional.»
Server Dataset1
Base de datos :
Usuario:
Contraseña:
Código de Ejemplo de asignar la conexion por tablas que estoy realizando.
Dim myTables As Tables = myReportDocument.Database.Tables
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
If myTable.Name = «tabla1» Or myTable.Name = «tabla2» Then
myTableLogonInfo.ConnectionInfo = MyCnxOracle
Else
myTableLogonInfo.ConnectionInfo = MyCnxSqlServer
End If
myTable.ApplyLogOnInfo(myTableLogonInfo)
Next
Saludos y espero que tengas una idea que me pueda ayudar
cualquier cosa te dejo mi correo heinergc@hotmail.com
Hola, excelente manual. Pero estoy teniendo un problema con el crystal report. Lo Detallo a continuacion.
Estoy desarrollando en vb.net 2008 con windows form. He hecho varios reportes con crystal utilizando dataset. en la pc de desarrollo todo funciona de maravilla, todas las conexiones que uso son de trusted_connection, pero en una pc de pruebas con el ambiente de produccion, al ejecutar el reporte en la aplicacion, el crystal report siempre me pide usuario y contraseña, me muestra una ventana donde sale «ServerName» mostrando el nombre del datset, otro campo «Database» que va en blanco y por supuesto los campos usuario y contraseña.
Si estoy utilizando un dataset, porque el crystal me pide esta informacion ?
De que forma puedo hacer que no me lo pida ?
En foros he visto la instruccion: Reporte.SetDatabaseLogon(usr, pwd), pero en mi caso al usar dataset y en el llenado del dataset usar trusted_connection, no veo logico que me pida estos datos.
Gracias de antemano.
hola, gracias por leer mi blog, la verdad este post sobre como crear un crystal reports lo cree hace ya un par d años, pero actualmente para aplicaciones que desarrollo utilizo la misma cadena de conexion que uso para las transacciones de la aplicacion, entonces creo un metodo que usa esta cadena de conexion y lee un procedimieto almacenado de lectura (algo como select id, nombre, apellidos, edad from CLIENTES), entonces obviamente yo se que me devuelve una tabla y esa consulta la guardo en un datatable que retorno desde mi funcion, creo un dataset tipado (ya no un dataset como lo puse en mi post) y le doy los mismos nombres y los mismo tipos de datos y en la misma posicion que me devuelve mi procedimiento almacenada, entonces una vez armadas esta cosas lleno mi dataset tipado con el datatable y mando ese dataset a mi crystal reports que hice en base a mi dataset tipado, de esta forma si tu aplicacion funciona en una makina de produccion pero no los reportes al utilizar la misma cadena de conexion para los reportes debe d funcionarte.
Jejeje, espero me hayas entendido pero con el trabajo en cima no he tenido muxo tiempo d detallartelo mejor, saludos y espero que lo logres. a2.
hola Jose !!! muchísimas gracias por tus aportes!!! Quisiera preguntarte si es que puedes pasarme mas detalles de como utilizar un dataset tipado.
Hola, gracias por el manual, esta bastante practico…
Pero quiero hacerte una consulta.
Estaba tratando de hacer un reporte que presente cierto conjunto de datos entre dos fechas (rangos de fechas), utilizando tu ejemplo con filtros
SELECT visita.tiempo_max, visitante.nombre_visitante, empleado.nombre_empleado, visita.fecha
FROM ((empleado INNER JOIN
empleado_visitante ON empleado.cod_empleado = empleado_visitante.cod_empleado) INNER JOIN
((visita INNER JOIN
visitante_visita ON visita.cod_visita = visitante_visita.cod_visita) INNER JOIN
visitante ON visitante_visita.cod_visitante = visitante.cod_visitante) ON empleado_visitante.cod_visitante = visitante.cod_visitante)
WHERE (visita.fecha BETWEEN visita.fecha AND visita.fecha)
pongo en el campo filter… @fecha
pero tengo el problema de que cuando voy a llenar el tableadapter con el
fillbyfecha (datatable, fecha1,fecha2), no esta definido.
Has hecho algo similar?
de antemano gracias por tu generosa ayuda…
hola creo si he hecho lo q me dics, mmm si estas haciendo el query en el query builder del visual studio debes ponerle en el where de la siguiente manera WHERE (visita.fecha BETWEEN @fecha1 AND @fecha2), de esa manera te establecerá que espera los 2 parámetros de fechas, el primero como inicial y el segundo como final, espero eso sea lo q me preguntabas, y gracias x pasarte por mi blog, suerte y a2.
Saludos josé y gracias por responder tan pronto.
Fijate que tomé tu consejo pero le he dado varias modificaciones y todavía no doy.
Efectivamente, estoy usando el querybuilder de vs.net.
Al escribir la consulta de esta forma: WHERE (visita.fecha BETWEEN @fecha1 AND @fecha2)
se genera error porque las @fecha1 y @fecha2 deben de ir asi: WHERE (visita.fecha BETWEEN ‘@fecha1’ AND ‘@fecha2’)
entre comillas simples.
Cuando hago esta variante, la columna donde se especifica el campo que servirá como filtro
(filter), lo escribe como BETWEEN ‘@fecha1’ AND ‘@fecha2’, no se define un único valor.
No sé si el error se deba al especificar no un valor en el filter sino varios…porque en tu ejemplo unicamente utilizas
@nombre_genero.
Después de esto, vuelvo al dataset, a la tabla para modificar sus parametros y aparece sin ellos en la definicion:
fillbyfecha()… y debería generar fillbyfecha(@fecha1,@fecha2).
Muchas gracias José, saludos desde Nicaragua.
hola, acabo de enviarte un mail con un adjunto de ejemplo de un query con rango de fechas, espero te sirva, ahi me cuentas, a2.
Hola… oye nose si me puedas ayudar tengo el mismo porblema q plantean con las fechas y me salen los mismo errores q plantean…
Al escribir la consulta de esta forma: WHERE (visita.fecha BETWEEN @fecha1 AND @fecha2)
se genera error porque las @fecha1 y @fecha2 deben de ir asi: WHERE (visita.fecha BETWEEN ‘@fecha1′ AND ‘@fecha2′)
entre comillas simples.
Cuando hago esta variante, la columna donde se especifica el campo que servirá como filtro
(filter), lo escribe como BETWEEN ‘@fecha1′ AND ‘@fecha2′, no se define un único valor…
me puedes ayudar… ya estuve revisando varias cosas y la verdad q no encuentro la solucion….
José, te escribi a tu correo por lo de tu ejemplo
Hola, esta bonito el manualito, pero este aplica si alguien quiere trabajar con controles visuales, yo lo programa de forma manual, sin embargo, en un reporte, invoco otro subreporte (especificamente en el encabezado) y al inyectarle los parametros de la siguiente forma :
string strAppDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
ReportDocument cryRpt = new ReportDocument();
try
{
cryRpt.Load(strAppDir + «\\RptCorte.rpt»);
cryRptView.ReportSource = cryRpt;
cryRpt.SetParameterValue(«@Opcion», 1);
cryRpt.SetParameterValue(«@Store_Code_Id», Convert.ToInt32(GrdSucursales.Rows[GrdSucursales.CurrentRow.Index].Cells[0].Value).ToString());
cryRpt.SetParameterValue(«@Cais», Convert.ToInt32(GrdCajas.Rows[GrdCajas.CurrentRow.Index].Cells[0].Value).ToString());
cryRpt.SetParameterValue(«@FechaInicial», dtFechaInicio.Value.Date);
cryRpt.SetParameterValue(«@FechaFinal», dtFechaFin.Value.Date);
}//try
catch (Exception error)
{
// Let the user know what went wrong.
MessageBox.Show(«ERROR » + error.Message, «Problema en generar el Reporte : RptCorte.rpt»);
}//try
Capturo sin problema el valor de la opcion, Store_Code_Id, Cais, FechaInicial, FechaFinal, y cuando quiero generar el reporte, me pide de nuevo que introduzca los parametros, pero el chiste es que el usuario no los este metiendo de forma manual, que puedo hacer ?????
Gracias.
hola que weno que te haya sido de utilidad mi post, sobre tu problema pues 2 observaciones o por lo menos diferencias que encuentro respecto a como yo escribo el codigo para parametros de reportes, yo no les pongo el arroba (@), y el ReportSource lo pongo despues de asignar los parametros, aunque kizas eso no influya, pero en resumen yo lo escribo asi:
…..
rpt.SetParameterValue(«OrdenTrabajo», listaCab(1))
rpt.SetParameterValue(«CodBarco», listaCab(2))
rpt.SetParameterValue(«NomBarco», listaCab(3))
rpt.SetParameterValue(«Viaje», listaCab(4))
visor.ReportSource = rpt
…
entonces kizas el arroba no es necesario y x eso no te toma en cuenta esos valores y te los vuelve a pedir, espero te haya ayudado, suerte, a2.
Gracias por responder.
Te comento que realizando tu observacion, si no agrego el simbolo «@» al final siempre me pide los parametros, pero por el momento solo los de la fecha me pide de nuevo, los otros parametros me los acepta sin problemas, sera que acaso las fechas se inyectan de otra forma ????
hola, mmm weno sobre las fechas igual les kito el @, pero los envio de otra forma, diferente a la tuya, los envio así rpt.SetParameterValue(“FechaInicial”, date.parse(dtFechaInicio.text));.
Yo los envío así siempre y cuando la variable en el crystal este definida como tipo date, porque si no está definida como date simplemente pongo los mismo aumentando el toString() al final, osea así: rpt.SetParameterValue(“FechaInicial”, date.parse(dtFechaInicio.text).toString());.
Pruebalo y nos cuentas que tal te fue, a2.
hola, puedes decirme que error es o que dice el error???.
hola, disculpa fue mi error, como estas en c# no encontraras date sino datetime, me ekivoke con vb, prueba con datetime.parse…
hola, sabes yo escribo el reportSource despues de asignar todos los parametros, no se si eso te estará afectando en el reporte, intenta ponerlo como en mi ejemplo después que asignast todos los parámetros, si el arroba, xq asi me funciona…
Hola, pues me sigue apareciendo lo mismo, siempre me pide los parametros, pero descubri algo mas, lo fui ejecutando paso a paso, y al llegar al parametro en donde asigno las fechas, el try me tira un error, y es aca donde me pide los parametros de forma manual, al introducirlos todos me genera el reporte y el catch tira el siguiente error : «ERROR El indice no es valido. (Excepcion de HRESULT: 0x8002000B (DISP_E_BADINDEX))» y no se si esto puede servir de pista para encontrar la solucion, ya que busco y no encuentro algo que me solucione.
una pregunta antes q todo, para estar seguro, el tipo de datos de fecha en el crystal reports si es fecha verdad???, la verdad no se q otra solucion darte tendria q verlo yo mismo para probar y ver q pueda ser, xq en la forma como yo t dije q lo hacia debe funcionar a menos q alguno d los tipos d datos no este correcto o se pierda… disculpa ya no se m ocurre q mas pueda ser, pero si kieres te ayudo a probarlo, no se q tan rapida sea la conexion para hacer un escritorio remoto con teamviewer o sharedview, si es q los manejas para ayudarte remotamente…
pues al adicionar la linea date.parse antes del valor de la fecha, me tira error, debes declarar otra libreria entes ???? , y si quito el simbolo de arroba, tengo que agregar los parametros de nuevo, pero de la interfaz del usuario.
hola de nuevo
pues no me funciona aun, y cuando tu colocas el parametro sin la arroba es cuando manda un valor que quieras que salga en el reporte, y con la arroba es un parametro que inyecto al procedimiento almacenado que ejecuta el reporte, y como te digo, tengo que ponerlos de nuevo desde la aplicacion.
El error que muestra es :
el nombre «date» no existe en el contexto actual
Que crees que pueda ser ????
Hola José, espero estes bien… te comento que no he podido abrir la BD_EjemploProcedimientos.mdf, recordas, hay un error de apertura , tengo sqlser ver 2000 y 2005 y no abre. sigo con aquello de presentar un reporte por intervalos de fechas… mas adelante te comento…
Mi pregunta jose por no poder ver BD_EjemploProcedimientos.mdf, como es que definis en el querybuilder de vs, el filtro del campo fecha porque a como te comenté antes, en tu ejemplo definis el nombre como @nombre pero al ser dos fechas en mi caso, no se definiria solamente como @fecha en el filter… sino @fecha, @fecha (no puedo poner @fecha1,@fecha2) porque la BD solo tiene el campo llamado fecha y en el filter , segun ejemplos, solo se puede definir un filter por campo…
luego de revisar el video , aparece un error: Error in WHERE clause near ‘@’.
Unable to parse query text. mi BD esta en access2007 y el campo fecha es text… sera por eso??? he estado probando y cambiando a tipo de dato datetime, pero nada, ni siquiera puedo ver la ventana donde indicas los parametros @fecha1 @fecha2… aparece el mensaje ‘faltan parametros’… tengo ademas vb.net 2008 team system
luego de revisar el video , aparece un error: Error in WHERE clause near ‘@’.
Unable to parse query text. mi BD esta en access2007 y el campo fecha es text… sera por eso??? he estado probando y cambiando a tipo de dato datetime, pero nada, ni siquiera puedo ver la ventana donde indicas los parametros @fecha1 @fecha2… aparece el mensaje ‘faltan parametros’… tengo ademas vb.net 2008 team system, ya me fije que no indicas parametros a filter…!
Jose, que tipo de dato es fecha en tu BD BD_EjemploProcedimientos.mdf???
jose… los parametros @fecha1 @fecha2, los que me decis que vs los toma como parametros exigidos, fijate que luego al ejecutar consulta no aparece la ventana donde precisamente vos estableces los parametros de entrada para la consulta…
Doctor esta bien el manula, mas bien doctor cual sera tu correo para preguntarte algunas dudas que tengo.., saludos
necesito saber como hago para cambiar el sexo de un empleado que se guarda con «M» y lo quiero mostrar en el reporte como masculino por favor respondame lo antes posible
Hola Dario… puedes editar espero aún te sirva.. puede editar la consulta SQL para ese cometido usando IF algo asi como esto
IF(tabla.sexo=’M’,’Masculino’,’Femenino’) as ‘GENERO’
y en el reporte llamar ese campo GENERO
jeje espero te sirva de algo.
hola, tengo un situacion con mi sistema que estoy desarrollando por que al momento de ingresar contraseña y usuario quiero en el reporte que me visualeze informacion de la sesion como nombre del usuario, para saber quien realizo el reporte(crystal report), ficha, espero me puedan ayudar. el programa esta e vb.net 2008
hola Martin, mmm es simple primero q debes de cargar los datos del usuario en variables globales, x lo menos asi lo hago yo, ya sean los datos del usuario de dominio o de la propia aplicacion, no se como los estes manejando, de ahi en el crystal reports definir variables y cuando abres el crystal reports les envias esos datos a las variables…
Hola muchachos. Tengo un porblemota todo feo y me siento frustado por que no lo puedo solucionar. les comento, si me pueden ayudar.
Necesito meter un subreporte, use una parte de la tecnica posteada para crear los reportes y me va de maravilla, la unica vaina y problema es que no puedo meter un subreporte. uso procediemientos almacenados y los reportes por separado funcionan sin problema pero cuando los quiero unir en un solo reporte no me funcionan, no estoy enviando nada de parametros pues ya los genero desde afuera de CR a puro codigo.
solo quiero meterlos en el reporte general.
que puedo hacer???
necesito su ayuda por favor si alguien tiene idea agradeceria su ayuda.
JEJE.. bueno muchachos ya encontre la respuesta…. era tan simple… nuuu XD
Chochera necesito tu ayuda con rangos de fechas en el reporte
por favor te lo agradeceria mucho si me ayudas con este gran detalles con los rangos de fecha en los reportes que deseo….
mi correo es rpachas@dm.pe
Gracias..
saludos..
Hola buen dia, les cuento que el manual esta muy bueno, lo probe para ver que tal y me parecio bien, pero tengo un pequeno problema el cual no he podido solucionar todabia, sucede que tengo unos reportes en crystal report y vb.net y cuando lo pruebo con distintas conexiones de datos me funciona perfecto, la cuestion esta que cuando la pruebo desde otro pc, nada de nada, no logra conectarse al servidor, mientras que las demas funciones del sistema estan perfectamente y se conectan con el servidor «vizcainor21@hotmail.com»
Hola, si vas a las propiedades del dataset veras que hay dice la cadena de conexion que esta utilizando, lo mas seguro es que diga localhost, por eso no te conecta desde otro computador, cambia la palabra localhost por el nombre de tu servidor o mejor dicho la ip donde esta alojada la base de datos.
saludos.
hola gracias por ese manual la verdad he buscado mucho y nada me a servido hasta ahora
GRacias, los reportes de crystal reports me salian en blanco con los de visualbasic 10 no podia sacar datos de dos bases de datos y eso ya habia trabajado con los tableadapter y dataset de vb10, gracias a tu aporte en el paso 15 solucionaste mi problema
Dim rpt_1 As New CrystalReport1
rpt_1.SetDataSource(NucleoDataSet)
CrystalReportViewer1.ReportSource = rpt_1
GRACIAS:::::::::::::::) je je je je
Estimado amigo: este informe me ha sido de mucha utilidad para mi trabajo, no obstante aun tengo una falla a la que no le encuentro solución. Cuando hago la consulta SQL y el pongo una condicion (p. ej. CAMPO1 = 1 AND CAMPO2 > 1 ) es cierto que funciona cuando ejecutas el query en el Query Binder, pero luego no aparce nada en el Crystal Report.
Mucho agradeceria si pudieras darme una ayuda con esto. Saludos y gracias de antemano
mmm no entendi muy bien, pero si no me equivoco te ha de faltar enviar los parametros como variables en el metodo… si me pones algo de codigo quizas lo entienda mejor.
ya descubri el tema…… no se debe poner @nombreparametro en la consulta porque sino no funciona, en lugar de ello hay que colocar ?, es decir campozz = ? … y aasi funciona de 10 !!!! gracias de todas formas…
???? me parece muy raro, pero si te funciono asi chevere.
Estimado José: De todas formas estoy muy agradecido porque el ejemplo que das funciona de maravillas. A pesar de ello aún me quedan dudas sobre el punto 11 de tu explicación, dado que es muy comodo y practico para dos tablas, pero si tienes mas tablas y mas reportes para mostrar, puede transformarse en un embrollo. Hay algún otro mecanismo para ahcer lo mismo.
Gracias, Jorge
Pues bueno, la verdad deje de usar mucho de eso hace tiempo, lamentablemente ahora no tengo tiempo suficiente para mantener el blog, pero no lo quito porque veo que aun sigue sirviendo, como lo hago ahora, pues de manera rapida utilizo dataset tipados, en que ayudan? pues en mucho con eso puedo utilizarlo para tener reportes de crystal con sql, postgresql o cualquier otro motor de base de datos sin necesidad de depender de la tecnologia microsoft, la base es hacer un query y ejecutarlo en un metodo, ejemplo (lo siguiente funciona con postgres pero con sql es lo mismo solo cambia un poco):
public DataTable Produccion_Poliza(string where)
{
DataTable t = new DataTable();
BaseDatos miBD = new BaseDatos();
miBD.Conectar();
miBD.ComenzarTransaccion();
miBD.CrearComando(«select p.id_poliza, p.codigo_poliza, c.nombre as nombre_asegurado, p.vigencia_fecha_desde as vigencia_desde, p.vigencia_fecha_hasta as vigencia_hasta, p.num_poliza as numero_poliza, s.id_ramo, s.nombre as seguro, s.codigo as cod_seguro, cs.nombre as compania_seguro, p.prima_neta as prima_neta, p.porcentaje_comision from » + c + «TCliente» + c + » as c inner join » + c + «TPoliza» + c + » as p on c.id_cliente=p.id_cliente inner join » + c + «TDetSeguro» + c + » as ds on ds.id_det_seguro=p.id_det_seguro inner join » + c + «TSeguro» + c + » as s on ds.id_seguro=s.id_seguro inner join » + c + «TCompaniaSeguro» + c + » as cs on cs.id_compania=ds.id_compania inner join » + c + «TRamo» + c + » as r on r.id_ramo=s.id_ramo » + where);
Npgsql.NpgsqlDataReader dr = miBD.EjecutarConsulta();
if (dr.FieldCount > 0)
{ t.Load((System.Data.IDataReader)dr); }
miBD.ConfirmarTransaccion();
miBD.Desconectar();
return t;
}
Como ves en el query me halo datos de varias tablas, en una consulta especifica para lo que necesito, acto seguido hago un dataset tipado con un datatable para que reciba el resultado de esto, ejemplo:
Dim mtRPT As New MRPolizas()
Dim miT As New DataTable()
miT = mtRPT.Produccion_Poliza(where)
Dim ds As New ds_produccion_polizas()
For Each poli As DataRow In miT.Rows
…..
…..
ds.dt_Produccion.Adddt_ProduccionRow(poli.Item(«nombre_asegurado»), CDate(poli.Item(«vigencia_desde»)), CDate(poli.Item(«vigencia_hasta»)), poli.Item(«numero_poliza»), CInt(poli.Item(«id_ramo»)), poli.Item(«seguro»), poli.Item(«cod_seguro»), poli.Item(«compania_seguro»), CDbl(poli.Item(«prima_neta»)), valorHaber, facturas, valorDebe, fechasfacturas)
Next
Dim rpt As New cr_ProduccionPoliza()
rpt.SetDataSource(ds)
visor.ReportSource = rpt
Aqui en eso ultimo podia obviarme el for each, pero antes de la linea de agregar los datos hago una manipulacion de los datos, por ese motivo lo hago asi y acorte un poco.
Y listo, en base asi lo hago actualmente ya que es mas flexible por asi decirlo.
Saludos, a2.
Jose: Gracias por la aclaración que me has hecho, pero debo confesar que soy muy novato (en esto) y lo mio es solo un hobby y me llevara tiempo entender de que se trata… de todas formas un millon de gracias.
Jorge- Argentina
Jose, soy nuevamente jorge y queria consultarte sobre un tema de pasar los datos a un reporte pero no con data set…. donde te puedo escribir?
hola Jorge, la verdad preferiria que cualquier duda la escribas aqui, y por este medio compartirla con los demas, casi no me gusta dar mi correo personal, asi que pro favor comentalo aqui en el blog.
hola Jose… genial, entonces ahi va la duda, que es sobre el mismo tema de antes:
1)El reporte en cristal tiene cuatro campos (nombreusuario, codigousuario y nivelusuario) que salen de la Tabla USUARIO y el otro campo es nombreproceso que sale de la Tabla Proceso.
2)Las dos tablas están enlazadas por el campo numero de proceso
3)La instrucción Sql para seleccionar los datos es la siguiente:
» SELECT USUARIO.US_APELLIDO, USUARIO.US_NOMBRE, USUARIO.US_USUARIO, » & _
» INFOPROC.PRO_NOMBRE, USUARIO.US_OPCIONES, USUARIO.US_NUMERO, USUARIO.US_ESTADO, USUARIO.US_COMPUESTO» & _
» FROM USUARIO INNER JOIN INFOPROC ON USUARIO.US_PROCESO = INFOPROC.PRO_NUMERO » & _
» WHERE (USUARIO.US_NUMERO > » + CStr(1) & » AND USUARIO.US_ESTADO = » + CStr(1) & «)»
4)Las instrucciones para leer los datos, llenar el dataset y llamar al reporte son estas:
Comando.CommandType = CommandType.Text
Comando.Connection = dbConectarBase
Dim Adaptador As New Data.OleDb.OleDbDataAdapter
Adaptador.SelectCommand = Comando
Adaptador.Fill(TablaDatos, «USUARIO»)
Dim MiReporte As New CrystalReport1
MiReporte.SetDataSource(TablaDatos)
Dim miForma As New Form1()
miForma.CrystalReportViewer1.ReportSource = MiReporte
miForma.Show()
5)El reporte se muestra bien si NO esta incluido el campo nombreproceso
6)Cuando se incluye este campo, en el reporte no se muestra ningún dato.
Podrias orientarme por donde anda la falla??
Mi idea es llenar una Tabla de Datos con los datos seleccionados y pasarlos al reporte, pero parece que se encapricha el muy jodido.
Grcias por tu aporte..
Muy bueno el blog…!!!!
Hola, una duda la tabla del dataset, asumo es TablaDatos, posee esta columna que agregas? la de nombreproceso? cuando he tenido problemas que no me carga el reporte me ha sucedido que es porque no escribi bien el query, para eso lo pruebo en el sql a ver si corre sin problemas; o porque en la tabla del dataset no esta la columna o con alguna diferencia en el nombre o tipo de dato diferente.
Puedes ponerle un breakpoint en Dim MiReporte As New CrystalReport1 y revisar si pasa de ahi, ya que si no es porque cuando llega ahi debe haber un problema con la llenada del dataset o de la ejecucion del query.
Saludos.
Hola José: Gracias por tu respuesta y te hago los comentarios en forma separada.
– La TablaDatos es la tabla del dataset
– La TablaDatos no tiene la columna nombreproceso (Como se incorpora? y dónde?)
– Corre bien hasta ese breakpoint y continua corriendo bien
Gracias
Definitivamente eres lo maximo.. me a servido de muxo.. gracias..
jejejjeje quiero sabes como haces un cristal report en asp.net usando un data set y cual es el codigo para hacer la conexion y extraer las tablas de sqlserver2008
Jose:
Aún no pude descubrir el error, puedes darme otra idea de como encarar la cuestion. Gracias
apuesto a que te refieres que se puede hacer esto con una cadena de conexion con codigo??
Hola amigo me puedes enviar este proyecto a ver si me guio ?? es q tengo un problema y no logro resolverlo…. Pasa q en el filtro coloco =@MiParametro y cuando le doy ENTER para guardar se guarda como campo=? me sustituye mi filtro por un ‘?’ te dejo mi correo por fa necesito tu ayuda GRaciass!
Hola! excelente me funciono perfecto!, lamentablemente tuve un problema con el diseño dado que al utilizar suprimir si se duplica, me genera demasiados espacios en blancos, he tickeado en el asistente de sección eliminar espacios en blancos pero aun asi no me funciona.
Me muestra lo siguiente:
44 GASTO NIVEL 1
4455 GASTO NIVEL 2
445505 GASTO NIVEL 3
445505005 GASTO NIVEL 4
445505005 GASTO NIVEL 4
445505015 GASTO NIVEL 4
Cuando debería mostrar lo siguiente:
44 GASTO NIVEL 1
4455 GASTO NIVEL 2
445505 GASTO NIVEL 3
445505005 GASTO NIVEL 4
445505010 GASTO NIVEL 4
445505015 GASTO NIVEL 4
ya no se que hacer, he intentado hacer todo incluso lei el manual de crystal reports y aparece lo mismo en todos lados pero no funciona.
Yo creo que debe existir alguna formula que me permita leer los datos y compararlos y no dejar espacio.
Favor ayuda.!
Saludos
seria mas facil asi
crea tu cadena de conexion
crea tu dataset y llenalo con un select con un procedimiento almacenado mandandolo a una clase
luego tu reporte mandalo por parametros y no te meteras en problemas con temas de origenes de datos
[…] […]
hola tengo un problema con un sistema en .net (VStudio 2010) y crystal reports, al montar el proyecto al servidor , los usuarios empiezan a trabajar en el y derepente a los 30 mminutos los reportes se dañan (da un error como cuando el rpt. no existe o no lo encuentra), incluso los q no estan en uso. La unica forma de arreglarlo es volver a montar todo el proyecto al servidor. Y siguen trabajando por otros minutos y se vuelven a perder los reportes. que puede ser ? es concurrencia , alguna dll de Crystal ?
esta muy padre, m ayudó mucho en una materia de aplcaciones web 🙂
Hola amigo muy bueno tu aporte pero tengo un inconveniente cuando me muestra la consulta me aparece repetido el resultado de la consulta varias veces que puedo hacer
Gracias, el mejor manual que he visto sobre el tema, explica muy claramente. me ha servido de mucho.
Me funciono muy bien, Gracias por el aporte
la base de datos de donde la puedo bajar?
fijate que quiero hacer tu ejemplo con una base de datos pero me tira error que puedo hacer?
Gracias muy buen aporte simple pero funciona.
Estimado, llevo tres semanas con un problema de que me mostraba en blanco un reporte y despues de miles de foros el tuyo fue el único que me funcionó y super bien explicado. Extraordinario aporte
Estimado Jose, te comento que soy principiante en .net y en cristal, por destino estoy para programar en esta herramienta y tengo que generar unos reportes, estaba viendo tu manual y me parece bien interesante, pero para uno de nuevo creo que nos cuesta un poco, en el punto 11 estoy perdido, porque en ningun momento creas al inicio un form, bueno yo creo un web form, pero por ningun lugar veo mis origenes de datos, yo creo un dataset como lo explicaste pero este lo veo en mi explorador de soluciones (lado derecho), y en la herramientas (lado izquierdo) no veo mis origenes de datos como tu imagen, cuando le doy al de solucion me desplega la ventana de inicio en donde coloque las tablas (son varias)
Pregunta (como te dije soy nuevo) como hago para ver esto lo del paso 11, para poder seguir con tu instructivo. vi una dirección de youtube, pero aqui no puedo ver ese tipo de videos.
Que Dios te bendiga por tu ayuda y apoyo, y mil gracias por compartir tus conocimientos es de gran ayuda.
O si alguien de los demas expertos tambien me pueden ayudar les agradezco.
Estimado, muy bueno tu manual me ayudo a despejar algunas dudas, solo una consulta como se lograría ingresar el parámetro genero (masculino o femenino) desde la ventana de parámetros del propio Crystal Report?
no veo los códigos de la misma forma en mi visual ='(
una consulta.. este reporte podra ser visto en cualquier pc? osea que no esta casado con el servidor vD?
Hola con todos, son principiante en .net con VB estoy implementando un crystal report en un aplicativo web pero cuando genero el reporte me sale el mensaje: «El informe solicitado requiere información adicional» alguien tiene un ejemplo en aplicativo web
como lo puedo hacer mediante MVC?
me imajino algo asi
CrystalReport5 report = new CrystalReport5();
report= cc.consultaGeneralByDATe(dateTimePicker1.Value, dateTimePicker2.Value);
crystalReportViewer1 = report;
pero no se como hacerlo
cc= Controlador y consultaGeneralByDATe es mi metodo
quiero obtener mi reporte mediante fechas… espero que me puedas ayudar
ANGELPC
Alguien me podria ayudar a sacar el reporte de cada registro
con visual basic .net 2010,les agradeceria mucho.
Pero, como se aria la conexion en una PC remota, si ya pusiste que el servidor es otro
Saludos amigo tengo un problema que me ha hecho la vida de cuadros. cree el reporte tal como indicas en este block el problema es que el reporte como tal la primera vez que ejecuto el programa muestra los datos correctamente pero luego cuando la base de datos ha cambiado, aunque haya cerrado y vuelto a ejecutar el programa muestra en el reporte los datos de la primera vez que lo ejecute. en otras palabras carga de forma predeterminada los datos de la primera ejecución. he intentado muchas formas que he encontrado en la web y nada no logro dar solucion