Вы находитесь на странице: 1из 17

Cargando Crystal Reports 8/8.

5 con PHP
Bueno, no tengo mucho que decir al respecto, sufr horrores con este encargo, no nada mas no se puede hacer algo decente con los DLL's de crystal reports, sino que al parecer, para soluciones extra hiper prcticas y ligeras como un frente php con mysql, cargar un reporte en crystal reports dinamico puede ser muy dificil si queremos meter la seguridad de la base de datos ya que no tenemos forma de leer lso metodos del objeto COM, ni con el get_methods ni con las funciones com_, Sin embargo, esta parte le quitara mucha carga a los programadores y pasaramos la responsabilidad a algunos otros que tal vez ni se enteren de que su reporte se utilice en web. Por lo tanto, veamos estos pasos: 1) Crear el reporte con una conexion a la base de datos utilizando un usuario sin contrasea. - Obvio, un riesgo de seguridad... pero mantenganse conmigo (bare with me), esto es por el placer de aprender y luego resolvemos los pendientes (Agile please) 2) Una vez que el reporte funciona de manera local con su conexion y tenemos los campos aadidos, lo copiamos a nuestro servidor web y lo ponemos en cualquier carpeta que queramos, por lo menos donde el usuario IUSR_ tenga permisos de lectura. 3) editen un archivo php o solo copien y peguen este ejemplo: --------- INICIA CODIGO PHP ----------$crapp = new COM("CrystalRuntime.Application") or die ( "Error on load"); $creport = $crapp->OpenReport("c:\\reporte.rpt", 1); //fomatType = integer 22=xls, 31=pdf etc $creport->ExportOptions->FormatType = 31;

//type 1 is to output to a file I think 2 is email $creport->ExportOptions->DestinationType = 1; $creport->ExportOptions->DiskFileName = "C:\\Inetpub\\wwwroot\\reporte.pdf"; $creport->DiscardSavedData(); $creport->Export(False); header("Location: http://localhost/reporte.pdf"); exit(0); -------- TERMINA CODIGO PHP ---------Y bien, esto es todo... pruebenlo y chequen como la salida en php es mas sencillo que utilizar un fPDF o algo por el estilo y tener que programar la salida... obvio, hay que tener los dlls de crystal y en caso de hacer una instlacion hay que llevarlos al servidor web y eso puede estar fuera del spec del deployment, asi que hay que tener cuidado tambien, no vaya a ser que terminemos instalando todo el crystal reports en el servidor, aguas con las versiones de crystal. Les agradecera sin embargo que si encuentran como meterle la info de usuario y password, la expongan aqui como comentario... Un saludo y espero que esto les evite estar navegando algun tiempo por la red. PD. Por cierto, si quieren cargar un reporte del CR 9 o del 10 o incluso del 11 ponganle lo siguiente al principio: $crapp = new COM("CrystalRuntime.Application.9") or die ( "Error on load"); $crapp = new COM("CrystalRuntime.Application.10") or die ( "Error on load"); $crapp = new COM("CrystalRuntime.Application.11") or die ( "Error on load"); y por ahi les dejo la tarea de ver el createObject para las nuevas versiones porque esa parte yo no la utilice, pero pues con esto podemos empezar y ver que sale de mas :)

Ah si, el ReportFormula mhhm eso lo investigar y le s platico de vuelta una vez qeu lo tenga dominado porque asi podremos meterle parametros al reporte...

Recuerden, solo aqu, y en espaol! Jorge Baroudi's Blog -Como si no tuviera nada que hacer Pppppppppppppp

Cargando Crystal Reports 8/8.5 con PHP


