Conectasr vfp 6 con crystal reports 2008

768 views
Skip to first unread message

alexfox

unread,
Feb 28, 2009, 3:29:55 PM2/28/09
to Mundo Visual FoxPro
Hola.

Quisiera saber si me pueden explicar los pasos a seguir para realizar
la conexion de vfp 6 con crystal reports 2008 (paso por paso, porque
la verdad no tengo ningun conocimiento sobre ello) y como puedo
visualizar (si es posible) el reporte dentro de un formulario.

De antemano agradesco la ayuda, saludos.

TurbiSoft

unread,
Mar 1, 2009, 9:00:21 AM3/1/09
to Mundo Visual FoxPro
Saludo, No puedes trabajar CR2008 con foxpro, porque solo hasta la
version 11.5 soporta el RDC (Report Design Component), que es el
control que manejabamos desde Foxpro.

Busca en Google que hay mucha informacion de foxpro con CR, aca te
paso un codigo de ejmplo de como visualizar un reporte en un
formulario, esto es para la version 11 de CR:

************************************
* Turbi, Ejemplo de Foxpress del 2005
* 03-12-2008
*************************************
Public loCR,loRpt As Object
loCR= Createobject("CrystalRuntime.Application.11")

** Abre el reporte y guarda una referencia en ‘loRpt’.
If File("Crystal_Facturas.RPT")
loRpt= loCR.OpenReport(Fullpath("Crystal_Facturas.RPT"))
Else
Wait Window "No Existe!!, Cancelando la ejecucion..."
Return
Endif

Select
mfactura.no_factura,mfactura.fecha,mfactura.expediente,mfactura.valor,mfactura.valor_ppag,;
Count(mfactura.no_factura) As facturas,
mpacientes.nombres,mpacientes.apellidos;
From mpacientes INNER Join mfactura ;
On mpacientes.expediente = mfactura.expediente;
Group By mpacientes.expediente;
Order By mpacientes.expediente,mfactura.no_factura ;
Into Cursor tmpFacturas

Select tmpFacturas

** Crea nombre para tabla temporal que va a estar
** ubicada en la carpeta TEMP de Windows.
lcTabla= Addbs(Getenv("TEMP"))+ Sys(3)+ ".DBF"
*lcTabla= Addbs(Getenv("TEMP"))+ "tmpTurbi"+ ".DBF"
Copy To (lcTabla) Type Fox2x As 850

** Cambia la ubicación de la tabla en el reporte.
loRpt.Database.Tables(1).Location= lcTabla

** Descarta los datos que se hayan grabado con el reporte.
If loRpt.HasSavedData
loRpt.DiscardSavedData()
Wait Window "Tiene Datos Guardados"
Endif

* Otras dos metodos para configuar pagina y seleccionar printer son:
* PrinterSetup() y SelectPrinter()
*loRpt.SelectPrinter()
*loRpt.PrinterSetup()

** Imprime el reporte con los datos de la nueva ubicación.
loRpt.PrintOut(.T.)

* Si no desea que aparezca la ventana de diálogo, el método PrintOut()
* tiene cinco parámetros, de los cuales el primero nos permite indicar
si
* deseamos que muestre o no la ventana de diálogo mientras que el
segundo permite especificar el número de copias,
* así tendríamos que…
* loRpt.PrintOut(.F.,2)


** Muestra el diálogo de exportación para el reporte.
loRpt.Export(.T.)

* Vista Previa
oForm = Createobject("vista_previa",loRpt) && FULLPATH
("Crystal_Facturas.RPT")
oForm.Show

** Borra la tabla temporal.
Delete File (lcTabla)
Set Default To \turbisoft
Release loCR,loRpt

Return

** Definición de la clase del form de vista previa.
Define Class vista_previa As Form
Top = 0
Left = 0
Height = 288
Width = 480
DoCreate = .T.
Caption = "Vista previa"
MinButton = .F.
WindowType = 1
Name = "vista_previa"
Comment ="Vista previa de reporte Crystal Reports"

** Se agrega el CrystalReports10.ActiveXReportViewer.1
** Mofificado para la version 11.5
Add Object oleCRViewer As OleControl With ;
OleClass = "CrystalReports115.ActivexReportViewer.1", ;
Top = 0, ;
Left = 0, ;
Height =288, ;
Width = 480, ;
Name = "oleCRViewer"

