[RESUELTO] Seventh Son of a Seventh Son (Reportes y subreportes en CrystalReports)
#1
Escrito 10 agosto 2010 - 03:37
Resulta, compañerit@s del foro que estoy desarrollando una serie de reportes, que necesariamente se integrarán entre sí, controlados por un "reporte maestro" que está desarrollado en CrystalReports 9. Tenemos las VCL's y API de CrystalReports, todos los reportes por separado funcionando correctamente, una aplicación que tiene un visor de reportes CR, una base de datos hermosamente diseñada...
... pero falta integrar TODOS los reportes, uno controlando y los demás, definidos como subreportes añadidos a éste principal. ¿Alguna idea que me pueda ayudar a desenredar éste nudo gordiano?
Por cierto, si éste post no está en la sección correcta, favor de moverlo..., de antemano, gracias.
#2
Escrito 10 agosto 2010 - 04:47
En QuickReport hay un componente de nombre CompositeReport y hace precisamente lo que deseas, quiero pensar que CR cuenta con alguna facilidad similar (si es que se dice que es un reporteador muy bueno )
Salud OS
#3
Escrito 10 agosto 2010 - 06:18
Allí tuve un problemas con CR, no recuerdo que versión empleaba pero me me resultaba muy molesto... No pude generar informes como los que describes: un informe "maestro" que se componga de informes "hijos". Además tenía problemas para pasarles parámetros desde VB y en ocasiones no tomaba bien las consultas. Conclusión: tuve que generar Views y con ello pude hacer que CR las tomara y mostrase los datos.
De generar esos tipos de informes, ha decir verdad estuve 2 o 3 días con ello y opté por lo sano... prefería que el sistema tuviera más reportes básicos y sencillos. Creo que había llegado a hacer cerca de 20 informes.
Eso fue hace años, y debo reconocer que seguramente han cambiado mucho las cosas.
No lo he vuelto a probar. Terminé odiando a CR,... bueno, tengo que admitir también que el mini-curso acelerado de CR que me dieron en la empresa no daba mucho para agarrarle gusto y provecho.
Saludos,
#4
Escrito 11 agosto 2010 - 11:11
La única vez que toqué CR fue en la pasantía por el título de técnico, la diferencia estaba en que empleaba VB y no Delphi.
Allí tuve un problemas con CR, no recuerdo que versión empleaba pero me me resultaba muy molesto... No pude generar informes como los que describes: un informe "maestro" que se componga de informes "hijos". Además tenía problemas para pasarles parámetros desde VB y en ocasiones no tomaba bien las consultas. Conclusión: tuve que generar Views y con ello pude hacer que CR las tomara y mostrase los datos.
De generar esos tipos de informes, ha decir verdad estuve 2 o 3 días con ello y opté por lo sano... prefería que el sistema tuviera más reportes básicos y sencillos. Creo que había llegado a hacer cerca de 20 informes.
Eso fue hace años, y debo reconocer que seguramente han cambiado mucho las cosas.
No lo he vuelto a probar. Terminé odiando a CR,... bueno, tengo que admitir también que el mini-curso acelerado de CR que me dieron en la empresa no daba mucho para agarrarle gusto y provecho.
Saludos,
¡¡Ouch!!, Delphius, realmente la historia que cuentas es bastante triste, sobre todo por que yo estoy viviendo una similar y creo que hasta mejorada...
Lo único que me queda es encomendarme a San Blaise PASCAL y continuar buscando la manera de resolver ésto. Concuerdo contigo, CrystalReports SUCKS!!!
Hola
En QuickReport hay un componente de nombre CompositeReport y hace precisamente lo que deseas, quiero pensar que CR cuenta con alguna facilidad similar (si es que se dice que es un reporteador muy bueno )
Salud OS
De hecho, se requiere que sea en CrystalReports. Yo de buena gana usaría mi proverbial y bien controlado ReportBuilder o hasta me atrevería a hacerlo en RaVE o QuickReport 3, pero como siempre en éstos casos, el que paga, manda.
Si quieres dar por finalizado el tema, no te detendré, gracias.
#5
Escrito 11 agosto 2010 - 11:21
Si quieres dar por finalizado el tema, no te detendré, gracias.
No hombre, no hay que rendirse tan pronto, debe haber una forma aunque sea una verdadera chapuza
Salud OS
#6
Escrito 11 agosto 2010 - 11:27
No se si darte mis pésames o tratar de alentarte a que saques más valentía y coraje.
¡¡Ouch!!, Delphius, realmente la historia que cuentas es bastante triste, sobre todo por que yo estoy viviendo una similar y creo que hasta mejorada...
Pues si, era un tanto triste... ¡tener que usar VB! ¡guácala!, pero lo lindo es que durante ese mismo mes también la he podido pasar muy lindo, al menos encontraba la forma de alegrarme el día.
Ánimo, debe poder hacerse. Tiene que haber alguna manera... yo no recuerdo nada de nada de CR.Lo único que me queda es encomendarme a San Blaise PASCAL y continuar buscando la manera de resolver ésto. Concuerdo contigo, CrystalReports SUCKS!!!
Habrá que rebuscarla, a ver si encuentro algo en la red de redes..
Ouch... yo iba a preguntarte si había la posibilidad de utilizar otro reporteador.De hecho, se requiere que sea en CrystalReports. Yo de buena gana usaría mi proverbial y bien controlado ReportBuilder o hasta me atrevería a hacerlo en RaVE o QuickReport 3, pero como siempre en éstos casos, el que paga, manda.
Si quieres dar por finalizado el tema, no te detendré, gracias.
Yo opino que lo dejemos al tema abierto, no merece cerrarlo. En una de esas alguien más sabe algo.
Saludos,
#7
Escrito 11 agosto 2010 - 11:40
Felipe, ¿en que concretamente te da problemas el CR cuando quieres componer el informe "maestro" con sus "detalles"? ¿Le estás pasando parámetros? ¿No se muestra?
Estoy buscando algo sobre el tema, de forma un tanto genérica y los primeros resultados que estoy obteniendo son esto:
http://delphigroups..../11/355234.html
http://www.delphigro...2/2/359197.html
¿No tendrá algo que ver eso que se dice en los enlaces con tu caso?
De lo que da a entender el primer hilo es que hay algunos bugs en la VCL de CR.
Si bien allí hablan de la versión 8... quizá algo parecido se de en la 9.
Si nos puedes indicar concretamente el problema quizá podríamos ver mejor para saber donde apuntarle a ese bicho.
Saludos,
#8
Escrito 11 agosto 2010 - 11:40
Si quieres dar por finalizado el tema, no te detendré, gracias.
No hombre, no hay que rendirse tan pronto, debe haber una forma aunque sea una verdadera chapuza
Salud OS
Pues es que de hecho, existe ésa forma, con un elegantísimo código en PASCAL, pero que para mi caso particular es tan útil como las llaves del auto en el estómago de un perro. Digo, no tengo problema en adaptar ése código o usarlo para aprender, aunque la intención que tenía al proponer el hilo era encontrar una ayudita para saber que no estoy tan errado.
Al paso que voy, terminaré el viernes, y entonces, les explicaré qué hice y cuál es el resultado.
#9
Escrito 11 agosto 2010 - 11:44
Hola de nuevo,
Felipe, ¿en que concretamente te da problemas el CR cuando quieres componer el informe "maestro" con sus "detalles"? ¿Le estás pasando parámetros? ¿No se muestra?
Estoy buscando algo sobre el tema, de forma un tanto genérica y los primeros resultados que estoy obteniendo son esto:
http://delphigroups..../11/355234.html
http://www.delphigro...2/2/359197.html
¿No tendrá algo que ver eso que se dice en los enlaces con tu caso?
De lo que da a entender el primer hilo es que hay algunos bugs en la VCL de CR.
Si bien allí hablan de la versión 8... quizá algo parecido se de en la 9.
Si nos puedes indicar concretamente el problema quizá podríamos ver mejor para saber donde apuntarle a ese bicho.
Saludos,
Concretamente, eliminar del reporte de CR las sentencias SQL que lo componen, sustituirlas por otras en tiempo de ejecución, determinar si existe un subreporte, eliminar las sentencias que lo componen y sustituirlas por otras..., y así hasta terminar.
Como puedes ver, no es tan complicado en papel, pero a la hora de ponerlo en bit y bytes, es cuando las cosas se complican enormemente. Por el momento, me conformo con saber si dentro de un reporte maestro existe un subreporte, identificarlo y sustituir sus sentencias SQL por otras en tiempo de ejecución.
#10
Escrito 12 agosto 2010 - 10:32
Saludines.
#11
Escrito 12 agosto 2010 - 10:39
Porque veo que tiene derechos de autor.
Salud OS
#12
Escrito 12 agosto 2010 - 10:58
Una pregunta, ¿ este material es de distribución libre ?
Porque veo que tiene derechos de autor.
Salud OS
Sinceramente, no sé. Pero como me resultó extremadamente útil, quise compartirlo con la comunidad.
#13
Escrito 12 agosto 2010 - 11:21
Una pregunta, ¿ este material es de distribución libre ?
Porque veo que tiene derechos de autor.
Salud OS
Sinceramente, no sé. Pero como me resultó extremadamente útil, quise compartirlo con la comunidad.
Entiendo, lo malo es que por norma no debemos subir documentos, programas, código, etc.. que no sean de distribución libre o sin el permiso del autor, por el momento lo dejamos en "Stand by" hasta saber si no estamos infringiendo los derechos de autor.
De cualquier forma se te agradece
Salud OS
#14
Escrito 13 agosto 2010 - 08:59
pReport := CrystalApp.OpenReport('C:\089 Visual Map Version Actual\INCIDENTES\REPORTES\rptInc089.rpt', crOpenReportByTempCopy); pSections := pReport.Sections; for i := 1 to pSections.Count do begin {Ciclar a través de cada sección del reporte principal} pSection := pSections.Item[i]; {Obtener la colección de objetos de repore de la sección} pRepObjects := pSection.ReportObjects; {Ciclar a través de cada uno de los objetos de ésa sección} for j := 1 to pRepObjects.Count do begin pRepObject := IReportObject(pRepObjects.Item[j]); {Si el ReportObject es un SubreportObject} if (pRepObject.Kind = crSubreportObject) then begin {Poner el ReportObject al SubreportObject} PSubObject := ISubReportObject(pRepObject); {Asignar un nuevo Report object, el cual es el subreporte} pSubreport := pSubObject.OpenSubreport; sNmbrRprt := pSubObject.SubreportName; {Asignar los parámetros de conexión a la base de datos a usar dentro del subreporte} pSubObject.OpenSubreport.Database.LogOnServer(sMnj, sIns, sBse, sUsr, sPsw); {Asignar los parámetros a usar dentro del subreporte} if sNmbrRprt = 'srMdFlc089.rpt' then begin wsSQL := 'SELECT DtllPrsInc.NmbPrs, DtllPrsInc.APtPrs, DtllPrsInc.AMtPrs, DtllPrsInc.AlsPrs, DtllPrsInc.EddPrs, '+ 'DtllPrsInc.EstPrs, DtllPrsInc.PsoPrs, DtllPrsInc.SxoPrs, CtlCpx.DscCpx, CtlFrmCra.DscFrmCra, '+ 'CtlTez.DscTez, CtlTpoPlo.DscTpoPlo, CtlCndPlo.DscCndPlo, CtlClrPlo.DscClrPlo, CtlClrOjs.DscClrOjs, '+ 'CtlTpoOjs.DscTpoOjs, CtlFrmBca.DscFrmBca, CtlFrmLbs.DscFrmLbs, CtlFrmFrn.DscFrmFrn, CtlFrmNrz.DscFrmNrz, '+ 'CtlFrmMnt.DscFrmMnt, CtlFrmCjs.DscFrmCjs, CtlFrmPtll.DscFrmPtll, CtlFrmBgt.DscFrmBgt, CtlFrmBrb.DscFrmBrb, '+ 'DtllPrsInc.DrcPrs, DtllPrsInc.DrcCln, DtllPrsInc.AntPnl, DtllPrsInc.RlcSjtVct, CtlLgrRlc.DscLgrRlc, '+ 'DtllPrsInc.TtjPrs, DtllPrsInc.NmrInc, DtllPrsInc.ClvMnc, DtllPrsInc.Foto, DtllPrsInc.VstCmnPrs, '+ 'DtllPrsInc.SnsPrtPrsn FROM ((((((((CtlTez INNER JOIN (CtlTpoPlo INNER JOIN (CtlCndPlo INNER JOIN '+ '(CtlClrPlo INNER JOIN (CtlClrOjs INNER JOIN (CtlTpoOjs INNER JOIN (CtlFrmMnt INNER JOIN (CtlFrmPtll '+ 'INNER JOIN (CtlLgrRlc INNER JOIN (CtlCpx INNER JOIN DtllPrsInc ON CtlCpx.ClvCpx = DtllPrsInc.IndCmp) '+ 'ON CtlLgrRlc.ClvLgrRlc = DtllPrsInc.LgrRlc) ON CtlFrmPtll.ClvFrmPtll = DtllPrsInc.ClvFrmPll) ON '+ 'CtlFrmMnt.ClvFrmMnt = DtllPrsInc.ClvFrmMtn) ON CtlTpoOjs.ClvTpoOjs = DtllPrsInc.TpoOjsPrs) ON '+ 'CtlClrOjs.ClvClrOjs = DtllPrsInc.ClrOjsPrs) ON CtlClrPlo.ClvClrPlo = DtllPrsInc.ClrPloPrs) ON '+ 'CtlCndPlo.ClvCndPlo = DtllPrsInc.ClvCntCbl) ON CtlTpoPlo.ClvTpoPlo = DtllPrsInc.TpoPloPrs) ON '+ 'CtlTez.ClvTez = DtllPrsInc.ClrPil) INNER JOIN CtlFrmCra ON DtllPrsInc.ClvFrmCra = CtlFrmCra.ClvFrmCra) '+ 'INNER JOIN CtlFrmBca ON DtllPrsInc.ClvFrmBca = CtlFrmBca.ClvFrmBca) INNER JOIN CtlFrmLbs ON '+ 'DtllPrsInc.ClvFrmLbs = CtlFrmLbs.ClvFrmLbs) INNER JOIN CtlFrmFrn ON DtllPrsInc.ClvFrmFrn = CtlFrmFrn.ClvFrmFrn) '+ 'INNER JOIN CtlFrmNrz ON DtllPrsInc.ClvFrmNrz = CtlFrmNrz.ClvFrmNrz) INNER JOIN CtlFrmCjs ON '+ 'DtllPrsInc.ClvFrmCjs = CtlFrmCjs.ClvFrmCjs) INNER JOIN CtlFrmBgt ON DtllPrsInc.ClvFrmBgt = CtlFrmBgt.ClvFrmBgt) '+ 'INNER JOIN CtlFrmBrb ON DtllPrsInc.ClvFrmBrb = CtlFrmBrb.ClvFrmBrb '+ 'WHERE (DtllPrsInc.IndEst = '+QuotedStr('A')+') AND '+ '(DtllPrsInc.NmrInc = '+strvrbgblInc+') AND (DtllPrsInc.ClvMnc = '+strvrbgblMnc+') ;'; DtaMdlVrt.adoqryRptMdFlc089.SQL.Clear; DtaMdlVrt.adoqryRptMdFlc089.SQL.Text := wsSQL; DtaMdlVrt.adoqryRptMdFlc089.Open; with pSubreport.Database do begin SetDataSource(DtaMdlVrt.adoqryRptMdFlc089.Recordset, 3, 1); Tables.Item[1].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[2].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[3].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[4].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[5].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[6].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[7].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[8].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[9].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[10].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[11].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[12].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[13].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[14].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[15].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[16].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[17].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[18].SetLogOnInfo( sIns, sBse, sUsr, sPsw); Tables.Item[19].SetLogOnInfo( sIns, sBse, sUsr, sPsw); end; end; . . . . . end; end; end; // EOM CRViewer91.ReportSource := CRReport1.DefaultInterface; CRViewer91.ViewReport;
Y con ésto, podemos dar por cerrado el tema.
#15
Escrito 13 agosto 2010 - 09:02
Salud OS