Bueno, no tengo mucho que decir al respecto, sufr horrores con este encargo, no nada mas no se puede hacer algo decente con los DLL's de crystal reports, sino que al parecer, para soluciones extra hiper prcticas y ligeras como un frente php con mysql, cargar un reporte en crystal reports dinamico puede ser muy dificil si queremos meter la seguridad de la base de datos ya que no tenemos forma de leer lso metodos del objeto COM, ni con el get_methods ni con las funciones com_, Sin embargo, esta parte le quitara mucha carga a los programadores y pasaramos la responsabilidad a algunos otros que tal vez ni se enteren de que su reporte se utilice en web. Por lo tanto, veamos estos pasos: 1) Crear el reporte con una conexion a la base de datos utilizando un usuario sin contrasea. - Obvio, un riesgo de seguridad... pero mantenganse conmigo (bare with me), esto es por el placer de aprender y luego resolvemos los pendientes (Agile please) 2) Una vez que el reporte funciona de manera local con su conexion y tenemos los

campos aadidos, lo copiamos a nuestro servidor web y lo ponemos en cualquier carpeta que queramos, por lo menos donde el usuario IUSR_ tenga permisos de lectura. 3) editen un archivo php o solo copien y peguen este ejemplo: --------- INICIA CODIGO PHP ----------$crapp = new COM("CrystalRuntime.Application") or die ( "Error on load"); $creport = $crapp->OpenReport("c:\\reporte.rpt", 1); //fomatType = integer 22=xls, 31=pdf etc $creport->ExportOptions->FormatType = 31; //type 1 is to output to a file I think 2 is email $creport->ExportOptions->DestinationType = 1; $creport->ExportOptions->DiskFileName = "C:\\Inetpub\\wwwroot\\reporte.pdf"; $creport->DiscardSavedData(); $creport->Export(False); header("Location: http://localhost/reporte.pdf"); exit(0); -------- TERMINA CODIGO PHP ---------Y bien, esto es todo... pruebenlo y chequen como la salida en php es mas sencillo que utilizar un fPDF o algo por el estilo y tener que programar la salida... obvio, hay que tener los dlls de crystal y en caso de hacer una instlacion hay que llevarlos al servidor web y eso puede estar fuera del spec del deployment, asi que hay que tener cuidado tambien, no vaya a ser que terminemos instalando todo el crystal reports en el servidor, aguas con las versiones de crystal. Les agradecera sin embargo que si encuentran como meterle la info de usuario y password, la expongan aqui como comentario...

Un saludo y espero que esto les evite estar navegando algun tiempo por la red. PD. Por cierto, si quieren cargar un reporte del CR 9 o del 10 o incluso del 11 ponganle lo siguiente al principio: $crapp = new COM("CrystalRuntime.Application.9") or die ( "Error on load"); $crapp = new COM("CrystalRuntime.Application.10") or die ( "Error on load"); $crapp = new COM("CrystalRuntime.Application.11") or die ( "Error on load"); y por ahi les dejo la tarea de ver el createObject para las nuevas versiones porque esa parte yo no la utilice, pero pues con esto podemos empezar y ver que sale de mas :) Ah si, el ReportFormula mhhm eso lo investigar y le s platico de vuelta una vez qeu lo tenga dominado porque asi podremos meterle parametros al reporte...

Recuerden, solo aqu, y en espaol! Jorge Baroudi's Blog -Como si no tuviera nada que hacerPublicadas por Apokalipsis a la/s 2:19 PM Etiquetas: PHP

27 comentarios:

Annimo dijo... Compaero estoy utilizando su codigo, pero presento problemas con esta linea de error "Source: Seagate Crystal Reports ActiveX Designer Description: Missing or out-of-date export DLL." no se como cargar las DLL al Servidor... podria explicarme como hizo usted? jolutos@hotmail.com 5:44 PM