Procedure Error
Lparameters nError, cMethod, nLine
If nError != 1440
DoDefault()
Endif
Endproc


Procedure Resize
Thisform.oleCRViewer.Height = This.Height
Thisform.oleCRViewer.Width = This.Width
Endproc

Procedure Init
Lparameter toRpt
Thisform.WindowState = 2
Thisform.WindowType = 1

** Se pasa el objeto Report a la propiedad ReportSource
** del CR Viewer.
This.oleCRViewer.ReportSource= toRpt
** Se muestra el reporte.
This.oleCRViewer.ViewReport()
Endproc

Procedure oleCRViewer.Init
** Muestra el botón de exportar.
This.EnableExportButton= .T.
This.EnableProgressControl= .T.
This.enablestopButton =.T.
This.EnableCloseButton =.T.
This.EnableExportButton =.T.
This.EnablePopupMenu =.T.
This.EnableProgressControl =.T.
This.enableAnimationCtrl =.T.
This.enableHelpButton =.T.
This.enableSearchControl =.T.
This.enableselectExpertButton =.T.
This.EnableZoomControl = .T. && Zoom
This.Zoom(100)
** Oculta el treeview.
This.DisplayGroupTree= .F.
This.DisplayToolbar = .T.
This.EnablePrintButton = .T. &&Imprime informe
This.EnableRefreshButton = .T. &&Acctualizar
* This.Height = Thisform.Height
* This.Width = Thisform.Height
this.Visible = .T.
*!* *** nuevos parametros
this.EnableInteractiveParameterPrompting = .T.
*!* * This.clisButtonClicked =.F.
Endproc
Enddefine

Yvan GMAIL

unread,
Mar 1, 2009, 9:08:25 AM3/1/09
to mundovis...@googlegroups.com
Asi programo con Crystal Report 7

XREPORTE = CREATEOBJECT('Crystal.CrystalReport')
XREPORTE.WindowState = 2
XREPORTE.WindowShowZoomCtl = .T.
XREPORTE.WindowShowPrintSetupBtn = .T.
XREPORTE.WindowShowPrintBtn = .T.
XREPORTE.WindowShowExportBtn = .T.
XREPORTE.WindowShowSearchBtn = .T.

Select MUCURSOR_CON_DATA
copy to _TEMPORAL.DBF FOX2X
XReporte.ReportFileName = 'CTMV0211.RPT'
XReporte.DataFiles(0) = "_TEMPORAL.DBF"
XReporte.WindowTitle = "Escala de Tickets O.C. Nº " + L_ORDPRO +
L_CORCON
XReporte.Action = 1


Yvan Carranza
http://groups.google.com.pe/group/mundovisualfoxpro

alexfox

unread,
Mar 2, 2009, 7:22:03 PM3/2/09
to Mundo Visual FoxPro
Hola.

Gracias a ambos por las respuestas, sin embargo la verdad es que jamas
he utilizado el crystal reports (ya descargue la version 11) y de
visual fox se muy poco, se podria decir que lo basico, entonces he
tratado de ejecutar sus ejemplos pero no se me funcionan, en el
primero me marca error en la linea:

loCR= Createobject("CrystalRuntime.Application.11")

y en el segundo en la linea:

XREPORTE = CREATEOBJECT('Crystal.CrystalReport')

no se que sea lo que me falta agregar para que no me marque el error,
si me lo pudieran explicar de una manera mas basica (si no es mucho
pedir).

Ahora he leido que la conexion se puede hacer mediante odbc, pero no
se si la que hize este bien.

Saludos y espero me puedan ayudar.

