El editor de informes Report Manager (1)
PeseaquenoesungeneradordeinformesmuyconocidoenelmundoDelphi,esteeditordeinformes destacaporsusencillez(estenespaol)yquesobretodoesgratuito. SienalgoaventajaaQuickReportesenquepermitegenerarlosinformesenarchivosconextensinREP paraluegosercargadosdesdeDelphieinclusopodemosmodificarlosentiempodeejecuci [Link] lasexplosionesqueocasionaeleditorRavecuandoteequivocas,aunquehayquereconocerqueesun pocoraroenalgunascosas. DESCARGANDOELEDITOR Puededescargarsedeestapginaweb: [Link]
DentrodelapartadoDescarganosllevaraotrapginadeSourceForgedondeseencuentralaversin2.9a
[Link] pulsamosenlamismapginawebelbotnViewallfilesydescargamosestearchivo repporman_delphi_builder_2_9.zip:
INSTALANDOELEDITOR LaventanadeinstalacinpermiteelegirelidiomaespaolysolohayqueirpulsandoelbotnSiguiente:
INSTALANDOLOSCOMPONENTES CreamosunacarpetallamadaReportManagerdentrodelacarpeta: \CodeGear\RADStudio\5.0\Componentes\ Ydescomprimimosdentrodelamismaelarchivoquehemosdescargado: Repporman_delphi_builder_2_9.zip [Link]:
VeremosestospaquetesenlapartederechadeDelphi:
Pulsamoselpaqueterppack_del2007.bplconelbotnderechodelratnyseleccionamosInstall:
[Link] componentes:
Pasemosaverelentornodetrabajodeesteeditor.
ELASPECTODELEDITOR Alejecutarporprimeravezeleditordeinformesvemosqueaparececompletamentepelado:
PulsamoselbotnNuevoymostraresteaspecto:
[Link]: Barradeherramientassuperior
Contienelastpicasopcionesdeabriroguardararchivos,mostrarlavistaprevia,[Link] iconosparainsertarcomponentes:etiquetas,camposvinculadosatablas,formasgeom tricas,dibujosy [Link] nlosnecesitemos. Estructuradelinforme
[Link] Detalle [Link] aDatosdonde veremoslasvariablesglobalesquepodemosutilizar:
Lazonadetrabajo
[Link] deesteeditor,yaquecomoveremosmsadelantesepuedencrearinformesavanzadosporprogramacin interceptandoentiemporealloscomponentesaligualquehacemosconQuickReport. CREANDOUNINFORME Paraprobarquetodohaidobien,vamosacrearunpequeoinformeapartirdeunabasededatosde [Link] [Link] queconfundeporsusmltiplespantallas. SeleccionamosenelmensuperiorlasopcionesInformeConfiguracindedatos:
Yaparecerestaventana:
SeleccionamosInterbaseExpressqueequivalerealmenteaunaconexinDBExpressalpulsarelbotn Configurar:
AqutraecomoejemplolaconfiguracinaunabasededatosInterbasecuyaconexinDBExpressest configuradadentrodeDelphi7,peroloquevamosahacerescrearunanuevaconexi npulsandoeste botn:
EnelnombredelaconexinleponemosAGENDA:
Entoncesvolveralapantallaanterioryconfiguramosdondeseencuentralabasededatos:
[Link]:
Acontinuacinnospediridentificarnos:
Ysitodohaidobiennosdiresto:
Volvemosalaprimerapantallayseleccionamoslaconexinquehemoscreado:
Loaadiralalistadeconexionesdisponibles:
AhoranosvamosalapestaaConjuntodedatosdelinformeparaelegirlastablasdelaquequeremos sacarlainformacin:
PulsamoselbotnNuevoconjuntodedatosylollamamosCONTACTOS:
Laventanacambiaraestaotra:
EscribimoslasentenciaSQLdelosdatosquenosvamosatraer:
PulsamosAceptaryalvolveraleditorveremosenlapestaaDatoslatablaquehemosvinculado:
[Link]. Comoloquequierodisearesunlistado,tenemoselproblemadequesolotenemoslabandadedetalle. Parainsertarlabandadelacabeceraseleccionamos [Link] lasdosbandas:
Vamosapulsaresteiconoparaaadirunaetiquetaalinforme:
Unaveztenemoslaetiquetaseleccionadanosvamosalaizquierdaalinspectordeobjetosyenla propiedadtextoescribimosLISTADODECONTACTOS:
Unadelascosasrarasquehaceesteeditoresquealinsertarunaetiquetaledaunanchurayalturamuy [Link]:
ParacopiaretiquetasnopodemosutilizarlacombinacindeteclasCTRL+CyCTRL+V,hayquehacerlo conALT+CyALT+[Link]. Ahorainsertamosloscamposarrastrndolosdesdelapestaadedatosalabandadeldetalle:
Asquedaradespusdeinsertarlos:
Pulsamoselbotndevistapreviaparaverelinforme:
Aquencontramoselprimerinconveniente:
[Link] [Link]:
Ahorasisalebien:
EnelprximoartculoveremoscomocargaresteinformedesdenuestroproyectodeDelphias como [Link].
El editor de informes Report Manager (2)
Continuandoconestediscretodiseadordeinformes,vamosavercomoabrirelinformedesdenuestro proyectoenDelphi,haciendoquemuestrelavistapreviaoexportndoloaotrosformatoscomoPDF,TXTo [Link]. ABRIENDOELINFORMEDESDEDELPHI Continuandoconellistadodecontactosquecreamosenelart culoanterior,vamosacrearunnuevo proyectoenDelphiconesteformulario:
Parapoderrealizarlaspruebasnecesitamosaadirlos componentesVCLReportyPDFReportqueseencuentranenelapartadoReportmandelapaletade componentes. AlpulsarelbotnImprimirpodemosrealizarunavistapreviasiestactivadoelcheckboxobienlanzarlo directamentealaimpresora: procedure [Link](Sender: TObject); begin [Link] := 'Listado de contactos'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link] := [Link]; [Link]; end;
[Link] esas,modificarlapropiedadFilenamecomocorresponda(lomejoresconfiguraloenunarchivoINI). [Link] PDFReport(recomendado): procedure [Link](Sender: TObject); begin // Mtodo 1 [Link] := 'Listado de contactos'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link]; [Link](PChar('Listado exportado correctamente:' + #13 + #13 + [Link]), 'Exportando', MB_ICONINFORMATION); end;
ObienelcomponenteVCLReport: procedure [Link](Sender: TObject); begin // Mtodo 2 [Link] := 'Listado de contactos'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link](ExtractFilePath([Link]) + '[Link]'); [Link](PChar('Listado exportado correctamente:' + #13 + #13 + ExtractFilePath([Link]) + '[Link]'), 'Exportando', MB_ICONINFORMATION); end;
[Link] pginawebHTMLdeestemodo: procedure [Link](Sender: TObject); begin [Link] := 'Listado de contactos'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link](ExtractFilePath([Link]) + '[Link]'); [Link](PChar('Listado exportado correctamente.' + #13 + #13 + ExtractFilePath([Link]) + '[Link]'), 'Exportando', MB_ICONINFORMATION); end;
Laexportacinquehaceesbastantedecente:
AunqueEurekaLogmehadetectadoun falloenunprocedimientodeReportManagerquenoliberamemoria:
Habrquehaceralgoms? Exportarelarchivoatextoesalgosimilar:
Porlovistonoliberaelobjetopdfdriver.
procedure [Link](Sender: TObject); begin [Link] := 'Listado de contactos'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link](ExtractFilePath([Link]) + '[Link]'); [Link](PChar('Listado exportado correctamente.' + #13 + #13 + ExtractFilePath([Link]) + '[Link]'), 'Exportando', MB_ICONINFORMATION); end;
Hayquereconocerqueaqunopuedehacermaravillas:
Tambinleocurrequenoliberaeste objeto:
Aunas,ambasexportacionesfuncionan [Link].
CREANDOELINFORMEDEUNAFACTURA SupongamosquetenemosunabasededatosdeInterbasellamada [Link] CLIENTES(clicparaampliar):
Tambintenemoslatablade ARTICULOS:
Yparalacabeceradelafacturaestala tablaFACTURAS:
YluegoestalatablaDETALLEparasu contenido:
NosvamosaleditorReportManager, [Link] detalle,tenemosqueseleccionarInformeAadirCabeceradepginaeInformeAadirPiede pgina. [Link]( Insertar textoesttico)paraponerlosdatosdenuestraempresa:
Parapoderescribireltextoenunaetiquetatenemosquerellenarlapropiedad Textodelinspectorde objetos:
Yparaseleccionareltamaodelafuenteyelestilo(negrita,cursiva, subrayado)utilizamoslaspropiedadesqueseencuentranenlapesta aTexto:
Alfinalteacostumbras,peronohubiesevenidomalunabarradeestilosde [Link] n:
Esconvenientequeellogotiposeencuentrelamismacarpetaqueelarchivo [Link] ellogotipoledamosaesebotnyabrimosunrectnguloenelinforme:
Teniendolaimagenseleccionada,nosvamosalinspector deobjetosyhacemosclicsobrelapropiedadImagen:
Elegimoslaimagenyluegolaajustamosunpoco:
CONFIGURANDOELORIGENDEDATOS [Link] crearlasconsultasdecabeceraydetalledelafactura. Lospasosparatraernoslainformacinsonlossiguientes: [Link]. [Link]. [Link]. [Link] [Link]:FACTURACION. [Link] culoanterior:
[Link] seleccionadaycomprobamossiconectacorrectamente. [Link],cerramosestaventanayaadimoslaconexinreciencreadaenla ventanadondeestamos:
[Link] datosdelinformeypulsamoselbotnNuevoconjuntodedatos. [Link]:FACTURAS. [Link]: SELECT FACTURAS.*,[Link] AS NOMBRE, [Link] AS DIRECCION, [Link] AS POBLACION, [Link] AS PROVINCIA, [Link],[Link] FROM FACTURAS LEFT JOIN CLIENTES ON [Link]=[Link] WHERE ID=1
SipulsamoselbotnMostrardatosnosmostrarlaprimerafactura(soloparaverquelaSQLescorrecta):
Despusdeterminarlaspruebashay quequitarlelacondicinWHERE. [Link]: SELECT DETALLE.*,[Link], [Link] FROM DETALLE LEFT JOIN ARTICULOS ON [Link]=[Link]
LastablasdeclientesydeartculosnonecesitamostraerlasyaquelashemosvinculadoconLEFTJOINa lasconsultasdeFACTURASyDETALLE. [Link].
MOSTRANDOLOSDATOSDELCLIENTE Paraenmarcarlosdatosdelclienteaadimosundibujosimpleconelbotn:
Locolocamosmsomenosas:
clientearrastrandoelcampoNOMBREdesdelapestaaDatos:
Ahoravamosatraernoselnombredel
Asnostraemoselrestodedatos:
Siencualquiermomentoosequivocisdecampo ocomponenteyqueriseliminarlo,hayqueseleccionarelcampoypulsarCTRL+SUPR. Utilizandounaetiquetayuncampo,vamosaponerdebajodellogoelndefacturaylascabecerasdel detalle:
Osrecuerdoqueparacopiarcampos hayqueutilizarlacombinacindeteclasALT+CyALT+V. CREANDOELDETALLEYELPIEDELAFACTURA EldetalledelafacturayatienetodossuscamposenlatablaDETALLEporquehemosvinculadoconLEFT JOINelnmeroynombredelartculoquenoshacafalta:
Paraqueaparezcantodaslaslneasde [Link] aseleccionandolatabla DETALLEalinforme:
[Link],el importedelIVAyeltotaldelafactura:
Antesdeterminar,necesitamosfiltrareldetalleparaquenosalgaeldetalledetodaslasfacturas,s lodebe [Link] [Link]: [Link]=[Link] Simostramoslavistapreviadelafacturadebesaliresto:
Perocomotodossabemos,siemprenos obliganaaadircosasrarasenlafacturacomoimgenesentiemporeal,mostrardatosdecamposqueno [Link] culo. PruebasrealizadasenRADStudio2007.
18 junio 2010
El editor de informes Report Manager (3)
Continuandoconlafacturadelartculoanterior,vamosadarleformatoalosnmerosrealesyamodificarsu [Link] alinforme. AJUSTARLOSDECIMALES AntesdecargarelinformeennuestroproyectodeDelphivamosatratardeadecentarlounpoco [Link] merodedecimalessale comoledalagana:
Paradarformatoadosdecimalesseleccionamoslos camposPRECIO,PORIVA,IVAyTOTALLINEAyensupropiedad Formatoleponemos###,##0.00:
Ahorasisalecomonosotrosqueremos:
Lomismotenemosquehacerconlostotalesdel documento. MODIFICARELINFORMEENTIEMPOREAL UnadelascosasquesiempremehagustadodeQuickReportestenerlaposibilidaddemodificarentiempo realloscomponentesdelinformejustoantesdeenviarloalaimpresora. VamosaverloconunnuevoproyectoenDelphiconelformularioquevaaimprimirlafactura:
Aligualqueelejemplodeloscontactostenemosel componenteVCLReportqueconfiguramosalpulsarelbotnImprimir: procedure [Link](Sender: TObject); begin [Link] := 'Factura'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link] := StrToInt([Link]); [Link] := [Link]; [Link]; end;
Tambincontrolamoselnmerodecopiasdequeseimprimensegnloquetenemospuestoenelcampo [Link] [Link](antesdeimprimir)delcomponente VCLReport: procedure [Link](Sender: TObject); var i: Integer; begin with [Link] do begin if FindComponent('TRpExpression9') is TRpExpression then begin if (FindComponent('TRpExpression9') as TRpExpression).[Link] > 1000 then begin (FindComponent('TRpExpression9') as TRpExpression).FontColor := clRed; (FindComponent('TRpExpression9') as TRpExpression).FontStyle := 1; end; end; end; end;
ParapoderaccederalaclaseTRpExpressiondebemosaadirlaunidadrplabelitemalformulariodonde [Link](TRpExpression9)noslodiceelmismoeditor:
Loquehacemosesinterceptarlojusto antesdeimprimirloysegnelvalorquevaaimprimirtomamoslaaccinquequeramos:
LoscomponentesdeReportManagertienenla [Link] componenteeligeelcolorblanco: (FindComponent('TRpExpression9') as TRpExpression).FontColor := clWhite;
Estopuedesermuyinteresanteparamostraruocultarciertasetiquetasseg nlaspropiedadesdelafactura. Porejemplo,segnlaformadepagoalomejormeinteresamostrarlaetiquetadequesehapagadoal contado:
Comoantesdeimprimirlafacturayasabemossidebemosimprimir estaetiquetaono,podemoshacerlainvisiblesinutilizareleventoBeforePrint: procedure [Link](Sender: TObject); begin [Link] := 'Factura'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link] := StrToInt([Link]); [Link] := [Link]; if not [Link] then with [Link] do if FindComponent('TRpLabel14') is TRpLabel then (FindComponent('TRpLabel14') as TRpLabel).FontColor := clWhite; [Link]; end;
[Link] invisibletambinlepodemosquitarleeltexto: if not [Link] then with [Link] do if FindComponent('TRpLabel14') is TRpLabel then (FindComponent('TRpLabel14') as TRpLabel).Text := '';
Deestemodopodemoscontrolarsiseimprimenonolascuentasbancarias,losdistintostiposdeIVA,los [Link] expresiones,nohaynadacomoDelphiparameterlemanoalosdocumentos. ENVIARPARMETROSALINFORME
[Link] seleccionandolasopcionesInformeConfiguracindedatosyenelformularioqueaparecepulsamosel botnParmetros:
Seabrirestaventana:
PulsamoselbotnAadirunnuevo parmetroycomoqueremosenviarlelacuentabancarialeponemosdenombre CCC:
PulsamosAceptaryotravezAceptar [Link] parmetro:
Paramandarleelparmetroalimprimir desdeDelphihacemosesto:
procedure [Link](Sender: TObject); begin [Link] := 'Factura'; [Link] := ExtractFilePath([Link]) + '[Link]'; [Link] := StrToInt([Link]); [Link] := [Link]; [Link]('CCC').AsString := '1234-5678-441234567890'; [Link]; [Link]; end;
DebemosllamaralmtodoPrepareParamsBeforeOpenparaqueelinformesechupelosparmetrosque lemandamos:
Peroesqueademspodemosutilizar [Link] metroparael detalledelafacturallamadoPRECIOMINIMOparaquemuestresloaquellaslneasdedetallecuyoprecio rebaseelquelepasamoscomoparmetro:
AhoramodificamoslaSQLdeldetalledeeste modo: SELECT DETALLE.*,[Link], [Link] FROM DETALLE LEFT JOIN ARTICULOS ON [Link]=[Link] WHERE PRECIO >= :PRECIOMINIMO
Siintentamoshacerlavistapreviaenelinformenosdiresto:
Paraprobarquevayabien,entramosde nuevoalparmetro,loponemosdetipomonedayconelvalor20:
Alhacerlavistapreviasolomostrarlaslneasde detallecuyoprecioesmayorde20:
EnDelphilepasamoselparmetrocomohemos vistoantes: [Link]('CCC').AsString := '1234-5678-441234567890'; [Link]('PRECIOMINIMO').Value := 20; [Link]; [Link];
AunqueReportManagerpuedapareceruneditordeinformesalgosimplealprincipio,conformevamos [Link] ximoartculo veremoscomorealizarinformesavariasbandasycomosumarelcontenidodevariasdeellas.