Apokalipsis dijo... Hola mi estimado jolutos@hotmail.com, la primera parte indica que no encontr el DLL y eso sera cuestin de la ruta al DLL que pones en tu archivo PHP, si puedes imprimir la ruta del DLL que le ests pasando pudiera ser la primera parte de la solucin. Por otro lado, busqu en google la 2da. parte del error, out-of-date export DLL y salieron resultados variados, desde permisos de usuario a los DLL's (en este caso el usuario de una pagina web es IUSR_...) y otro resultado de la bsqueda es en cuanto a un error de exportacin, habra que ver si lo ests exportando a CSV o alguno que para esa versin todava tiene el problema. referencias: http://support.businessobjects.com/communitycs/filesandupdates/cr1 0win_en.pdf Ahi viene lo del out-of-date. Pero primero checa la ruta a tu DLL si? es el problema ms comn. Saludos. 8:16 AM

Annimo dijo... Hola viejo, te coment que yo tengo este problema : Fatal error: Uncaught exception 'com_exception' with message 'Source: Seagate Crystal Reports ActiveX Designer Description: DLL de distribucin perdida o vencida.' in C:\Inetpub\wwwroot\CompuGestion\creport.php:23 Stack trace: #0 C:\Inetpub\wwwroot\CompuGestion\creport.php(23): variant>Export(false) #1 {main} thrown in C:\Inetpub\wwwroot\CompuGestion\creport.php on line 23 y no se de que se trata, lei lo del mensaje anterior pero no entiendo lo

de las rutas de la dll. Espero me pueda ayudar, muchas gracias por su colaboracin. P.D: tengo instalado CR 8.0 3:20 PM

Annimo dijo... Perdn se me olvidaba. Mi e-mail es vlanoj09@hotmail.com por si tienes algo que me puedas enviar sobre el tema. Gracias.. 3:42 PM

Apokalipsis dijo... Hola vlanoj09@hotmail.com, no soy experto en la materia pero parece que el error es evidente, el que si podemos solucionar seria el que fuera un error por no manejar una ruta correcta al DLL, te importara pegar algo de tu cdigo? La otra cuestin, si es un problema de licencia vencida ya ni con la ruta correcta la hacemos :( saludos y espero tu respuesta. 9:35 PM

Annimo dijo... Hola! Queria aportar lo siguiente: para setear el logon info a la base de datos del reporte pueden usar este metodo de la clase DatabaseTable. Una referencia a este objeto se saca del objeto reporte, propiedad

Database.Tables[i], donde i es el subindide de tablas del reporte. Sub SetLogOnInfo (pServerName As String, pDatabaseName], [pUserID], [pPassword]) 5:03 AM

Apokalipsis dijo... Gracias por tu comentario sobre configuracin de la informacin de login a un reporte de Crystal Reports. Estoy seguro que a alguien le beneficiar mucho. Visual basic?... ok, no creo que cambie mucho para los phperos. Adems, es importante porque el reporte casi siempre lo construimos con informacin de login de algn servidor de pruebas. Y en la puesta a punto, es mejor utilizar algn archivo de configuracin para adaptarlo a las condiciones donde se pondr en produccin el sistema. Saludos. 11:08 AM

Norman dijo... Hola Jorge, gracias por tu post, me gustaria saber si has logrado cargar el reporte pero pasandole datos a los parametros que este pueda tener?/ Gracias de nuevo 12:43 PM

Apokalipsis dijo...

Hola Norman, no he podido enviar parametros a un reporte de crystal reports, aunque infiero que se hace a travs del ReportFormula no lo he probado, te la debo mi estimado. Saludos. 2:57 PM

Annimo dijo... Para Aquellos que no han podido abrir la sesion del reporte el codigo seria el siguiente: Solo Para Conexiones ODBC $creport->Database->LogOnServer("p2sodbc.dll", "NombreServidor(DSN)", "MombreBaseDatos", "NombreUsuario", "Password"); Funciona de Maravillas... Si alguien sabe como enviar parametros al reporte favor indicarmelo ya que estoy que me rompo la cabeza y no doy con la solucion. Contactarse a mcampos77@hotmail.com. Saludos PHPEROS.... M@rcos 7:18 PM