On 1 mar, 08:08, "Yvan GMAIL" <yvan.carra...@gmail.com> wrote:
> Asi programo con Crystal Report 7
>
> XREPORTE =  CREATEOBJECT('Crystal.CrystalReport')
> XREPORTE.WindowState = 2
> XREPORTE.WindowShowZoomCtl = .T.
> XREPORTE.WindowShowPrintSetupBtn = .T.
> XREPORTE.WindowShowPrintBtn = .T.
> XREPORTE.WindowShowExportBtn = .T.
> XREPORTE.WindowShowSearchBtn  = .T.
>
>   Select MUCURSOR_CON_DATA
>   copy to _TEMPORAL.DBF FOX2X
>   XReporte.ReportFileName = 'CTMV0211.RPT'
>   XReporte.DataFiles(0)   = "_TEMPORAL.DBF"
>   XReporte.WindowTitle    = "Escala de Tickets O.C. Nº " + L_ORDPRO +
> L_CORCON
>   XReporte.Action = 1
>
> Yvan Carranzahttp://groups.google.com.pe/group/mundovisualfoxpro
>
>
>
> ----- Original Message -----
> From: "alexfox" <klou...@yahoo.com.mx>
> To: "Mundo Visual FoxPro" <mundovis...@googlegroups.com>
> Sent: Saturday, February 28, 2009 3:29 PM
> Subject: [Mundo Visual FoxPro] Conectasr vfp 6 con crystal reports 2008
>
> Hola.
>
> Quisiera saber si me pueden explicar los pasos a seguir para realizar
> la conexion de vfp 6 con crystal reports 2008 (paso por paso, porque
> la verdad no tengo ningun conocimiento sobre ello) y como puedo
> visualizar (si es posible) el reporte dentro de un formulario.
>
> De antemano agradesco la ayuda, saludos.- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

TurbiSoft

unread,
Mar 3, 2009, 2:55:54 PM3/3/09
to Mundo Visual FoxPro
Eso quere decir q no has registrado las librerias .DLL de crystal
report en Windows/system32.u

Solo la version Developer CR regsitra estas librerias, tienes q
hacerlo manual.

Voy a tratar de conseguiste un listado de los DLL que debes copiar en
la carpeta anteror:
craxdrt.dll
crviewer.dll
crqe.dll

alexfox

unread,
Mar 3, 2009, 5:18:15 PM3/3/09
to Mundo Visual FoxPro
Ok, ya he descargado los DLL y los copie en la carpeta "C:\WINDOWS
\system32", hay algo mas que se deba instalar o algo mas que hacer,
porque el error me sigue apareciendo.

alexfox

unread,
Mar 3, 2009, 7:21:26 PM3/3/09
to Mundo Visual FoxPro
he instalado y registrado las dll que mencionas, y buiscando en google
he leido que tambien es necesario registrar el archivo "crystl32.ocx",
sin embargo he tratado de registrarlo siguiendo el proceso anterior
pero me marca un error que dice: "Error en loadlibrary(ruta completa
de ubicacion del archivo) no se puede encontrar el modulo
especificado"

No se si sea debido a esto que aun no puedo solucionar el problema
original, sin embargo ya descargue 3 o 4 veces el archivo y sigo con
ese problema
> > crqe.dll- Ocultar texto de la cita -

TurbiSoft

unread,
Mar 3, 2009, 9:01:46 PM3/3/09
to Mundo Visual FoxPro
te voy a enviar algo a tu correo de yahoo, una especie de "RUNTIME" y
unos dll, de la version 11

alexfox

unread,
Mar 4, 2009, 11:52:56 AM3/4/09
to Mundo Visual FoxPro
Hola.

Gracias por el tiempo y la ayuda, espero tu correo, para ver si con
eso puedo solucionar mi problema, como ya habia mencionado no puedo
registrar el "crystl32.ocx" y cuando agrego un componente crystal
report viewer a mi formulario y lo ejecuto me dice que el objeto puede
estar dañado, no se si sea por el archvio que ya mencione que no he
podido registrar, pero ojala que con los dll que me envies se
solucione.

Saludos.

alex

unread,
Mar 4, 2009, 7:49:31 PM3/4/09
to Mundo Visual FoxPro
Hola.

Ya logre registrar el crystl32.ocx, pero aun sigo teniendo el mismo
mensaje de error.
> > unos dll, de la version 11- Ocultar texto de la cita -

Christian López Gómez

unread,
Mar 4, 2009, 11:07:47 PM3/4/09
to mundovis...@googlegroups.com
* Para ver en vista previa un reporte:


oCristalReport =
Createobject("crystal.crpe.application")

oRep = oCristalReport.OpenReport("C:\reporteventas.RPT")

oRep.Preview



2009/3/4 alex <klo...@yahoo.com.mx>



--
Atentamente.
Ing. Christian López Gómez
Jefe de Sistemas
MSN:   christi...@hotmail.com
          christi...@gmail.com

Depto. Sistemas
P.D. "Un buen programador nunca muere solo se pierde en un proceso"

alex

