Post on 05-Jul-2015
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 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 prácticas y ligeras como un frente php conmysql, 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 quitaría mucha carga a los programadores y pasaríamos 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
contraseña.
- 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 loscampos añadidos, 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;
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 2/17
//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 agradecería 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 :)
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 3/17
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 español!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 prácticas 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 quitaría mucha carga a los programadores y pasaríamos 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
contraseña.
- 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
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 4/17
campos añadidos, 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 alservidor 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 agradecería sin embargo que si encuentran como meterle la info de usuario y
password, la expongan aqui como comentario...
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 5/17
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 español!
Jorge Baroudi's Blog
-Como si no tuviera nada que hacer-
Publicadas por Apokalipsis a la/s 2:19 PM
Etiquetas: PHP
27 comentarios:
Anónimo dijo...
Compañero estoy utilizando su codigo, pero presento problemas con
esta linea de error "Source: Seagate Crystal Reports ActiveX DesignerDescription: 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
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 6/17
Apokalipsis dijo...
Hola mi estimado jolutos@hotmail.com, la primera parte indica que no
encontró el DLL y eso sería cuestión de la ruta al DLL que pones en tuarchivo PHP, si puedes imprimir la ruta del DLL que le estás pasando
pudiera ser la primera parte de la solución. 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
búsqueda es en cuanto a un error de exportación, habría que ver si lo
estás exportando a CSV o alguno que para esa versión todavía 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 más común.
Saludos.8:16 AM
Anónimo 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 dedistribución 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
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 7/17
de las rutas de la dll.
Espero me pueda ayudar, muchas gracias por su colaboración.
P.D: tengo instalado CR 8.0
3:20 PM
Anónimo dijo...
Perdón 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 fueraun error por no manejar una ruta correcta al DLL, te importaría pegar
algo de tu código?
La otra cuestión, si es un problema de licencia vencida ya ni con la ruta
correcta la hacemos :(
saludos y espero tu respuesta.
9:35 PM
Anónimo 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
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 8/17
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 configuración de la información 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.
Además, es importante porque el reporte casi siempre lo construimos
con información de login de algún servidor de pruebas. Y en la puesta a
punto, es mejor utilizar algún archivo de configuración para adaptarlo a
las condiciones donde se pondrá en producción 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...
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 9/17
Hola Norman, no he podido enviar parametros a un reporte de crystal
reports, aunque infiero que se hace a través del ReportFormula no lo he
probado, te la debo mi estimado.
Saludos.
2:57 PM
Anónimo 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
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 10/17
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
Anónimo 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 clásico en una instalación de crystal
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 11/17
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 específica del
servidor web y trata de darle la ruta completa en el LogOnServer.
El 90% de los problemas parecen ser la ubicación de DLLs y los permisosde acceso al servidor.
saludos
1:03 PM
Apokalipsis dijo...
Otra cosa que se me ocurre es que como te estás conectando por ODBChay que checar que hayas creado y probado bien la conexión 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
Anónimo dijo...
Hola, estoy usando MySQL y PHP para enlazar con Crystal 8. He probado
varios códigos, todos se reducen básicamente 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
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 12/17
Apokalipsis dijo...
Hola, verificaste que estés 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 elinstalador(proyecto) en otra maquina se demora en cargar y veces se
cuelga la maquina.
estoy utilizando CR 8.5 y la programación 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 máquina 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 instalación en la otra
máquina tenga algún detalle...
Por otro lado, si el query es muy grande, te recomendaría que eliminesese detalle con algo más sencillito sale?
Saludos
PD. Trome = ?
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 13/17
En Perú se utiliza como hábil no?
Jejeje gracias por el cumplido y por entrar al blog.
PD2: Para aquellos que ya migraron de Crystal 8.5 a otras versiones, lesrecomiendo 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
Anónimo 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
Anónimo 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 solución, la mas extrema pero te quitas el problema, es
instalar Crystal Reports en el servidor.
saludos.
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 14/17
12:46 PM
Luis Lopez dijo...
Ni idea como, no tengo experiencia con PHP, pero como le hago paraque 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, terecomiendo que leas algunos de lso comentarios donde establecen como
hacer el pase de parametros de acceso.
saludos y espero tus comentarios
EJ.
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 15/17
// EMPIEZA CODIGO
$creport->Database->LogOnServer("p2sodbc.dll",
"NombreServidor(DSN)", "MombreBaseDatos", "NombreUsuario","Password");
// TERMINA CODIGO
2:52 PM
Anónimo dijo...
Buenas.... Ojala me puedan Ayudar.....
Tengo un reporte que en tiempo de diseño lo conecto a la bd a través
de ODBC, y en la previsualización muestra la información y bien.
La cuestión esta con el código 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",
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 16/17
"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 dirección
http://www.nabble.com/PHP-and-Crystal-Reports-td23308716.html
Nunca exporté directamente a pdf. Sin embargo, veo que tienes
comentadas las líneas de logonserver y logoninfo, esto es básico para
aperturar la conexión, y parece estar relacionado con el error que te
sale.
saludos y buena suerte
10:06 AM
Publicar un comentario
5/5/2018 Cargando Crystal Reports 8 - slidepdf.com
http://slidepdf.com/reader/full/cargando-crystal-reports-8 17/17