Apokalipsis dijo... Gracias M@rcos por el tip. 3:07 AM

Theones dijo... Hola Jorge, sera que pidiste ver como pasarle parametros desde codigo PHP al Crystal Reports?? estoy necesitando eso.. escribime si podes.. Gracias Emilce 1:57 PM

Annimo dijo... sEGU LAS INSTRUCCIONES PERO NO PUEDO CONECTAR A LA BASE oRACLE ME DA EL ERROR: [18-Mar-2008 14:22:41] PHP Fatal error: Uncaught exception 'com_exception' with message 'Source: Crystal Reports ActiveX DesignerDescription: Server has not yet been opened.' in C:\Inetpub\wwwroot\prueba_crystal.php:10 Stack trace: #0 C:\Inetpub\wwwroot\prueba_crystal.php(10): variant>LogOnServer('p2sODBC.dll', 'server_rafam', 'server_rafam', 'FCASTRO', 'RFCAACF') #1 {main} thrown in C:\Inetpub\wwwroot\prueba_crystal.php on line 10 uSANDO LA MISMA LINEA DE CONEXION en VB6 anda bien. mE PUEDEN AYUDAR?? gRACIAS. 10:32 AM

Apokalipsis dijo... Me suena a que tu DLL p2sODBC.dll en tu sistema de visual basic puede estar bien referenciado y como es clsico en una instalacin de crystal

reports hay que rastrear bien bien las DLL's en versiones anteriores a la 10, por ende, como idea, copiate la DLL a una ruta muy especfica del servidor web y trata de darle la ruta completa en el LogOnServer. El 90% de los problemas parecen ser la ubicacin de DLLs y los permisos de acceso al servidor. saludos 1:03 PM

Apokalipsis dijo... Otra cosa que se me ocurre es que como te ests conectando por ODBC hay que checar que hayas creado y probado bien la conexin via ODBC a tu servidor de base de datos ORACLE. Pero fue una idea porque si dices que ya funciona en visual basic puede ser principalmente lo de la DLL. 1:15 PM

Annimo dijo... Hola, estoy usando MySQL y PHP para enlazar con Crystal 8. He probado varios cdigos, todos se reducen bsicamente a lo mismo, el que aqu muestras debe funcionar de maravilla a mi entender, el problema es que no me crea el pdf. cuando llamo el header marca error de servidor pues llamo un archivo inexistente. por que no lo crea? necesito el acrobat para lograr el pdf? El codigo corre sin errores, finaliza bien, pero no crea nada, es por eso que el servidor se queja, pero el codig est bien. Gracias 6:12 PM

Apokalipsis dijo... Hola, verificaste que ests parametrizando a un DLL de Crystal 8.0 Tambien entre versiones hay diferencias... saludos 10:39 AM

Miguel Angel dijo... Hola amigo veo que eres un trome con crystal, sabes este es mi problema y creo que de la mayoria, lo que pasa es que cuando cargo mi reporte en mi maquina carga rapido pero cuando llevo el instalador(proyecto) en otra maquina se demora en cargar y veces se cuelga la maquina. estoy utilizando CR 8.5 y la programacin vb 6.0. Este es mi mail: sibernetiko@hotmail.com espero tu respuesta. Que la necesito. Gracias de antemano. 4:49 PM

Apokalipsis dijo... Miguel angel, eso de llevarlo a otra mquina me suena sospechoso, ya revisaste que tienes acceso al servidor de base de datos (utiliza un ping -ip servidor-) y otra cosa puede ser que tu instalacin en la otra mquina tenga algn detalle... Por otro lado, si el query es muy grande, te recomendara que elimines ese detalle con algo ms sencillito sale? Saludos PD. Trome = ?

En Per se utiliza como hbil no? Jejeje gracias por el cumplido y por entrar al blog. PD2: Para aquellos que ya migraron de Crystal 8.5 a otras versiones, les recomiendo levantar un Reporting Services de Microsoft (hay uno gratis en el express) y pro ahi hay unos manuales para exportar los reportes de crystal a RDL. Saludos 4:08 PM

