Beruflich Dokumente
Kultur Dokumente
PeseaquenoesungeneradordeinformesmuyconocidoenelmundoDelphi,esteeditordeinformes destacaporsusencillez(estenespaol)yquesobretodoesgratuito. SienalgoaventajaaQuickReportesenquepermitegenerarlosinformesenarchivosconextensinREP paraluegosercargadosdesdeDelphieinclusopodemosmodificarlosentiempodeejecuci n.Tampocoda lasexplosionesqueocasionaeleditorRavecuandoteequivocas,aunquehayquereconocerqueesun pocoraroenalgunascosas. DESCARGANDOELEDITOR Puededescargarsedeestapginaweb: http://reportman.sourceforge.net/indexes.html
DentrodelapartadoDescarganosllevaraotrapginadeSourceForgedondeseencuentralaversin2.9a
INSTALANDOELEDITOR LaventanadeinstalacinpermiteelegirelidiomaespaolysolohayqueirpulsandoelbotnSiguiente:
VeremosestospaquetesenlapartederechadeDelphi:
Pulsamoselpaqueterppack_del2007.bplconelbotnderechodelratnyseleccionamosInstall:
Consolohacerestoseinstalartodo.Sitodohaidocorrectamenteveremosestoenlapaletade componentes:
Pasemosaverelentornodetrabajodeesteeditor.
ELASPECTODELEDITOR Alejecutarporprimeravezeleditordeinformesvemosqueaparececompletamentepelado:
PulsamoselbotnNuevoymostraresteaspecto:
Lomejordetodoesqueseencuentraennuestroidioma.Dentrodeleditorpodemosdistinguirestaspartes: Barradeherramientassuperior
Lazonadetrabajo
Yaparecerestaventana:
SeleccionamosInterbaseExpressqueequivalerealmenteaunaconexinDBExpressalpulsarelbotn Configurar:
EnelnombredelaconexinleponemosAGENDA:
Entoncesvolveralapantallaanterioryconfiguramosdondeseencuentralabasededatos:
NohayqueolvidarponerlapropiedadSQLDialecta3.Probamoslaconexinpulsandoelbotn:
Acontinuacinnospediridentificarnos:
Ysitodohaidobiennosdiresto:
Volvemosalaprimerapantallayseleccionamoslaconexinquehemoscreado:
Loaadiralalistadeconexionesdisponibles:
AhoranosvamosalapestaaConjuntodedatosdelinformeparaelegirlastablasdelaquequeremos sacarlainformacin:
PulsamoselbotnNuevoconjuntodedatosylollamamosCONTACTOS:
Laventanacambiaraestaotra:
EscribimoslasentenciaSQLdelosdatosquenosvamosatraer:
PulsamosAceptaryalvolveraleditorveremosenlapestaaDatoslatablaquehemosvinculado:
Vamosapulsaresteiconoparaaadirunaetiquetaalinforme:
Unaveztenemoslaetiquetaseleccionadanosvamosalaizquierdaalinspectordeobjetosyenla propiedadtextoescribimosLISTADODECONTACTOS:
Unadelascosasrarasquehaceesteeditoresquealinsertarunaetiquetaledaunanchurayalturamuy pequea.Tenemosqueestirarlasiempre.Ascreamoselrestodeetiquetas:
Asquedaradespusdeinsertarlos:
Pulsamoselbotndevistapreviaparaverelinforme:
Aquencontramoselprimerinconveniente:
ParaqueselistentodoslosregistrostenemosquevincularlatablaCONTACTOSalinforme.Paraellonos vamosalapestaaEstructurayenlapropiedadCon.D.PrincipalseleccionamosCONTACTOS:
Ahorasisalebien:
Parapoderrealizarlaspruebasnecesitamosaadirlos componentesVCLReportyPDFReportqueseencuentranenelapartadoReportmandelapaletade componentes. AlpulsarelbotnImprimirpodemosrealizarunavistapreviasiestactivadoelcheckboxobienlanzarlo directamentealaimpresora: procedure TFContactos.BImprimirClick(Sender: TObject); begin VCLReport.Title := 'Listado de contactos'; VCLReport.Filename := ExtractFilePath(Application.ExeName) + 'contactos.rep'; VCLReport.Preview := VistaPrevia.Checked; VCLReport.Execute; end;
Seasumequelarutadelinformecontactos.repseencuentraenlamismacarpetaqueelejecutable.Sino esas,modificarlapropiedadFilenamecomocorresponda(lomejoresconfiguraloenunarchivoINI). ParaexportareldocumentoaPDFpodemoshacerlodedosformas.Obienutilizamoselcomponente PDFReport(recomendado): procedure TFContactos.BExportarPDFClick(Sender: TObject); begin // Mtodo 1 PDFReport.Title := 'Listado de contactos'; PDFReport.Filename := ExtractFilePath(Application.ExeName) + 'contactos.rep'; PDFReport.PDFFilename := ExtractFilePath(Application.ExeName) + 'contactos.pdf'; PDFReport.Execute; Application.MessageBox(PChar('Listado exportado correctamente:' + #13 + #13 + PDFReport.PDFFilename), 'Exportando', MB_ICONINFORMATION); end;
ObienelcomponenteVCLReport: procedure TFContactos.BExportarPDFClick(Sender: TObject); begin // Mtodo 2 VCLReport.Title := 'Listado de contactos'; VCLReport.Filename := ExtractFilePath(Application.ExeName) + 'contactos.rep'; VCLReport.SaveToPDF(ExtractFilePath(Application.ExeName) + 'contactos.pdf'); Application.MessageBox(PChar('Listado exportado correctamente:' + #13 + #13 + ExtractFilePath(Application.ExeName) + 'contactos.pdf'), 'Exportando', MB_ICONINFORMATION); end;
SielautorhacreadoelcomponentePDFReportsusrazonestendr.Tambinpodemosexportarloauna pginawebHTMLdeestemodo: procedure TFContactos.BExportarHTMLClick(Sender: TObject); begin VCLReport.Title := 'Listado de contactos'; VCLReport.Filename := ExtractFilePath(Application.ExeName) + 'contactos.rep'; VCLReport.SaveToHTML(ExtractFilePath(Application.ExeName) + 'contactos.html'); Application.MessageBox(PChar('Listado exportado correctamente.' + #13 + #13 + ExtractFilePath(Application.ExeName) + 'contactos.html'), 'Exportando', MB_ICONINFORMATION); end;
Laexportacinquehaceesbastantedecente:
AunqueEurekaLogmehadetectadoun falloenunprocedimientodeReportManagerquenoliberamemoria:
Habrquehaceralgoms? Exportarelarchivoatextoesalgosimilar:
Porlovistonoliberaelobjetopdfdriver.
procedure TFContactos.BExportarTXTClick(Sender: TObject); begin VCLReport.Title := 'Listado de contactos'; VCLReport.Filename := ExtractFilePath(Application.ExeName) + 'contactos.rep'; VCLReport.SaveToText(ExtractFilePath(Application.ExeName) + 'contactos.txt'); Application.MessageBox(PChar('Listado exportado correctamente.' + #13 + #13 + ExtractFilePath(Application.ExeName) + 'contactos.txt'), 'Exportando', MB_ICONINFORMATION); end;
Hayquereconocerqueaqunopuedehacermaravillas:
Tambinleocurrequenoliberaeste objeto:
Aunas,ambasexportacionesfuncionan bastantebien.Vamosconalgomsdifcil.
Tambintenemoslatablade ARTICULOS:
Yparalacabeceradelafacturaestala tablaFACTURAS:
YluegoestalatablaDETALLEparasu contenido:
Alfinalteacostumbras,peronohubiesevenidomalunabarradeestilosde fuentealestiloMicrosoft.Ahoravamosainsertarellogotipodelaempresautilizandoelbot n:
Teniendolaimagenseleccionada,nosvamosalinspector deobjetosyhacemosclicsobrelapropiedadImagen:
Elegimoslaimagenyluegolaajustamosunpoco:
CONFIGURANDOELORIGENDEDATOS Ahoravamosacomenzaraenlazardatosdetablas.Loquenecesitamosesseleccionarlabasededatosy crearlasconsultasdecabeceraydetalledelafactura. Lospasosparatraernoslainformacinsonlossiguientes: 1.SeleccionamosInformeConfiguracindedatos. 2.SeleccionamosInterbaseExpress. 3.PulsamoselbotnConfigurar. 4.AhorapulsamoselbotnAadeunaconexin 5.Nombredelaconexin:FACTURACION. 6.Configuramoslabasededatoscomohicimosenelart culoanterior:
9.NosvamosalapestaaConfiguracinde datosdelinformeypulsamoselbotnNuevoconjuntodedatos. 10.Nombredelalias:FACTURAS. 11.LeponemosdeSQL: SELECT FACTURAS.*,CLIENTES.NOMBRE AS NOMBRE, CLIENTES.DIRECCION AS DIRECCION, CLIENTES.POBLACION AS POBLACION, CLIENTES.PROVINCIA AS PROVINCIA, CLIENTES.CP,CLIENTES.CIF FROM FACTURAS LEFT JOIN CLIENTES ON FACTURAS.IDCLIENTE=CLIENTES.ID WHERE ID=1
SipulsamoselbotnMostrardatosnosmostrarlaprimerafactura(soloparaverquelaSQLescorrecta):
Despusdeterminarlaspruebashay quequitarlelacondicinWHERE. 12.IgualmentevamosaaadirlatablaDETALLE: SELECT DETALLE.*,ARTICULOS.NUMERO, ARTICULOS.NOMBRE FROM DETALLE LEFT JOIN ARTICULOS ON ARTICULOS.ID=DETALLE.IDARTICULO
MOSTRANDOLOSDATOSDELCLIENTE Paraenmarcarlosdatosdelclienteaadimosundibujosimpleconelbotn:
Locolocamosmsomenosas:
clientearrastrandoelcampoNOMBREdesdelapestaaDatos:
Ahoravamosatraernoselnombredel
Asnostraemoselrestodedatos:
Elpieestodavamssencillo.Solohayquetraerselabaseimponible,el importedelIVAyeltotaldelafactura:
18 junio 2010
El editor de informes Report Manager (3)
Continuandoconlafacturadelartculoanterior,vamosadarleformatoalosnmerosrealesyamodificarsu comportamientoentiemporealdesdeDelphi.TambinveremoscomoenviarparmetrosSQLdesdeDelphi alinforme. AJUSTARLOSDECIMALES AntesdecargarelinformeennuestroproyectodeDelphivamosatratardeadecentarlounpoco comenzandoporeldetalledeldocumento.Loprimeroqueapreciamosesqueeln merodedecimalessale comoledalagana:
Ahorasisalecomonosotrosqueremos:
Aligualqueelejemplodeloscontactostenemosel componenteVCLReportqueconfiguramosalpulsarelbotnImprimir: procedure TFImprimirFactura.BImprimirClick(Sender: TObject); begin VCLReport.Title := 'Factura'; VCLReport.Filename := ExtractFilePath(Application.ExeName) + 'factura.rep'; VCLReport.Report.Copies := StrToInt(NumCopias.Text); VCLReport.Preview := VistaPrevia.Checked; VCLReport.Execute; end;
Tambincontrolamoselnmerodecopiasdequeseimprimensegnloquetenemospuestoenelcampo NumCopias.Unamodificacinquelevamosahaceresqueimprimaenrojoyennegritaaquellosprecios superioresa1.000.EstolohacemoseneleventoBeforePrint(antesdeimprimir)delcomponente VCLReport: procedure TFImprimirFactura.VCLReportBeforePrint(Sender: TObject); var i: Integer; begin with VCLReport.Report do begin if FindComponent('TRpExpression9') is TRpExpression then begin if (FindComponent('TRpExpression9') as TRpExpression).IdenExpression.Value > 1000 then begin (FindComponent('TRpExpression9') as TRpExpression).FontColor := clRed; (FindComponent('TRpExpression9') as TRpExpression).FontStyle := 1; end; end; end; end;
ParapoderaccederalaclaseTRpExpressiondebemosaadirlaunidadrplabelitemalformulariodonde vamosaimprimir.Elnombrequebusco(TRpExpression9)noslodiceelmismoeditor:
Loquehacemosesinterceptarlojusto antesdeimprimirloysegnelvalorquevaaimprimirtomamoslaaccinquequeramos:
Comoantesdeimprimirlafacturayasabemossidebemosimprimir estaetiquetaono,podemoshacerlainvisiblesinutilizareleventoBeforePrint: procedure TFImprimirFactura.BImprimirClick(Sender: TObject); begin VCLReport.Title := 'Factura'; VCLReport.Filename := ExtractFilePath(Application.ExeName) + 'factura.rep'; VCLReport.Report.Copies := StrToInt(NumCopias.Text); VCLReport.Preview := VistaPrevia.Checked; if not Contado.Checked then with VCLReport.Report do if FindComponent('TRpLabel14') is TRpLabel then (FindComponent('TRpLabel14') as TRpLabel).FontColor := clWhite; VCLReport.Execute; end;
SinoestactivadoenlafacturaelCheckBoxdeContadoentonceslohacemosinvisible.Parahacerla invisibletambinlepodemosquitarleeltexto: if not Contado.Checked then with VCLReport.Report do if FindComponent('TRpLabel14') is TRpLabel then (FindComponent('TRpLabel14') as TRpLabel).Text := '';
Seabrirestaventana:
Paramandarleelparmetroalimprimir desdeDelphihacemosesto:
procedure TFImprimirFactura.BImprimirClick(Sender: TObject); begin VCLReport.Title := 'Factura'; VCLReport.Filename := ExtractFilePath(Application.ExeName) + 'factura.rep'; VCLReport.Report.Copies := StrToInt(NumCopias.Text); VCLReport.Preview := VistaPrevia.Checked; VCLReport.Report.Params.ParamByName('CCC').AsString := '1234-5678-441234567890'; VCLReport.Report.PrepareParamsBeforeOpen; VCLReport.Execute; end;
DebemosllamaralmtodoPrepareParamsBeforeOpenparaqueelinformesechupelosparmetrosque lemandamos:
AhoramodificamoslaSQLdeldetalledeeste modo: SELECT DETALLE.*,ARTICULOS.NUMERO, ARTICULOS.NOMBRE FROM DETALLE LEFT JOIN ARTICULOS ON ARTICULOS.ID=DETALLE.IDARTICULO WHERE PRECIO >= :PRECIOMINIMO
Siintentamoshacerlavistapreviaenelinformenosdiresto:
Paraprobarquevayabien,entramosde nuevoalparmetro,loponemosdetipomonedayconelvalor20:
Alhacerlavistapreviasolomostrarlaslneasde detallecuyoprecioesmayorde20: