Sv Community El Salvador

Soporte y Tecnología => Programación => .NET => Mensaje iniciado por: tekun en diciembre 27, 2007, 09:41:32 pm

Título: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: tekun en diciembre 27, 2007, 09:41:32 pm
hace poco menos de un mes no tenia ni mi3rd4 de idea de lo que eran los CrystalReports que de ahora en adelante llamare CrysRep....

para decirte que no sabia que los CrysRep no eran producto de la Microsoft, y por si no lo sabías, dejame decirte que los CrysRep son un producto ajeno a bi$$gates.

Sino me crees, date una vuelta por el site
Código: [Seleccionar]
www.businessobjects.com
Con esto empiezo a abrirte los ojos a lo que es el mundo de los CrysRep.

Verás que trabajar con los CrysRep es bien mamado, y me baso en la teoría del Huevo de Colón.... con esto no digo que es fácil porque alguien me enseño... lo digo porque así quedaras luego de leer el post!


Ya entrando en materia, en este apartado te explicare como trabajar con los CrysRep ver 10 en vb.Net 2005


requisitos:
el Visual Basic .Net 2005 en español, con el componente CrysRep Instalado por supuesto.
una base de Datos relacional.
y lo más importante La necesidad de crear un Reporte!!!!

- Crea un proyecto nuevo del tipo "Aplicacion para Windows"
para trabajar adecuadamente, (ojo con la palabra adecuada, porque siempre se puede de otra forma....) necesitas conectar tu proyecto de vb.Net a tu data, por medio del menú Herramientas (vb.Net) - Conectar con base de Datos... eso para crear un Esquema de tu Data..
Esto te creara un DataSet con todas las tablas que tu desees.

A lo que me referia con la palabra adecuadamente, es que una opción es crear tu esquema a patita, pero date cuenta que es mas facil ocupar los famosos Asistentes a los que microsoft nos tiene acostumbrados a ir creando un DataTable con todos los campos uno por uno.... pero en fin it's your desicion

- va ahora agregas un frm a tu proyecto... tu te llamaras frmReportes.
- en el agregas un control CrystalReportViewer.... tu te llamaras objViewer
- al objViewer le asignas la propiedad "Dock" a Fill pa que te ocupte todo el espacio del frm
- agrega un nuevo elemento a tu proyecto, del tipo CrystalReport,... tu te llamaras objCrystal

ojo que cuando hayas agregado el objCrystal te aparecera un asistente que te preguntará si queres hacer uno en Blanco, con Asistente o duplicar uno que ya creaste....

Primero vamos a seleccionar uno en blanco. (mas adelante ocuparemos el asistente....)

con esto te crea un CrysRep en blanco y te debe aparecer en la parte izquierda una ventana acoplable llamada "Explorador de Campos".
ahi, donde dice "Campos de Base de Datos" da clic derecho y luego "Asistente de Base de Datos"---"ADO.Net DataSets" aqui te deben aparecer las tablas de tu esquema... sino pos tas frito...

seleccionas la tabla de la que quieres el reporte... ojo ahorita solo agrega una... vamos a ir despacio...

- Aceptar

ahora en el Explorador de Campos debe de aparecer tu tabla con todos sus campos.

- Agrega los campos de tu tabla que queras mostrar en el reporte a la Seccion3(Detalles) del ObjCrystal

CrysRep le pondra los nombres de los campos automaticamente (gonitos los CrysRep)


ahora, el codigo.

en las declaraciones declara 3 cosas
- la conexion
- un dataSet
- un dataAdapter

- en el load del frmReportes vas a setear tu conexión... esto me lo voy a saltar porque es otor pisto....

luego abrir la conexion, vamos a crear la consulta... podes crear una consulta con algun criterio, todo de depende de tu Data.