Annimo dijo... Se me presenta el siguiente error, no se si alguien pueda ayudarme: The Error Message was: Server has not yet been opened.from: Seagate Crystal Reports ActiveX Designer es una aplicacion en asp. 6:55 PM

Annimo dijo... como se llaman las dll de crystal porque no las encuentro en mi maquina funciona el reporte pero cuando lo llevo al servidor de produccion ya no funciona, podrias ayudarme por favor. 5:56 PM

Apokalipsis dijo... p2sSQL.dll Ahora bien, una solucin, la mas extrema pero te quitas el problema, es instalar Crystal Reports en el servidor. saludos.

12:46 PM

Luis Lopez dijo... Ni idea como, no tengo experiencia con PHP, pero como le hago para que corra? Tengoun Win2003 con IIS. Asi de facil Copie el codigo, copie mi reporte pero da error, quien se encanga de enterder el PHP, le tengo que poner alguna aplicacion? Es mi codigo VB6 un CR8 y access97. No tiene gran ciencia. Con Crystal no tengo problemas. Saludos y Gracias 2:10 PM

Luis Lopez dijo... Ya pude ejecutarlo, pero me sale una pagina en blanco. Debe tener algo instaldo el servidor, como algo para convertir en pdf? un cr WEB? 2:42 PM

Apokalipsis dijo... Si dices que ya corre y solo pusiste el codigo que yo menciono, te recomiendo que leas algunos de lso comentarios donde establecen como hacer el pase de parametros de acceso. saludos y espero tus comentarios EJ.

// EMPIEZA CODIGO $creport->Database->LogOnServer("p2sodbc.dll", "NombreServidor(DSN)", "MombreBaseDatos", "NombreUsuario", "Password"); // TERMINA CODIGO 2:52 PM

Annimo dijo... Buenas.... Ojala me puedan Ayudar..... Tengo un reporte que en tiempo de diseo lo conecto a la bd a travs de ODBC, y en la previsualizacin muestra la informacin y bien. La cuestin esta con el cdigo para para que se genere sin activar en Crystal Report "Save Dat With Report", me presenta el siguiente error Server has not yet been opened El codigo que utilizo es el siguiente: --- Inicio Codigo -----$COM_Object = "CrystalRunTime.Application"; $my_report = "C:/test_dat.rpt"; $my_pdf = "C:/test.pdf"; $crapp= New COM($COM_Object) or die("Unable to Create Object"); $creport = $crapp->OpenReport($my_report, 1); //$creport->Database->Tables[1]>SetLogOnInfo("SVRCOMUL","DMS_MULTIDROGAS","Wcmc","M0nter1a"); //$creport->Database->LogOnServer("p2sodbc.dll", "DMS",

"DMS_MULTIDROGAS", "admingral", ""); $creport->ExportOptions->DiskFileName=$my_pdf; $creport->ExportOptions->PDFExportAllPages=true; $creport->ExportOptions->DestinationType=1; // Export to File $creport->ExportOptions->FormatType=31; // Type: PDF

$strSelRegs=""; $creport->RecordSelectionFormula = $strSelRegs ; $creport->ReadRecords(); // attention! $creport->Export(false); ----- fin codigo -----He utilizado el LogOnServer y LogInfo pero sigue mostrando lo mismo agradezco si pueden darme una mano. 4:21 PM

Apokalipsis dijo... Encontr algo parecido en la direccin http://www.nabble.com/PHP-and-Crystal-Reports-td23308716.html Nunca export directamente a pdf. Sin embargo, veo que tienes comentadas las lneas de logonserver y logoninfo, esto es bsico para aperturar la conexin, y parece estar relacionado con el error que te sale. saludos y buena suerte 10:06 AM Publicar un comentario

Вам также может понравиться