Documente Academic
Documente Profesional
Documente Cultură
Imprimir un Reporte
El imprimir el report es la funcin mas usada dentro del reporte, aqui est el cdigo para hacerlo desde VFP LOCAL oCR LOCAL oRpt oCR = CREATEOBJECT(CrystalRuntime.Application) oRpt = oCR.OpenReport(C:\Temp\Taz.RPT) IF oRpt.HasSavedData oRpt.DiscardSavedData() ENDIF oRpt.PrintOut() Es buena idea el descartar cualquier datos guardados con el reporte. El mtodo PrintOut le mostrar un dilogo Print al usuario. Si no quiere mostrar ste dilogo, enviele False como el primer parmetro.
Otros dos mtodos de inters son PrinterSetup( ) y SelectPrinter( ). PrinterSetup( ) le permite cambiar de impresora programticamente. SelectPrinter( ) muestra el dilogo de Print Setup.
Acceso a Datos
Es casi seguro que la ubicacin de los datos cambiar del momento de diseo a cuando se ejecute. Con el uso del objeto Database, la coleccin de tablas en la base de datos y el objeto DatabaseTable, usted puede cambiar la ubicacin del reporte. Los pasos exactos a seguir para accesar los datos depende del tipo de datos y el mtodo de acceso, ya sea directo, via ODBC, OLE DB. En general, usted necesita crear el objeto Database, luego usar la coleccin DatabaseTables para profundizar hasta cada uno de los objetos DatabaseTable. Note que las colecciones en Crystal Reports son basadas-en-1. Habr un objeto DatabaseTable para cada tabla en el reporte. El siguiente cdigo demuestra cada uno de estos mtodos. Acceso Directo Se puede usar Datos Directos directamente desde from Crystal Reports sin usar ODBC OLEDB. Fox 2x y Access son ejemplos de datos directos. En el caso de datos directos, la ubicacin y nombre de la tabla puede cambiar al momento de ejecucin. LOCAL LOCAL LOCAL LOCAL LOCAL oCR oRpt oDB ocDBT oDBT
* Obtenga una referencia a la coleccin DatabaseTables ocDBT = oDB.Tables() * Obtenga una referencia al objeto DatabaseTable para tabla 1 oDBT = ocDBT.Item(1) * Asigne la ubicacin oDBT.Location = "C:\EFox\Customer.DBF" oRpt.PrintOut()
Datos con ODBC Una vez tenga un DSN configurado, conectandose es muy sencillo LOCAL LOCAL LOCAL LOCAL LOCAL oCR oRpt oDB ocDBT oDBT
oCR = CREATEOBJECT("CrystalRuntime.Application") oRpt = oCR.OpenReport("C:\EFox\ODBC1.RPT") * Cree el objeto Database oDB = oRpt.Database() * Obtenga una referencia a la coleccin DatabaseTables ocDBT = oDB.Tables() * Obtenga una referencia al objeto DatabaseTable para la tabla 1 oDBT = ocDBT.Item(1) * Asigne la ubicacin * sta funciona para un DSN oDBT.SetLogOnInfo("TazODBCRuntime") IF oRPt.HasSavedData oRPT.DiscardSavedData() ENDIF oRpt.PrintOut()
XML Data
Crystal Reports usa el driver de ODBC CRXML para conectar a datos XML. Usted necesitar configurar un DSN para el acceso a datos. El siguiente cdigo demuestra como conectar a un fichero XML en tiempo de ejecucin. LOCAL LOCAL LOCAL LOCAL LOCAL oCR oRpt oDB ocDBT oDBT
oCR = CREATEOBJECT("CrystalRuntime.Application") oRpt = oCR.OpenReport("C:\EFox\XML1.RPT") * Cree el objeto Database oDB = oRpt.Database() * Obtenga una referencia a la coleccin DatabaseTables ocDBT = oDB.Tables() * Obtenga una referencia al objeto DatabaseTable para la tabla 1 oDBT = ocDBT.Item(1)
ADO Data
El Uso de datos ADO es un poco diferente que los mtodos anteriores. Por la razn de que ADO es un objeto mantenido en memoria, no hay un fichero fsico para que Crystal Reports use. En ste caso, cree un Recordset ADO y envielo a Crystal Reports. LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL oCR oRpt oDB ocDBT oDBT oConn oRS
*Designe la parte ADO oConn = CREATEOBJECT("ADODB.Connection") oConn.ConnectionString = "Provider=VFPOLEDB.1;Data Source=C:\eFox\Data\tastrade.dbc;Password=''" oConn.Open() oRS = CREATEOBJECT("ADODB.RecordSet") oRS.Open("Select * FROM Customer", oConn) oCR = CREATEOBJECT("CrystalRuntime.Application") oRpt = oCR.OpenReport("C:\EFox\ADO1.RPT")
* Cree el objeto Database oDB = oRpt.Database() * Obtenga una referencia a la coleccin DatabaseTables ocDBT = oDB.Tables() * Obtenga una referencia al objeto DatabaseTable para tabla 1 oDBT = ocDBT.Item(1) * Envie el RecordSet a Crystal Reports oDBT.SetDataSource(oRS) IF oRPt.HasSavedData oRPT.DiscardSavedData() ENDIF oRpt.PrintOut()