- la vas a Abrir con el dataAdapter
Citar
       (dataAdapter("select * from nombre_tabla", my_conexion)

- Llenas tu dataSet con el resultado de tu consulta, logicamente vas a consultar a la tabla que agregaste al Explorador de Campos...
Citar
       (dataAdapter.fill(dataSet,"nombre_tabla")

- seteas el dataSource de tu objCrystal con el dataSet
Citar
objCrystal.SetDataSource(dataSet)

- refrescas tu objCrystal
Citar
objCrystal.Refresh

- al objViewer le seteas tu objCrystal
Citar
frmReporte.objViewer.ReportSource = objCrystal

ahora presiona F5 y veamos si furula.....

si todo salio bien... te pregunto ¿como se ve vo?

como ya es noche... mañana te sigo contando lo que tu mama no te dijo de los CrystalReport pero esta vez de un reporte con Corte de Control o llamado también  Maestro - Detalle  ohyea:
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Herberths en diciembre 27, 2007, 10:09:29 pm
Solo medio lo empese a leer y debola c nota q esta facil..
para empesarlo a usar, no es tan complicad
Gracias :mosh:
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: tekun en diciembre 30, 2007, 11:39:38 am
ahora que reviso lo que escribi veo que me faltaron dos cosas x_x

por si te da error cuando llenas el dataSet....

luego de crear el dataAdapter con tu consulta
Citar
     (dataAdapter("select * from nombre_tabla", my_conexion)

agrega lo siguiente
Citar
        dataAdapter.MissingSchemaAction = MissingSchemaAction.Add
        dataAdapter.MissingMappingAction = MissingMappingAction.Passthrough

quieres saber que hace.... pos tendrás que leer....

declara una variable del tipo objCrystal.... el CrysRep que creaste....



va. ahora con lo que quede pendiente de un Reporte con Corte de Control....

yo le llamo asi a aquellos reporte que estan agrupados por un criterio en especifico.... para este ejemplo voy a referirme a dos tablas de un base de datos "Relacional" como dije al inicio...

mis tablas son:

Table: Sucursales

con estos datos y columnas

codigo_sucursal           nombre_sucursal
1                              Casa Matriz Barrio Sta Lucia
2                              Sucursal Col 27 Septiembre
3                              Sucursal Barrio La Cruz

Citar
primariKey codigo_sucursal

Table: Empleados

con estos datos y columnas

codigo_sucursal        codigo_empleado      nombre_empleado
1                           1                            Pedro Gonzalez
1                           2                            Guadalupe Hernandez
1                           3                            Esteban Martinez
2                           1                            Ana Garcia
2                           2                            Silvia Lopez
2                           3                            Jose Herrera
3                           1                            Antonio Lainez
3                           2                            Susana Quintanilla
3                           3                            Francisco Cruz

Citar
PrimariKey codigo_sucursal+codigo_empleado
ForeignKey codigo_sucursal con referencia a tabla sucursales en el campo codigo_sucursal

..............

- agrega uno crystal report, tu te llamaras objCrystal2

- ahora seleccionamos el asistente estandar.... ojo, que hasta aquí ya debe estar en nuestro esquemas las dos tablas que estan arriba o sobre las cuales quieras trabajar...

- ya en el asistente en la seccion de Origenes de datos disponibles, buscas en la carpeta ADO.Nets te aparecera tu esquema con todas las tablas... seleccionamos y agregamos las tablas Empleados y Sucursales... Siguiente

- el vinculo el automaticamente lo creara.... Nota... si no lo hace automaticamente... tendras que hacerlo tu... jalando la clave principal hacia la foranea... si queres que lo haga automaticamente creo que lo que te falta es crear las llaves en tus tablas del esquema... eso lo haces en el esquema directamente... como¿? pos lee.. Siguiente

- campos a mostrar: como lo que queremos son los empleados por sucursal.. solo elegire dos campos de la tabla Empleados... codigo_sucursal y nombre_empleado... Siguiente

- aqui esta el reporte con Corte de Control.... Agrupamiento, a la seccion de agrupar por, agrega el campo codigo_sucursal de la seccion "Campos del Informe"... Siguiente

- Resumenes; si queres hacer un count de cuantos registros hay en el grupo, o los famosos subTotales.... Siguiente

- Ordenacion de grupos; dejalo en niguno... Siguiente

- Estilo... pues trataremos con el primero, el Estandar... Finalizar

ahora tu CrysRep va a tener un aspecto algo raro... ajustalo a tus ideas de "Decoro"....


ahora el codigo.....

en tu FrmReportes.... solo cambiaremos dos cosas del anterior... logicamente será el Query de la consulta en el dataAdapter y el nombre de la tabla en el dataSet...

Para ver un buen efecto consultare todos los Empleados existentes....

Citar
   
   ' primero declaramos la variable del tipo objCrystal
   dim objCrystal as objCrystal2

(dataAdapter("select * from empleados", my_conexion)
   dataAdapter.MissingSchemaAction = MissingSchemaAction.Add
   dataAdapter.MissingMappingAction = MissingMappingAction.Passthrough
   (dataAdapter.fill(dataSet,"empleados")

   ' de aqui es lo mismo

   objCrystal.SetDataSource(dataSet)
   objCrystal.Refresh
   frmReporte.objViewer.ReportSource = objCrystal

- F5.... como se ve?

ahhhh pero me diras... aparece agrupado por 1, 2 y 3 como codigo de sucursal....

interesante vea... como hacer para que aparezca el nombre de la sucursal...?¿?¿

pues vamos a hacer lo siguiente:

- primero.... vamos a agregar el campo "nombre_sucursal" de la tabla Sucursales a nuestro objCrystal2, y lo vas a agregar a la seccion Encabezado de Grupo...
Eso lo haces con el Explorador de Campos - Campos de Base de datos... solo arrastra el nombre del campo a la seccion que te dije antes...

- ahora el codigo; vamos a declarar otro dataAdapter o podes ocupar el mismo... yo ocupare otro, declarandolo desde el inicio... y seteandolo así:
Citar
    (dataAdapter2("select * from sucursales", my_conexion)
   dataAdapter2.MissingSchemaAction = MissingSchemaAction.Add
   dataAdapter2.MissingMappingAction = MissingMappingAction.Passthrough
   (dataAdapter2.fill(dataSet,"sucursales")
es un dataAdapter2 que llena el mismo dataSet solo que es la tabla "sucursales"

este codigo agregalo antes del
Citar
objCrystal.SetDataSource(dataSet)
   objCrystal.Refresh
   frmReporte.objViewer.ReportSource = objCrystal
ahora. en el objCrystal en tiempo de diseño selecciona el campo "Nombre de Grupo #1" de la sección "Encabezado de Grupo #1" y cambiale la propiedad "Suppress" a "True"

presiona F5 y decime ?como se ve?¿
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Juancho en diciembre 30, 2007, 08:44:50 pm
sabes yo tengo uan duda cone estos crystal report y lo  quiero hacer es imprimir un reporte con 2 tablas distintas d lo cual no tienen relacion ella, osea para explicarme mejor m gustaria que saliera el primer reporte y seguido de este q saliera el segundo repote cabal abajo de donde termine el primero, Lo intente hacer con subreportes pero al igual noc a veces en q posicion ponerlos! Alguan ayuda.. Osea lo mejor quzias algunos m digan es imprimir uno primero y seguido el otro.. Pero no lo quiero hacer d un solo.. y q salga cabal justo depues de dond termine el primero!
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Alexiel en enero 17, 2008, 07:06:58 am
Buenisimo aporte la verdad.
Yo siempre he tenido una duda, cual es la ventaja de trabajar con Crystal Reports??
Solo es el hecho de ahorrar tiempo, porque es mas facil?? O sera que es mas versatil en cuanto al diseño, trae mas opciones??

Otra consultita, estos reportes se pueden utilizar en ASP 2.0?? Se hace de la misma forma??
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: tekun en enero 17, 2008, 11:33:59 am
Osea lo mejor quzias algunos m digan es imprimir uno primero y seguido el otro.. Pero no lo quiero hacer d un solo.. y q salga cabal justo depues de dond termine el primero!

Cual es la necesidad de hacerlo uno tras de otro?¿?¿.-..... por como lo planteas no le veo razón de ser a ese reporte....

Buenisimo aporte la verdad.
Yo siempre he tenido una duda, cual es la ventaja de trabajar con Crystal Reports??
Solo es el hecho de ahorrar tiempo, porque es mas facil?? O sera que es mas versatil en cuanto al diseño, trae mas opciones??

Otra consultita, estos reportes se pueden utilizar en ASP 2.0?? Se hace de la misma forma??


Hasta donde se, Crystal Reports es el add-on que trae por default VS.Net para crear reportes.... hay otros complementos para reportes que se le pueden agregar al .Net.

Ventaja, los reportes con de vb6.0 de aquellos con corte de control(Maestro - Detalle) para mi eran super engorrozos... aquello del command Shape.......ajsdfajkla

ahora con los crystal es mas mamado....

Diseño.... con los corte de control crystal automaticamente te crea otro reporte, es decir si le das doble clic a un agrupador te aparece otro reportillo solo con la info de ese grupo... algo que se es bastante gonito

Opciones.... podes exportar a pdf, excel, word con el mismo formato de tu reporte, buscar cualquier texto dentro de tus reportes....

Versatil..... ya pondre mas ejemplos de lo que puedes hacer con los crystal... me he retrasado con el trabajo... no porque tengo de dos a tres entregas mas de ejemplos.... al final pondre un proyecto con todos los temas que he tocado....

ASP 2.0.... con eso no he trabajado..... pero segun google si se pueden ejecutar los crystal...

saludos
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: sicario en enero 17, 2008, 11:44:39 am
a mi mi MAMA me conto que en crystal.. podia yo elegir en que formato quiero mi informacion (exel, word, html, pdf) .... pero no quiero utilizar la opcion que tiene el reportviewer.. de "EXPORTAR"... lo quiero automatico en mi apliacion....mediante una funcioncita....

¿como quedaria eso segun tu ejemplo?  :)
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Alexiel en enero 17, 2008, 01:07:41 pm
Ya que lo mencionas si tiene bastantes ventajas, sobre todo por los diferentes formatos que puedes utilizar.
Espero los demas ejemplos con ancias  :p
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Juancho en enero 17, 2008, 01:44:41 pm
Cual es la necesidad de hacerlo uno tras de otro?¿?¿.-..... por como lo planteas no le veo razón de ser a ese reporte....

T pongo un ejemplo... Suponete q estas en tu trabajo y tienen una impreseroa en red o por IP para todas las compu y la impresora esta en el primer piso y vs estas en el octavo piso tendrias q bajar ocho pisos para darla vuelta al papel o volver a poner la hoja y d alli subir de nuevo 8 pisos para volver a imprmir el segundo? No crees q seria mejor de un solo?
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: xeneise69 en enero 17, 2008, 05:39:17 pm
hey fijense q estube probando el crystal reports, es facil de usar pero mi problema es cuando quiero probar mi aplicacion en otras maquinas me pide una serial es decir una clave de registro distanta a la q e usado para mi Visual estudio estoy usando visual basic.net 2005 y el crystal Reports q trae por default... podria alguien ayudarme como puedo hacer cuando pruebo en otra maquina mi aplicacion los reportes no me funcionan debido a q debo registrar el CrystalReports  :sur:

NOSE Q HACER ESTOY EN PRBLEMAS....  :cry:

de antemano muchas gracias....  :drinks:
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: g00mba en enero 17, 2008, 08:54:45 pm
que bien esta esta guia te animo a q la sigas y la completes porq aqui en todos lados piden crystal reports y no es una babosada con la q se juege todos los dias cuando no estas trabajando...
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: tekun en enero 18, 2008, 09:11:37 am
T pongo un ejemplo... Suponete q estas en tu trabajo y tienen una impreseroa en red o por IP para todas las compu y la impresora esta en el primer piso y vs estas en el octavo piso tendrias q bajar ocho pisos para darla vuelta al papel o volver a poner la hoja y d alli subir de nuevo 8 pisos para volver a imprmir el segundo? No crees q seria mejor de un solo?

entonces vos lo que quere es una impresion doble cara???? porque hay impresoras que lo hacen...



hey fijense q estube probando el crystal reports, es facil de usar pero mi problema es cuando quiero probar mi aplicacion en otras maquinas me pide una serial es decir una clave de registro distanta a la q e usado para mi Visual estudio estoy usando visual basic.net 2005 y el crystal Reports q trae por default... podria alguien ayudarme como puedo hacer cuando pruebo en otra maquina mi aplicacion los reportes no me funcionan debido a q debo registrar el CrystalReports

NOSE Q HACER ESTOY EN PRBLEMAS....

de antemano muchas gracias.... 

por favor poneme el msj de error que te tira.... yo tuve un pedo con la utilizacion de los crystal en otras maquinas pero no me pedia clave o serial....

la forma en como solucione mi error es una de los post que voy a poner.... pero uta ahorita toy super topado con el trabajo....


a mi mi MAMA me conto que en crystal.. podia yo elegir en que formato quiero mi informacion (exel, word, html, pdf) .... pero no quiero utilizar la opcion que tiene el reportviewer.. de "EXPORTAR"... lo quiero automatico en mi apliacion....mediante una funcioncita....

¿como quedaria eso segun tu ejemplo? 

tu mama te conto eso porque yo le dije XD.....jajajajajaja

perame ya te voy a poner como hago eso
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: xeneise69 en enero 21, 2008, 05:34:20 pm
pues fijate q el error q me da es q no me deja utilizar los reportes q e creado antes de eso me pide q ingrese el serial osea registrarme para utilizarlo.... nose que puedo hacer...  ohyea:
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Juancho en enero 21, 2008, 09:04:31 pm
entonces vos lo que quere es una impresion doble cara???? porque hay impresoras que lo hacen...

No lo q quiero son 2 informes completament diferent q salgo uno seguido dle otro.. Osea dond no mas termine uno q alli incie el siguietne.. X tanto no es doble cara!
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: tekun en enero 23, 2008, 07:03:39 pm
pues fijate q el error q me da es q no me deja utilizar los reportes q e creado antes de eso me pide q ingrese el serial osea registrarme para utilizarlo.... nose que puedo hacer... 

para poder ayudarte.... captura la pantalla del error y ponlo aqui.


T pongo un ejemplo... Suponete q estas en tu trabajo y tienen una impreseroa en red o por IP para todas las compu y la impresora esta en el primer piso y vs estas en el octavo piso tendrias q bajar ocho pisos para darla vuelta al papel o volver a poner la hoja y d alli subir de nuevo 8 pisos para volver a imprmir el segundo? No crees q seria mejor de un solo?

yo dije imprimir doble cara porque literalmente eso es lo que describes en el parrafo anterior....
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Juancho en enero 24, 2008, 04:48:26 pm
yo dije imprimir doble cara porque literalmente eso es lo que describes en el parrafo anterior....

sabia q m ibas a contestar con doble cara x eso iba a poner no doble cara pero hasta despues m acord jajajaja
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: tekun en agosto 21, 2008, 05:36:20 pm
Continuando con mi superPost XD....

mas que todo por la solicitud de JGuillen™ ..... retomo este post....

me faltava algo que ya habia adelantado...y  es el echo de redistribuir tus app de vs05 que lleven crystalReport... si al momento de ejecutar tu app en otras pc te da un error de archivos de CrystalReport....

puede ser porque no esten instalados CrystalReportsRedist2005_x86.msm .... entonces como hacer pa instalarlos.... es super fácil... el mismo vs05 los hace por ti... solo para que los lleves y los instales antes de ejecutar tu aplicación.... bien aqui te explico como?¿

en las propiedades de tu proyecto, busca la opion Publicar, luego presiona sobre el botón Requisitos Previos, en la pantalla que te aparezca chequea la opción "Crear programas de Instalación para instalar los componentes necesarios"

el cuadrito debe quedar como la siguiente pantalla..
(http://img147.imageshack.us/img147/2418/redist1kx1.th.jpg) (http://img147.imageshack.us/my.php?image=redist1kx1.jpg)

luego... siempre en la pestaña Publicar, en donde te pide "Ubicación de publicación" pón una dirección válida en tu pc.... luego da clic en Publicar Ahora...

hara la publicación en la carpeta que especificaste y ahí creara una carpeta "crystalreports" donde estarán los archivos que necesitas instalar en las pc donde ocuparas tu aplicación.... los demás talvez no te importen...

y Listo.... :thumbsup:


si tenes curiosidad por saber que es eso de la publicación podes preguntar también.... porque es una maravilla   :)
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: marcosr_87 en septiembre 09, 2008, 11:42:32 am
Continuando con mi superPost XD....

mas que todo por la solicitud de JGuillen™ ..... retomo este post....

me faltava algo que ya habia adelantado...y  es el echo de redistribuir tus app de vs05 que lleven crystalReport... si al momento de ejecutar tu app en otras pc te da un error de archivos de CrystalReport....

puede ser porque no esten instalados CrystalReportsRedist2005_x86.msm .... entonces como hacer pa instalarlos.... es super fácil... el mismo vs05 los hace por ti... solo para que los lleves y los instales antes de ejecutar tu aplicación.... bien aqui te explico como?¿

en las propiedades de tu proyecto, busca la opion Publicar, luego presiona sobre el botón Requisitos Previos, en la pantalla que te aparezca chequea la opción "Crear programas de Instalación para instalar los componentes necesarios"

el cuadrito debe quedar como la siguiente pantalla..
(http://img147.imageshack.us/img147/2418/redist1kx1.th.jpg) (http://img147.imageshack.us/my.php?image=redist1kx1.jpg)

luego... siempre en la pestaña Publicar, en donde te pide "Ubicación de publicación" pón una dirección válida en tu pc.... luego da clic en Publicar Ahora...

hara la publicación en la carpeta que especificaste y ahí creara una carpeta "crystalreports" donde estarán los archivos que necesitas instalar en las pc donde ocuparas tu aplicación.... los demás talvez no te importen...

y Listo.... :thumbsup:


si tenes curiosidad por saber que es eso de la publicación podes preguntar también.... porque es una maravilla   :)


Hola me sirvio mucho tus post ahora llegue a al momento que necesito que me corran en diferentes maquinas pero no encuentro esa pestaña Publicar a la que haces referencia, y ya que estoy te pregunto como solucionar el problema de ir cambiando las cadenas de conexion de sql en cada maquina que instale mi aplicacion desde ya muchas gracias.
Un saludo.
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: JGuillen™ en septiembre 09, 2008, 07:22:20 pm

Hola me sirvio mucho tus post ahora llegue a al momento que necesito que me corran en diferentes maquinas pero no encuentro esa pestaña Publicar a la que haces referencia, y ya que estoy te pregunto como solucionar el problema de ir cambiando las cadenas de conexion de sql en cada maquina que instale mi aplicacion desde ya muchas gracias.
Un saludo.

Hey Bienvenido a la SVC marcosr_87..!


Respondiendo a tus dudas...

¿ no encuentro esa pestaña Publicar ?

Aca te dejo un par de imagenes... espero me de a entender...

(http://img258.imageshack.us/img258/3809/i1on9.png)


(http://img255.imageshack.us/img255/9865/12cg8.png)


¿como solucionar el problema de ir cambiando las cadenas de conexion de sql?

Si pones la ip del servidor donde esta alojado SQL Server... o a q te referis?  :big_boss:

Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: marcosr_87 en septiembre 10, 2008, 10:41:29 am
Gracias por la explicacion me sirvio, a lo de la conexion me refiero a que yo mi maquina utilizo esta cadena de conexion por ej :
private static SqlConnection oConn = new SqlConnection(" Data Source=DIEL-01C3EBA51E;Initial Catalog=Dielpos;Integrated Security=True "), ahora yo quiero que mi aplicacion corra en diferentes maquinas entonces nose como solucionar el tema de la cadena en cada maquina.Me explico ??. Mi intencion seria entrgar un cd por ej con mi aplicacion, con todas las tablas sin la necesidad de ir cada vez que se quiera instalar la aplicacion...
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: JGuillen™ en septiembre 10, 2008, 11:52:37 am
Gracias por la explicacion me sirvio, a lo de la conexion me refiero a que yo mi maquina utilizo esta cadena de conexion por ej :
private static SqlConnection oConn = new SqlConnection(" Data Source=DIEL-01C3EBA51E;Initial Catalog=Dielpos;Integrated Security=True "), ahora yo quiero que mi aplicacion corra en diferentes maquinas entonces nose como solucionar el tema de la cadena en cada maquina.Me explico ??. Mi intencion seria entrgar un cd por ej con mi aplicacion, con todas las tablas sin la necesidad de ir cada vez que se quiera instalar la aplicacion...

Yo lo que hago es... colocar una clave en el registro con la IP, User, Password del Servidor SQL.. y desde mi aplicacion.. cada vez q la abro solo voy a traer esos datos para estrablecer la conexion.... si te sirve mi idea.. te puedo explicar como hacerlo..!  :thumbsup:
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: marcosr_87 en septiembre 10, 2008, 01:15:26 pm
Bueno buenisimo si me podes explicar el metodo que vos utilizas para arreglar mi inconveniente me sria de gra ayuda  :thumbsup:
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Jonhyrey en septiembre 12, 2008, 09:43:25 am
Yo lo que hago es que manejo una clase que me administra la información del reporte.

Lo unico que necesito enviar es una tabla cargada con toda la información y la clase se encarga de establecer todos los elementos necesarios para mostrar el informe ya configurado.

No necesito establecer la cadena de conexión porque yo le pongo el origen de datos desde la clase.

Si deseas, te puedo poner la clase y un ejemplo de como utilizarla.
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: marcosr_87 en septiembre 15, 2008, 09:37:05 am
A bueno si copiarias la clase me seria de ayuda Gracias.
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Jonhyrey en septiembre 16, 2008, 05:17:31 pm
Esta clase todavía está en construcción la idea de ponerla aqui es aceptar sugerencias para que la clase sea superfuncional sin dar muchas vueltas.... ahorita solo funciona para Crystal Reports.

Citar
Option Strict Off

Imports System.Reflection
Imports System.ComponentModel
Imports Microsoft.VisualBasic

Public Class ReportHandler
    Implements IDisposable

    Private _NombreInforme As String
    Private _Origen As New DataTable
    Private disposedValue As Boolean = False
    Private _Parametro As New List(Of ReportParameter)
    Private _Ruta As String
    Private _Origen2 As New DataTable

    Enum Estadoinf
        Pantalla
        Impresor
    End Enum

    Public Property Parametros() As List(Of ReportParameter)
        Get
            Return Me._Parametro
        End Get
        Set(ByVal value As List(Of ReportParameter))
            Me._Parametro = value
        End Set
    End Property

    ''' <summary>
    ''' Obtiene o establece el nombre del reporte que se mostrará
    ''' </summary>
    ''' <value>String</value>
    ''' <returns>String</returns>
    ''' <remarks></remarks>
    <Description("Obtiene o establece el nombre del reporte que se mostrará")> _
    Public Property NombreInforme() As String
        Get
            Return Me._NombreInforme
        End Get
        Set(ByVal value As String)
            Me._NombreInforme = value
        End Set
    End Property

    ''' <summary>
    ''' Obtiene o establece
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property Origen() As DataTable
        Get
            Return Me._Origen
        End Get
        Set(ByVal value As DataTable)
            Me._Origen = value
        End Set
    End Property

    Public Property Origen2() As DataTable
        Get
            Return Me._Origen2
        End Get
        Set(ByVal value As DataTable)
            Me._Origen2 = value
        End Set
    End Property

    Public Property Ruta() As String
        Get
            Return Me._Ruta
        End Get
        Set(ByVal value As String)
            Me._Ruta = value
        End Set
    End Property

    ''' <summary>
    ''' Inicializa la instancia ReportHandler
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()

    End Sub

    ''' <summary>
    ''' Inicializa la instancia ReportHandler configurando al mismo tiempo el Nombre del Informe
    ''' </summary>
    ''' <param name="NombreInforme"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal NombreInforme As String)
        Me.NombreInforme = NombreInforme
    End Sub

    ''' <summary>
    ''' Inicializa la instancia de ReportHandler configurando al mismo tiempo el Nombre y el Origen del Informe
    ''' </summary>
    ''' <param name="NombreInforme"></param>
    ''' <param name="Origen"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal NombreInforme As String, ByVal Origen As DataTable)
        Me.NombreInforme = NombreInforme
        Me.Origen = Origen
    End Sub

    ''' <summary>
    ''' Función privada que crea un objeto a partir de el nombre del informe que existe en el proyecto
    ''' </summary>
    ''' <param name="nombreInforme"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function CrearObjeto(ByVal nombreInforme As String) As Object
        Dim Frm As New Object
        Dim toop As New Object
        nombreInforme = System.Reflection.Assembly.GetExecutingAssembly.GetName.Name & "." & nombreInforme
        Dim valor As New System.Runtime.Remoting.ObjectHandle(Frm)
        valor = AppDomain.CurrentDomain.CreateInstance(Assembly.GetExecutingAssembly().FullName, nombreInforme)
        toop = valor.Unwrap
        Return toop
    End Function

    ''' <summary>
    ''' Procedimiento que imprime el informe configurado
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub PrintToPrinter()
        If Me.Origen.Rows.Count = 0 Then
            Throw New Exception("No hay datos que asignar")
        End If

        Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
        'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
        Dim frmVisor As New FrmVisor
        rpt.SetDataSource(Me.Origen)

        frmVisor.CRViewer.ReportSource = rpt
        frmVisor.CRViewer.PrintReport()
    End Sub

    ''' <summary>
    ''' Procedimiento que imprime un reporte configurado con los parametros indicados directamente al Impresor
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub PrintToPrinterwithParameters()
        If Me.Origen.Rows.Count = 0 Then
            Throw New Exception("No hay datos que asignar")
        End If

        Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
        'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
        Dim frmVisor As New FrmVisor
        rpt.SetDataSource(Me.Origen)

        For Each param As ReportParameter In Me.Parametros
            rpt.SetParameterValue(param.NombreParametro, param.Value)
        Next
        frmVisor.CRViewer.ReportSource = rpt
        frmVisor.CRViewer.PrintReport()
    End Sub

    ''' <summary>
    ''' Procedimiento que imprime un reporte configurado con los parametros indicados en Vista Preliminar
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub PrintToPromptPreviewWithParameters()
        If Me.Origen.Rows.Count = 0 Then
            Throw New Exception("No hay datos que asignar")
        End If

        Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
        'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
        Dim frmVisor As New FrmVisor

        rpt.SetDataSource(Me.Origen)

        For Each param As ReportParameter In Me.Parametros
            rpt.SetParameterValue(param.NombreParametro, param.Value)
        Next
        frmVisor.CRViewer.ReportSource = rpt
        frmVisor.ShowDialog()
    End Sub

    ''' <summary>
    ''' Procedimiento que imprime un reporte configurado con los parametros indicados en Vista Preliminar
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub PrintToPromptPreviewMultitableWithParameters()
        If Me.Origen.Rows.Count = 0 Then
            Throw New Exception("No hay datos que asignar")
        End If

        Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
        'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
        Dim frmVisor As New FrmVisor

        Dim ds As New DataSet("DSReportes")
        ds.Tables.Add(Me.Origen2)
        ds.Tables.Add(Me.Origen)

        rpt.SetDataSource(ds)

        For Each param As ReportParameter In Me.Parametros
            rpt.SetParameterValue(param.NombreParametro, param.Value)
        Next
        frmVisor.CRViewer.ReportSource = rpt
        frmVisor.ShowDialog()
    End Sub

    ''' <summary>
    ''' Procedimiento que muestra el informe en vista preliminar
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub PrintToPromptPreview()
        If Me.Origen.Rows.Count = 0 Then
            Throw New Exception("No hay datos que asignar")
        End If

        Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
        'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
        Dim frmVisor As New FrmVisor
        rpt.SetDataSource(Me.Origen)

        If Not Me.Origen2.Rows.Count = 0 Then
            rpt.SetDataSource(Me.Origen2)
        End If
        frmVisor.CRViewer.ReportSource = rpt
        frmVisor.ShowDialog()
    End Sub

    ''' <summary>
    ''' Procedimiento utilizado para Agregar los parametros adecuados para mostrar los informes
    ''' </summary>
    ''' <param name="NombreParametro"></param>
    ''' <param name="valor"></param>
    ''' <remarks></remarks>
    Public Sub AgregarParametro(ByVal NombreParametro As String, ByVal valor As Object)
        Dim nParametro As New ReportParameter(NombreParametro, valor)
        Me.Parametros.Add(nParametro)
    End Sub

    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ' TODO: Liberar recursos administrados cuando se llamen explícitamente
            End If

            ' TODO: Liberar recursos no administrados compartidos
        End If
        Me.disposedValue = True
    End Sub

#Region " IDisposable Support "
    ''' <summary>
    ''' elimina de memoria la información utilizada por ReportHandler
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Dispose() Implements IDisposable.Dispose
        ' No cambie este código. Coloque el código de limpieza en Dispose (ByVal que se dispone como Boolean).
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region

End Class

Partial Public Class ReportParameter

    Private _NombreParametro As String
    Private _value As Object

    ''' <summary>
    ''' Obtiene o establece el nombre del parametro con el ID establecido en el reporte
    ''' </summary>
    ''' <value>String </value>
    ''' <returns>Nombre del Parametro</returns>
    ''' <remarks></remarks>
    Public Property NombreParametro() As String
        Get
            Return Me._NombreParametro
        End Get
        Set(ByVal value As String)
            Me._NombreParametro = value
        End Set
    End Property

    ''' <summary>
    ''' Obtiene o establece el objeto que representa el valor del objeto
    ''' </summary>
    ''' <value>Object</value>
    ''' <returns>Valor del parametro</returns>
    ''' <remarks></remarks>
    Public Property Value() As Object
        Get
            Return Me._value
        End Get
        Set(ByVal value As Object)
            Me._value = value
        End Set
    End Property

    ''' <summary>
    ''' Inicializa la instancia de la clase
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
    End Sub

    ''' <summary>
    ''' Inicializa la instancia de la clase con el nombre del parametro
    ''' </summary>
    ''' <param name="NombreParametro"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal NombreParametro As String)
        Me.NombreParametro = NombreParametro
    End Sub

    ''' <summary>
    ''' Inicializa la instancia de la clase con el nombre del parametro y su respectivo valor
    ''' </summary>
    ''' <param name="NombreParametro"></param>
    ''' <param name="valor"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal NombreParametro As String, ByVal valor As Object)
        Me.NombreParametro = NombreParametro
        Me.Value = valor
    End Sub
End Class

Como Funciona?? Aqui les va un ejemplo: utilizo otra clase:

Citar
Private Const rpt_ConglomeradoPartidas As String = "rpt_Partidas"

Enum Timpr
        impresor
        VistaPrevia
    End Enum

    Public Sub ImprimirConglomeradoPartidas(ByVal Impresion As Timpr, ByVal Ruta As String)
        Dim repoHandler As New ReportHandler
        repoHandler.NombreInforme = ReportManager.rpt_ConglomeradoPartidas
        repoHandler.Ruta = Ruta

        Dim dt As New DataTable
        Dim cSource As New cAvance
        dt = cSource.ConglomeradoPartidasSource()

        repoHandler.Origen = dt

        If Impresion = Timpr.VistaPrevia Then
            repoHandler.PrintToPromptPreview()
        Else
            repoHandler.PrintToPrinter()
        End If
    End Sub

Lo que hago en el procedimiento es configurar el origen de datos del reporte y asignarselo a la clase. Un elemento importante en esa clase es que utiliza un elemento frmvisor y dentro de el utiliza el CrystalReportsViewer.
El proximo trabajo es implementar un objeto form que tenga todos los elementos que el "FrmVisor" utiliza.

En la clase tambien se pueden agregar parametros y hasta ahorita un máximo de 2 tablas por informe.
En mi caso, utilizo los reportes fuera del exe, esto me permite cambiar formatos y alineación de los informes y luego nada más reemplazarlos sin tener la necesidad de generar un nuevo exe, sin embargo, para ello debo proporcionar la ruta donde se encuentra el reporte. La clase es bastante sencilla pero ahorra bastantes lineas de codigo.

Si tienes alguna duda para utilizarla, me la posteas Ok.

Saludos
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: tekun en septiembre 17, 2008, 08:51:23 am
muy buen trabajo Jonhyrey, muy buen trabajo....

la clase ReportHandler esta muy bien creada y para estar todavía en construcción esta muy avanzada.


le faltan "cosillas" que harían más personalizable los reportes, por ejemplo, una propiedad que yo pueda en tiempo de Ejecución cambiar los valores de un objeto FormulaField de cualquier reporte, una propiedad donde yo pueda poner como True la propiedad Supress de "cualquier" objeto del reporte, una propiedad que me permita cambiar el Orden de mis datos, una propiedad que me permita en tiempo de ejecución decirle a mi reporte si lo quiero en Excel, Word o Pdf, una propiedad que en tiempo de ejecución pueda cambiar el tamaño del reporte[Carta,Oficio], una propiedad para cambiar en tiempo de ejecución la orientación de mi reporte [Vertical, Horizontal].. etc.... etc... etc....


Esto ultimo me lleva a una pregunta, ¿ tu aplicación la podes ejecutar en cualquier computadora sin problema de instalar los servicios del ReportViewer ?


y;
Sin ánimos de entrar en discusión, expondré mi punto sobre la idea de trabajar los reportes fuera del Exe. No estoy en contra de esta práctica porque tiene sus ventajas, pero tiene una gran desventaja, porque expones a que eliminación, cambio de nombre, cambio de ubicación; de los archivos de los reportes y ahí esta el problema!!
Título: Re: lo que tu mama no te conto de los CrystalReports !!!
Publicado por: Jonhyrey en septiembre 17, 2008, 12:04:42 pm
Citar
Esto ultimo me lleva a una pregunta, ¿ tu aplicación la podes ejecutar en cualquier computadora sin problema de instalar los servicios del ReportViewer ?

Claro que sí. Recuerda que el visor que utilizo es el de Crystal Reports, lo único que hago es que en cada instalador coloco el paquete distribuido de Crystal Reports que explican en post anteriores. Se instala eso y funciona bien.

Y en cuanto a los reportes fuera del exe.... eso más bien lo hice como un requerimiento de mi entorno de trabajo. Mi deber es solo desarrollar aplicaciones y otra persona se encarga de instalar, es por eso que a la hora de hacer formatos de informes yo solo tiro la información y el técnico se encarga de darle el formato.

Al principio cuando empecé a crear el ReportHandler no me habían pedido eso, por ese motivo se van a dar cuenta que tengo un código con comentario abajo del rpt.Load(....

Citar
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
        'Dim rpt As Object = CrearObjeto(Me.NombreInforme)

Solo comenten la parte del Load y quitenle el comentario a la parte que marque del codigo y el reporte ya no es externo.  :thumbsup:

Ahhhh Gracias por las sugerencias!! Ahora mismo empiezo a ver como le pongo esas funcionalidades que comentaste. Si alguien más me ayuda con otras sugerencias se los agradeceré mucho