unread,
Mar 5, 2009, 3:00:31 PM3/5/09
to Mundo Visual FoxPro
Hola.

Termine descargando la version de prueba de crystal reports 11 release
2, y con esta version si puedo mandar imprimir mis reportes de crystal
reports, sin embargo quiero saber si es posible visualizar en reporte
ya sea en vista preeliminar o en vista de diseño (al estilo de modi
report de los reportes de vfp) pero que dichpo reporte se visualize
dentro del formulario.

On 3 mar, 20:01, TurbiSoft <vbscompu...@Hotmail.com> wrote:

TurbiSoft

unread,
Mar 5, 2009, 6:05:54 PM3/5/09
to Mundo Visual FoxPro
Hola. Alex,Todo el codigo para dar una vista previa a tu repote dentro
de un formulario, te lo adjunte en el primer mensaje que te envie,
claro debes previamente registrar el control activeX
CrystalReports115.ActivexReportViewer.1, en el menu Herramientas/
opciones de visual foxpro.

Coloca esta rutina en tu archivo de procedimiento general,solo tiene
que pasar el objeto Repore a la rutina, Te lo copio otra vez:

Public loCR,loRpt As Object
loCR= Createobject("CrystalRuntime.Application.11")

** Abre el reporte y guarda una referencia en ‘loRpt’.
If File("Crystal_Facturas.RPT")
loRpt= loCR.OpenReport(Fullpath("Crystal_Facturas.RPT"))
Else
Wait Window "No Existe!!, Cancelando la ejecucion..."
Return
Endif


Select
mfactura.no_factura,mfactura.fecha,mfactura.expediente,mfactura.valor,mfact­
ura.valor_ppag,;
Count(mfactura.no_factura) As facturas,
mpacientes.nombres,mpacientes.apellidos;
From mpacientes INNER Join mfactura ;
On mpacientes.expediente = mfactura.expediente;
Group By mpacientes.expediente;
Order By mpacientes.expediente,mfactura.no_factura ;
Into Cursor tmpFacturas


Select tmpFacturas


** Crea nombre para tabla temporal que va a estar
** ubicada en la carpeta TEMP de Windows.
lcTabla= Addbs(Getenv("TEMP"))+ Sys(3)+ ".DBF"
*lcTabla= Addbs(Getenv("TEMP"))+ "tmpTurbi"+ ".DBF"
Copy To (lcTabla) Type Fox2x As 850


** Cambia la ubicación de la tabla en el reporte.
loRpt.Database.Tables(1).Location= lcTabla


** Descarta los datos que se hayan grabado con el reporte.
If loRpt.HasSavedData
loRpt.DiscardSavedData()
Wait Window "Tiene Datos Guardados"
Endif


** Imprime el reporte con los datos de la nueva ubicación.
loRpt.PrintOut(.T.)


do CR_preview with loRpt && Paso el objeto Reporte como
paramero al procdedimiento




********************
Procedure CR_preview
********************
Lparameter oReporte
If Pcount()>0
* Vista Previa
oForm = Createobject("vista_previa",oReporte) && FULLPATH
("Crystal_Facturas.RPT")
oForm.Show
Else
Messagebox("No se recibio parametros del Reporte",48)
Return
Endif
Procedure Init
Lparameter toRpt
Thisform.WindowState = 2
Thisform.WindowType = 1
Thisform.BorderStyle = 3
Thisform.Refresh
** Se pasa el objeto Report a la propiedad ReportSource
** del CR Viewer.
This.oleCRViewer.ReportSource= toRpt
** Se muestra el reporte.
This.oleCRViewer.ViewReport()
Endproc

PROCEDURE activate
This.oleCRViewer115.Top = 0
This.oleCRViewer115.Left=0
This.oleCRViewer115.Height = Thisform.Height
This.oleCRViewer115.Width = Thisform.Height
endpro
Procedure oleCRViewer.Init
** Muestra el botón de exportar.
This.EnableExportButton= .T.
This.EnableProgressControl= .T.
This.enablestopButton =.T.
This.EnableCloseButton =.T.
This.EnableExportButton =.T.
This.EnablePopupMenu =.T.
This.EnableProgressControl =.T.
This.enableAnimationCtrl =.T.
This.enableHelpButton =.T.
This.enableSearchControl =.T.
This.enableselectExpertButton =.T.
This.EnableZoomControl = .T. && Zoom
*This.Zoom(100)
** Oculta el treeview.
This.DisplayGroupTree= .F.
This.DisplayToolbar = .T.
This.EnablePrintButton = .T. &&Imprime informe
This.EnableRefreshButton = .T. &&Acctualizar
This.Visible = .T.
*!* *** nuevos parametros
This.EnableInteractiveParameterPrompting = .T.
*!* * This.clisButtonClicked =.F.
Thisform.WindowState = 2
thisform.Width =1016
thisform.Height =615
This.Height = Thisform.Height
This.Width = Thisform.Height
This.top = 0
This.left =0
thisform.Resize()
Endproc

