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 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 responsa bilidad a algunos otros que tal vez ni s e 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 r iesgo 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 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.Applicat ion") or die ( "Error on load"); $creport = $crapp->Open Report("c:\\reporte .rpt", 1); //fomatType = integer 22=xls, 31=pdf etc $creport->Exp ortOptions->F ormatType = 31;

Cargando Crystal Reports 8

  • Upload
    pyggle

  • View
    657

  • Download
    7

Embed Size (px)

Citation preview

Page 1: Cargando Crystal Reports 8

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;

Page 2: Cargando Crystal Reports 8

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 :)

Page 3: Cargando Crystal Reports 8

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

Page 4: Cargando Crystal Reports 8

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...

Page 5: Cargando Crystal Reports 8

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?

[email protected]

5:44 PM

Page 6: Cargando Crystal Reports 8

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 [email protected], 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

Page 7: Cargando Crystal Reports 8

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 [email protected] por si tienes algo que me puedas

enviar sobre el tema.

Gracias..

3:42 PM

Apokalipsis dijo...

Hola [email protected], 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

Page 8: Cargando Crystal Reports 8

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...

Page 9: Cargando Crystal Reports 8

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 [email protected].

Saludos PHPEROS....

M@rcos

7:18 PM

Apokalipsis dijo...

Gracias M@rcos por el tip.

3:07 AM

Page 10: Cargando Crystal Reports 8

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

Page 11: Cargando Crystal Reports 8

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

Page 12: Cargando Crystal Reports 8

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: [email protected] 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 = ?

Page 13: Cargando Crystal Reports 8

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.

Page 14: Cargando Crystal Reports 8

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.

Page 15: Cargando Crystal Reports 8

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",

Page 16: Cargando Crystal Reports 8

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

Page 17: Cargando Crystal Reports 8

5/5/2018 Cargando Crystal Reports 8 - slidepdf.com

http://slidepdf.com/reader/full/cargando-crystal-reports-8 17/17