Procedure Resize
Thisform.oleCRViewer.Height = This.Height
Thisform.oleCRViewer.Width = This.Width
Endproc

Enddefine


P.D Intente enviarte el runtime, pero es muy grande, y no lo puede
adjuntar.
Suerte,
Luis turbi

alex

unread,
Mar 6, 2009, 11:44:49 AM3/6/09
to Mundo Visual FoxPro
Hola.

Gracias por el ejemplo, ya lo habia tratado de ejecutar pero la parte
de la vista previa no me funciona (como habia mencionado nunca habia
uisado crystal reports) y me marca un error en la parte del codigo
donde trato de hacer el enlace entre el objeto crystal activex report
viewer control 11.5 y mi reporte, la instruccion que utilizo para
tratar de enlazarlos es:

Thisform.oleCRViewer.ReportSource= "C:\REPORTE\INFORME.RPT"

el mensaje de error que me envia dice:

Codigo de error OLE 0x80020005:tipo incorrecto.

Entonces, el objeto que estoy utilizando esta equivocado o el error
esta en la instruccion de enlace??

Espero me puedan ayudar.

Saludos y gracias.

alex

unread,
Mar 6, 2009, 12:29:06 PM3/6/09
to Mundo Visual FoxPro
Hola

Por fin he logrado visualizar el reporte a traves de mi componente
crviewer, creo que las instrucciones eran:

loRpt= loCR.OpenReport( "informe.RPT")
thisform.oleCRViewer.ReportSource =loRpt
ThisFORM.oleCRViewer.viewreport

Gracias, ahora una pregunta mas:

¿Es posible tener una vista del reporte pero en modo de diseño?
obviamente al momento de estar ejecutando la aplicacion.
Es decir que en mi crviewer en momento de ejecucion pueda visualizar
los nombres de los campos que componen mi reporte.

Espero su respuesta.

Saludos, y gracias por la ayuda.
> > Luis turbi- Ocultar texto de la cita -

alex

unread,
Mar 6, 2009, 7:44:08 PM3/6/09
to Mundo Visual FoxPro
Hola

Continuando con las preguntas, alguien me puede explicar la forma en
la que se pueden pasar parametros de un formulario de visual fox a un
reporte de crystal reports, para que en base a esos parametros muestre
o no determinados campos del reporte.

Saludos.

On 6 mar, 11:29, alex <klou...@yahoo.com.mx> wrote:
> Hola
>
> Por fin he logrado visualizar el reporte a traves de mi componente
> crviewer, creo que las instrucciones eran:
>
> loRpt= loCR.OpenReport( "informe.RPT")
> thisform.oleCRViewer.ReportSource =loRpt
> ThisFORM.oleCRViewer.viewreport
>
> Gracias, ahora una pregunta mas:
>
> ¿Es posible tener una vista del reporte pero en modo de diseño?
> obviamente al momento de estar ejecutando la aplicacion.
> Es decir que en mi crviewer en momento de ejecucion pueda visualizar
> los nombres de los campos que componen mi reporte.
>
> Espero su respuesta.
>
> Saludos, y gracias por la ayuda.
>
> On 6 mar, 10:44, alex <klou...@yahoo.com.mx> wrote:
>
>
>
> > Hola.
>
> > Gracias por el ejemplo, ya lo habia tratado de ejecutar pero la parte
> > de la vista previa no me funciona (como habia mencionado nunca habia
> > uisadocrystalreports) y me marca un error en la parte del codigo
> > donde trato de hacer el enlace entre el objetocrystalactivex report
> > - Mostrar texto de la cita -- Ocultar texto de la cita -
Reply all
Reply to author
Forward
0 new messages