Вы находитесь на странице: 1из 40

CriandoRelatrios

comPHP

PabloDallOglio

ovatec

CAPTULO1

IntroduoaoPHP

Persistirnaraivacomoapanharumpedaodecarvoquentecomaintenodeoatiraremalgum.semprequemlevantaapedraquesequeima.
Buda

Opresentecaptulorealizaumaintroduosobreasdiversasfunes,comandose
estruturasdecontrolebsicosdalinguagemPHP,quesopossivelmenteutilizados
aolongodolivro.Conheceremosasestruturasbsicasdalinguagem,suasvariveis
eseusoperadoresetambmumconjuntodefunesparamanipulaodearquivos,
dearrays,debancosdedados,dentreoutros.

OqueoPHP?
AlinguagemdeprogramaoPHP,cujalogomarcaapresentadanagura1.1,foi
criadanooutonode1994porRasmusLerdorf.NoincioeraformadaporumconjuntodescriptsvoltadoscriaodepginasdinmicasqueRasmusutilizavapara
monitoraroacessoaoseucurrculonainternet.medidaqueessaferramentafoi
crescendoemfuncionalidades,RasmustevedeescreverumaimplementaoemC,
quepermitiaqueaspessoasdesenvolvessemdeformamuitosimplessuasaplicaes
paraweb.RasmusnomeouessaversodePHP/FI(PersonalHomePages/FormsInterpreter)edecidiudisponibilizarseucdigonawebem1995paracompartilh-locom
outraspessoas,bemcomoreceberajudaecorreodebugs.

Figura1.1LogodoPHP.

Emnovembrode1997,foilanadaasegundaversodoPHP.Nessemomento,aproximadamente50mildomnios,ou1%dainternet,utilizavamPHP.Nomesmoano,
AndiGutmanseZeevSuraski,doisestudantesqueutilizavamPHPemumprojeto
acadmicodecomrcioeletrnico,resolveramcooperarcomRasmusparaaprimorar
oPHP.Paratal,reescreveremtodoocdigo,combasenoPHP/FI2,nascendoassimo
16

30

CriandoRelatrioscomPHP

Estruturasdecontrole
IF
Oumaestruturadecontrolequeintroduzumdesviocondicional,ouseja,um
desvionaexecuonaturaldoprograma.Casoacondiodadapelaexpressoseja
satisfeita,entoseroexecutadasasinstruesdoblocodecomandos.Casoacondionosejasatisfeita,oblocodecomandossimplesmenteignorado.Ocomando
podeserlidocomo.
:utilizadoparaindicarumnovoblocodecomandosdelimitadopor,caso

acondiodonosejasatisfeita.Podeserlidocomocasocontrrio.Autilizao
doopcional.
Nagura1.2,vejaumuxogramaexplicandoofuncionamentodocomando.Caso
aavaliaodaexpressosejaverdadeira,oprogramaparteparaaexecuodeum
blocodecomandos,casosejafalsa,parteparaaexecuodoblocodecomandos
dadapelo.

Figura1.2FluxodocomandoIF.

Exemplo:

Captulo1IntroduoaoPHP

51

Exemplo:

Resultado:

Manipulaodearrays
AmanipulaodearraysnoPHP,semdvida,umdosrecursosmaispoderosos
dalinguagem.Oprogramadorqueassimilarbemessaparte,termuitomaisprodutividadenoseudiaadia.IssoporqueosarraysnoPHPservemcomoverdadeiros
contineres, servindo para armazenar nmeros, strings, objetos, entre outros, de
formadinmica.Almdisso,oPHPnosofereceumagamaenormedefunespara
manipul-los,vistasaseguir.

Criandoumarray
Arrayssoacessadospormeiodeumaposio,comoumndicenumrico.Paracriar
umarray,podemosutilizarafuno.

ou

Outraformadecriarumarraysimplesmentelheadicionandovalorespormeioda
seguintesintaxe:

De qualquer forma, para acessar o array indexado, basta indicar seu ndice entre
colchetes:

CAPTULO2

Objetosebancosdedados

Pensar o trabalho mais difcil que existe.Talvez por isso to poucos se


dediquemaele.
HenryFord

Estecaptuloabordaraorientaoaobjetospormeiodeexemplosqueincluam
conceitosbsicoscomoavisibilidade,aherana,entreoutrostpicosimportantes
paraacontinuidadedaleituradolivro.Almdaorientaoaobjetos,estecaptulo
examinartambmotratamentodeexceeseoacessoabancosdedadosdemaneira
estruturadaetambmorientadaaobjetos,utilizandoabibliotecaPDO.

OrientaoaObjetos
Aorientaoaobjetosumparadigmadeprogramaoquerepresentaumalosoa
paraconstruodesistemas.Nolugardemodelarestruturasdedadoseconstruir
umsistemaformadoporumconjuntodeprocedimentos,comosefaziaemlinguagensestruturadas(Cobol,C,Clipper,Pascal),naorientaoaobjetosmodelamos
econstrumososistemautilizandoobjetos,quesoentidadesquetmatributos,
comportamento, relacionamentos e que representam uma viso de sistema mais
prximadomundoreal.
AorientaoaobjetosabordadacommaiorprofundidadenolivroPHPProgramando
comOrientaoaObjetos,domesmoautor,NovatecEditora.

Introduo
Aotrabalharmoscomaorientaoaobjetos,fundamentalentenderoconceitode
classeseobjetos.Umaclasseumaestruturaestticaquedeneumtipodedados.
Umaclassepodeconteratributos(variveis)etambmfunes(mtodos)paramanipularessesatributos.Nesteexemplo,declaramosaclassecomquatroatributos.
Osatributossovariveisqueexistemdentrodocontextodeumobjeto.Declaramos
atributospormeiodapalavrachave,entreoutrasvistasmaisadiante.
59

71

Captulo2Objetosebancosdedados

Herana
Autilizaodaorientaoaobjetoseoencapsulamentodocdigoemclassesnos
orientamemdireoaumamaiororganizao.Masumdosmaioresbenefciosque
encontramosnautilizaodesseparadigmaoreuso.Apossibilidadedereutilizar
partesdecdigojdenidasoquenosdmaioragilidadenodiaadia,almde
eliminaranecessidadedeeventuaisduplicaesoureescritasdecdigo.
Quandofalamosemherana,aprimeiraimagemquenosaparecenamemriaa
de uma rvore genealgica com avs, pais, lhos e as caractersticas transmitidas
geraoapsgerao.Oquedevemoslevaremconsideraosobreaheranaem
orientaoaobjetosocompartilhamentodeatributosecomportamentosentre
as classes de uma mesma hierarquia (rvore).As classes inferiores da hierarquia
automaticamenteherdamtodasaspropriedadesemtodosdasclassessuperiores,
chamadasdesuperclasses.
Esserecursotemumaaplicabilidademuitogrande,vistoquerelativamentecomum
termosdecriarnovasfuncionalidadesemsoftware.Aoutilizarmosaherana,em
vezdecriarmosumaestruturatotalmentenova(umaclasse),podemosreaproveitar
umaestruturaexistente,quenosforneaumabaseabstrataparaodesenvolvimento,
provendorecursosbsicosecomuns.
J criamos a classe , agora podemos aproveitar seu cdigo para criar classes
maisespeccascomo e ,comonodiagramaapresentado
nagura2.4.

Figura2.4Heranadeclasses.

92

CriandoRelatrioscomPHP

PDOPHPDataObjects
OPHP,emsuamaioria,umprojetovoluntriocujoscolaboradoresestodistribudosgeogracamenteaoredordetodooplaneta.Comoresultado,oPHPevoluiu
combaseemnecessidadesindividuaispararesolverproblemaspontuais,movidospor
razesdiversas.Porumlado,essascolaboraeszeramoPHPcrescerrapidamente,
poroutro,geraramumafragmentaodasexensesdeacessobasededados,cada
qualcomsuaimplementaoparticular,nohavendorealconsistnciaentreasinterfacesdelas(Oracle,MySQL,PostgreSQL,SqlServeretc.).
Em razo da crescente adoo do PHP, tornou-se necessrio unicar o acesso s
diferentes extenses de bancos de dados presentes no PHP.Assim surgiu o PDO
(PHPDataObjects)cujoobjetivoproverumaAPIlimpaeconsistente,unicando
amaioriadascaractersticaspresentesnasextensesdeacessoabancodedados.
OPDOnoumabibliotecacompletaparaabstraodoacessobasededados,uma
vezquenofazaleituranematraduodasinstruesSQL,adaptando-asaosmais
diversosdriversdebancosdedadosexistentes.Simplesmenteunicaachamada
demtodos,delegando-osasuasextensescorrespondentes,efazusodoquehde
maisrecenteemtermosdeorientaoaobjetospresentenoPHP5.
Paraconectarembancosdedadosdiferentes,anicamudananastringdeconexo.
Vejaaseguiralgunsexemplosnosmaisdiversosbancosdedados.
Banco
SQLite
FireBird
MySQL

Postgres

StringdeConexo

Para podermos utilizar o PDO, devemos ter habilitado no as bibliotecas


(drivers)deacessoaobancodedadosdenossaaplicao.NoLinux,habilitamosda
seguinteforma:

JnoWindows,habilitamosdaseguinteforma:

CAPTULO3

Bibliotecasutilizadas

Apreguiaamedoprogresso.Seohomemnotivessepreguiadecaminhar,noteriainventadoaroda.
MarioQuintana

Nestecaptulo,abordaremosasprincipaisbibliotecasutilizadasaolongodolivro.
Oobjetivoinicialconhecerasbibliotecasesuasdiversascaractersticas,sem,no
entanto,tratardiretamentedageraoderelatrios,queservistademaneirasegmentadanosprximoscaptulos.Dentreasbibliotecasutilizadas,veremosagerao
dearquivosnosformatosHTML,PDFeRTF,almdageraodegrcosgerenciais.

GeraonoformatoHTML
HTML(HyperTextMarkupLanguage)aprincipallinguagemparaformataode
pginasweb.Propostaoriginalmentenoinciodosanosde1990porTimBerners-Lee,
utilizadaparaproduzirdocumentosinterpretadospelosnavegadores.Alinguagem
permitecriardocumentosestruturadospormeiodeumaestruturasemnticacontendoelementoscomocabealhos,pargrafos,listas,links,imagens,entreoutrositens.Os
elementossoformadosportagsoumarcadoresdelimitadospelossmbolose.

Introduo
Sevocprogramaemalgumalinguagemparawebhalgumtempo,deveterpercebidooquantoaexibiodetagsHTMLdeixaocdigoconfusoepoucolegvel
quandotemosdeconcatenarexpressesquemesclamcdigoHTMLevariveisda
aplicaoPHP.
Aolongodestaseo,criaremosalgumasclassesvoltadasapresentaodeelementos
HTML.Oobjetivodessasclassessubstituirautilizaodastagspresentesnocdigo
HTMLporclasseseseusmtodos,podendoconstruirumapginaHTMLpormeio
deobjetos,emquecadaumdelesrepresentarumelementogrco(texto,imagem,
tabela), como na gura 3.1, na qual temos uma pequena pgina contendo alguns
elementos,comoumpargrafo,umboto,umaimagem,umatabela,entreoutros.
103

Captulo3Bibliotecasutilizadas

123

GeraonoformatoPDF
Nestaseo,estudaremoscomogerardocumentosnoformatoPDFemPHP.PDF
(PortableDocumentFormat)umformatodearquivoscriadopelaAdobeSystems
em1993, com o objetivo de permitir a representao de documentos de maneira
independentedesofware,hardwareousistemaoperacional.UmdocumentoPDF
contmumadescriocompletadeumlayoutdedocumentoxo,queincluielementos
textuais,fontes,imagensegrcos2D.Originalmenteproprietrio,oformatoPDF
foiocialmentepublicadocomoumpadroabertoem1998pelaISO(International
OrganizationforStandardization).Atualmentequalquerpessoapodeescreveraplicativos
quemanipulamarquivosnesseformato.OformatoPDFsuportadopordiversosaplicativoscomoAdobeReadereFoxitReaderemWindowseEvinceeKPDFemLinux.

138

CriandoRelatrioscomPHP

procuraexibirumagrandequantidadedetextopormeiodarepetiodastringteste
milvezes.Dessaforma,serocriadastrspginasdodocumento,contendoessastring,
comocabealhoeosrodaps.Agura3.13apresentaoresultadodoprograma.

Figura3.13ManipulaodecabealhoserodapsemPDF.

fpdf5.php

Captulo3Bibliotecasutilizadas

139

GeraonoformatoRTF
Nestaseo,estudaremoscomogerardocumentosnoformatoRTFemPHP.RTF(Rich
TextFormat)umformatodearquivospararepresentardocumentosdesenvolvido
pelaMicrosoftCorporationem1987.OobjetivodoformatodearquivosRTFeraser
utilizadocomoformato-padrodearquivosnosprodutosdaMicrosoft,bemcomo
permitirointercmbiodedocumentosentrediferentesplataformas.Foiutilizado
pelaprimeiravezcomopartedoMicrosoftWord3.Almdemanteroformato,a
MicrosofttemosdireitosdepropriedadeintelectualsobreopadroRTF.Talformato
suportadopelamaioriadoseditoresdetexto,comoWordPadeMicrosoftWordno
Windows,TextEditnoMacOS,almdoAbiWordeOpenOcenoLinux.

Introduo
ParagerardocumentosnoformatoRTFemPHP,utilizaremosabibliotecaPHPRtfLite
(http://phprtf.sf.net),queformadaporumconjuntodeclassescomoobjetivode
construir documentos no formato RTF. Essas classes abrangem a construo de
pginas,sees,cabealhos,rodaps,pargrafos,imagens,tabelas,entreoutrositens.
AbibliotecaPHPRtfLitenotemcomopr-requisitosextensesououtrasbibliotecas.Dessaforma,podeserutilizadaapartirdequalquerinstalaobsicaPHP.
Odesenvolvimentodessabibliotecarelativamenterecente(2007),entretantotem
demonstradoserconsistentecomaconstruodedocumentosemaplicaescomerciais.AbibliotecaPHPRtfLitedisponibilizadasobumalicenapermissiva(LGPL)
quepermiteseuusotantoparaaplicaeslivresquantoparaaplicaescomerciais.

Manipulaobsicadetexto
OobjetivodesteprimeiroexemplosobreautilizaodoformatoRTFparagerar
documentosdemonstraralgunsaspectossimples,comoaformataodetextos,
fontes,imagenselinks.
OexemploiniciacomarequisiosimplesbibliotecaRTFpormeiodafuno
.Logoaps,utilizamosomtodo ,queregistrarinternamenteomtododabiblioteca responsvelporcarregarautomaticamente
asclassesnecessriassemprequeestasforemrequisitadaspelaprimeiravez.Depois,
instanciamosumobjetodaclasse.

Captulo3Bibliotecasutilizadas

141

Depoisdevermosmaisesteexemplodeutilizaodomtodo,utilizaremos
omtodoparaadicionarumaimagemaodocumento.Essemtodorecebea
localizaodaimagemaserexibidanodocumento,umobjetoparadeniraformataodopargrafonoqualaguraserinseridaemaisdoisparmetrosparaindicar
alarguraeaaltura.Comoindicamossomentealargura(3cm),aalturacalculada
demaneiraproporcionalparamanteroaspectooriginaldagura.
Porltimo,inserimosumhyperlinknodocumentopormeiodomtodo,
querecebeoendereoquedesejamosreferenciar,ortulodetextoaserinserido,um
objetocontendoaformataodafonteeoutrocontendoaformataodopargrafo.
Agura3.14apresentaoresultadodoprograma.

Figura3.14ManipulaobsicadetextoemRTF.

rtf1.php

Captulo3Bibliotecasutilizadas

153

Geraodegrcos
Nestaseo,abordaremosacriaodegrcos.Grcosbuscamrepresentardeforma
visualvaloresnumricos,facilitandoacompreensopeloserhumano.Existemdiversostiposdegrcos,comocolunas,linhas,pizza,disperso,rea,radar,entreoutros.

Introduo
ParagerarmosgrcosemPHP,serutilizadaabibliotecaJPGraph(http://www.aditus.
nu/jpgraph).AbibliotecaJPGraphumabibliotecaorientadaaobjetos,construda
completamenteemlinguagemPHP.AbibliotecaJPGraphutilizadealgumasextensesdalinguagem,como,ou,entreoutras.importantenotar
queessasdependnciasgeralmentejsopartedasinstalaes-padrodalinguagem
PHPnasmaisdiversasplataformas,emrazodesuapopularidade.Abibliotecapode
serutilizadaparacriarumagrandediversidadedegrcos,comocolunas,linhas,
pizza,entreoutros.
AbibliotecaJPGraphdisponibilizadasobumalicenadupla.Paraodesenvolvimento
deaplicaeslivres,podeserutilizadasemcusto.Entretanto,paraodesenvolvimento
deaplicaescomerciais,umalicenaprossionaldeveseradquirida.

Captulo3Bibliotecasutilizadas

157

.Depois,sodenidasacor()eaespessura()decadauma

daslinhas.Porm,denidaapalavraquerepresentarcadaumadaslinhasdo
grconalegendapormeiodomtodo.
Aonal,ogrcoexibidononavegadorpormeiodomtodo.Agura3.20
apresentaoresultadodoprograma.

Figura3.20Geraodegrcosdemltiplaslinhas.

graph2.php

170

CriandoRelatrioscomPHP

Figura3.26Geraodegrcosdepizza3Dcomlinks.

graph8.php

CAPTULO4

Relatriostabulares

Sexistemdoisdiasnoanoemquenadapodeserfeito:umsechamaontemeooutro,amanh.Portanto,hojeodiacertoparaamar,acreditar,fazer
eprincipalmenteviver.
DalaiLama

Nestecaptulo,veremosaconstruodosprimeirosrelatriosenvolvendodiretamente
autilizaodebancodedados.Nestemomento,desenvolveremosrelatriostabulares,
querecebemessenomepelofatodeassemelharem-seaoformatodeumatabelaou
planilha.Noscaptulosseguintes,serodesenvolvidosrelatriosmaiselaborados,
comquebras,agrupamentos,totalizaesediferentesnveishierrquicos.

Basededadosdeexemplos
Apartirdestecaptulo,amaioriadosexemplosdesenvolvidosutilizardadosarmazenadosemumbancodedados.Parafacilitaradistribuioeainstalaodosexemplos,optamosporcriarumabasededadosemSQLite,queumbancodedadosno
formatodearquivosquesuportaalinguagemSQLeutilizaaextenso.db.Odriver
deacessoabancosdedadosSQLiteintegradoaoPHP,ouseja,nonecessria
ainstalaodesoftwareadicionalalgumparaofuncionamentodosexemplosaqui
desenvolvidos.Almdabasededadosnoformato.db,serdisponibilizadooscript
decriaodelacomonomeexemplos.sql.
Odiagramaapresentadonagura4.1representaaestruturadetabelasutilizadas
nosexemplosaolongodolivro.Atabela terumcadastrodepessoas.Cada
pessoaestarrelacionadaaumacidade.Essebancodedadosterregistrodevendas
realizadas.Cadavendarealizadaemumadeterminadadata()parauma
pessoa(),porumvendedor(),emumalial().Umavenda
compostadeitens.Atabela relacionaquaisprodutos(),quais
quantidadesdecadaproduto()equaisvalorespraticadosdecadaproduto
()integramumavenda.Atabelaregistraocadastrodeprodutos,contendo

172

176

CriandoRelatrioscomPHP

Figura4.2RelatrionoformatoTXT.

simples_txt.php

180

CriandoRelatrioscomPHP

Figura4.3RelatrionoformatoHTML.

simples_html.php

184

CriandoRelatrioscomPHP

formatamosascolunasepormeiodomtodo.
importanteressaltarqueessesclculostotalizadoresdevemserrealizadosantesda
formataodascolunas,umavezqueaformataodescaracterizaosdados,inuenciandodiretamenteosresultadosdeclculosmatemticos.
Depoisdetotalizarmoseformatarmosasvariveis,adicionamosasclulascontendo
osdadosaorelatriopormeiodomtodo.Utilizamosavarivelcomo
parmetrodomtodo.Avarivelindicarseasclulasexibidasapresentarocordefundoouno.Apsacriaodasclulas,alinhaquebradapormeio
domtodoeavarivelmudadecontedo(/).
Depoisdesairmosdo,afonteredenida(ArialBold10)eadicionamosuma
cluladetotal(Total)queocuparalarguracorrespondenteaquatrocolunasdedadosdorelatrio.Depois,adicionamosclulascontendoosdadostotais(
e , devidamente formatadas e alinhadas direita).Ao nal, o relatrio
PDF armazenado no arquivo output.pdf dentro da pasta app.output e um link
apresentadoaousuriopararealizardownloaddeste.Agura4.4representaoincio
dorelatriogerado.

Figura4.4RelatrionoformatoPDF.

simples_pdf.php

188

CriandoRelatrioscomPHP

depargrafo.Apscriarmosalinhacontendoosttulosdascolunas,utilizamoso
mtodoparacolorirofundodaprimeiralinhadorelatrio.
Antesdeiniciarmoso,percorrendoosdadosdorelatrio,criamosavarivel
decontrole (quecontrolaracordefundodalinhadosdados),asvariveis
totalizadorase,almdavarivel,querepresentaralinha
atualdorelatrio,oquenecessrioparaomtodo.
Dentro do , acumulamos as variveis totalizadoras, formatamos as colunas
e,conformeoformatomonetrio,edenimosqualseracorde
fundoutilizada,pormeiodavariveldecontrole.Alinhaqueterosdados
adicionadapormeiodomtodo.Depois,cadaumadascolunasresultantes
dabasededadosescritanatabelapormeiodomtodo.Posteriormente,
omtodoexecutadoparacoloriralinhadedadoscoma
cordenidapelavarivel .Aindadentrodo ,avarivel alterna
seuvalor(/)eavariveltemseucontedoincrementado.
Saindodo ,adicionamosmaisumalinhatabela,destavezparaapresentar
oresultadototal.Asprimeirasquatroclulasdatabelasomescladaspormeiodo
mtodo.NesseespaoserexibidootextoTotal.Aoladodaclula
contendootextoTotal,soexibidasasvariveiseformatadas
ealinhadasdireita.Posteriormente,alinhadetotalcoloridapormeiodomtodo
eutilizamosomtodoparaapresentar
bordasemtodaatabela.
Porm,orelatriosalvonoarquivo output.rtf,dentrodapasta app.output,eum
linkescritonatelaparaqueousuriorealizeodownloaddessearquivo.Agura4.5
representaoinciodorelatriogerado.

Figura4.5RelatrionoformatoRTF.

208

CriandoRelatrioscomPHP

Figura4.10Formulriodepersonalizaodorelatrio.

custom1.html

213

Captulo4Relatriostabulares

Depoisdeformaralinhacontendoosttulosdascolunas,percorremososdados
resultantespormeiodeumsobreavarivel.Paracadalinharesultante,
adicionamosumalinhatabela.Dentrodesselaodeiterao,percorremosascolunasselecionadaspelousurio()parasomenteadicionarlinha
dedadosrealmenteascolunasselecionadas.Nesteponto,denimosoalinhamento
dacolunacombasenainformaoarmazenadanovetor.Depoisdeadicionar
todasaslinhasresultantes,apresentamosatabelacomorelatriopormeiodomtododoobjeto.
Norelatrioaseguir,apresentadonagura4.11,podemosveroresultadodeumrelatriodepessoasemqueousurioselecionouvisualizarascolunascdigo,nome,
sexo,emailenomedacidade,ordenadaspelonomedapessoa,eestabeleceucomo
ltrosdorelatriosomentelistaraspessoascujonomecontmAna,sodosexo
FemininoeresidemnoestadodoRioGrandedoSul.

Figura4.11Resultadodaexecuodorelatrio.

CAPTULO5

Relatrioshierrquicosematriciais

Viverenfrentarumproblemaatrsdooutro.Omodocomovocoencara
quefazadiferena.
BenjaminFranklin

Nestecaptulo,abordaremosacriaoderelatrioshierrquicos,queapresentamas
informaesdivididasemquebrasesees,permitindototalizaesemdiferentes
nveis, e tambm relatrios matriciais, que apresentam a informao de maneira
sintetizada,utilizandooformatodeumamatrizcomomeiodevisualizao.

Introduo
Nocaptulo4,abordamosageraoderelatriostabulares.Nessesentido,foram
desenvolvidosrelatriossimples,comcontedoeestruturapredenidosemnvelde
programao,relatriosparametrizados,quepermitiamaousurioestabelecerltros
sobreosdadosaseremapresentados,relatrioscustomizados,quetambmpermitiam
aousurioselecionarcolunaseordenaese,porltimo,relatriosinterligados,que
permitiamaousuriorealizarsaltosentreumrelatrioeoutro.
Nestecaptulo,abordaremosacriaoeapresentaoderelatrioscontendoagrupamentosdeinformaes.Oobjetivodestecaptulodemonstrardequaisformas
podemosrealizaragrupamentosesumarizaessobreainformaopresentenobanco
dedadosnomomentodeserapresentadaaousurio.Dessaforma,ocaptuloser
divididoemduaspartes:relatrioshierrquicoserelatriosmatriciais.
Relatrios hierrquicos, muitas vezes conhecidos tambm como relatrios com
quebrasouagrupamentos,permitemapresentarainformaotabularemumnvel
detalhado,separadaemgruposdedadostambmconhecidoscomoquebras,permitindoaplicarfrmulastotalizadorasconformeonveldeagrupamentodesejado.
A caracterstica principal desse tipo de relatrio a segmentao da informao
conformeosgruposeatotalizaodosdadosapsaapresentaodelesdentrode
cadaagrupamento.
229

239

Captulo5Relatrioshierrquicosematriciais

Jasvariveis,earmazenamos
totaisdascolunasdepreodecusto,preodevendaequantidadeemestoquedentro
daquebradorelatrio,ouseja,acumulamosvaloresdentrodeummesmofabricante.Cadavezqueacolunadofabricantetrocadevaloreaquebratotalizada,essas
variveissoreinicializadas.Avarivelarmazenaroltimofabricante
(valoranteriordaquebra).Essavarivelcontrolaatrocadequebra.Dessamaneira,
semprequeacomparaodessavarivelcomocontedodacolunado
produtoatualresultaremumadiferena,teremosumatrocadegrupo(quebra).A
gura5.2apresentaoresultadodorelatrio.

Figura5.2RelatriocomumaquebraemPDF.

quebra_uma_pdf.php

254

CriandoRelatrioscomPHP

Figura5.4RelatriocomduasquebrasemPDF.

quebras_duas_pdf.php

Captulo5Relatrioshierrquicosematriciais

261

DuasdimensesnoformatoHTML
Nesseprimeirorelatriomatricial,serapresentadoumresumodevendasconformedoisagrupamentos(dimenses)dedados:vendedorems.Assim,aprimeira
dimensoserexibidanaslinhas(vendedor)eaoutra,nascolunas(ms),enquanto
nointeriordorelatrioserapresentadaaquantidadevendida.importanteressaltar
quecadacluladointeriordorelatriodeveserlidacomoumainterseodasduas
dimenses,quesovendedor(linhas)ems(colunas).Orelatrioapresenta,ainda,
duastotalizaes,sendoumanavertical,apresentandoototaldevendasdecadams,
eoutranahorizontal,apresentandoototaldevendasdecadavendedor.
Aideiageraldesserelatriotransmitidapelagura5.5,quenocontmexatamente
osmesmosdadosapresentadosnorelatrioquedesenvolveremos,masapenasuma
ideiaabstrata.Noladoesquerdodagura,constamosdadosdeorigemqueseroutilizadoscomobaseparaconfecodorelatriomatricial.Essesdadossoextradosda
basededadospormeiodeumsimplescomandoquelistaonomedovendedor,
omsemqueocorreuavendaeovalorvendido.Apartirdessesdados,chegamos
partedireitadagura,queexibeumrelatriomatricialdeduasdimensesjpronto.

Figura5.5Formaodeumamatrizcomduasdimenses.

Nesterelatrio,podemosobservarqueduascolunasdorelatrioforamselecionadas
comoagrupamentosoudimensesdorelatriomatricial:nomedovendedorems
davenda.Cadainformaodeagrupamentofoidispostaemumeixodiferentedo
relatrioresultante,sendoqueonomedovendedorfoiexibidoaolongodaslinhas,
enquantoomsderealizaodasvendas,aolongodascolunas.
importanteressaltarqueemumrelatriomatricialainformaodeagrupamento
apresentadademaneiradistinta,ouseja,tantoosnomesdosvendedoresquanto
osnomesdosmesessoapresentadosumanicavezemcadaclula.Nointeriordo

Captulo5Relatrioshierrquicosematriciais

Figura5.6RelatriocomduasdimensesemHTML.

matriz_duas_html.php

263

Captulo5Relatrioshierrquicosematriciais

273

Obs.:Aversosemcortesdessecdigoencontra-separadownloadnositedaeditora
Novatec.

QuatrodimensesnoformatoHTML
Nosdoisexemplosanteriores,foramapresentadosrelatriosmatriciaisqueexibiam
osdadosconformeduasdimenses:vendedorems.Osdoisprximosexemplosde
relatriosmatriciaismostraroasinformaesdevendasconformequatrodimenses:
lial,nomedovendedor,msdevendaesexodocliente.Duasdessasdimenses
(lialevendedor)serodispostasnaslinhaseasoutrasduas(msdavendaesexo
docliente),nascolunas.
Agura5.8procurademonstrar,demaneiraabstrata,aideiageraldosprximosdois
exemplos.importanteressaltarqueosdadoscontidosnessagurasoctciose
nocorrespondemaosdadospresentesnobancodedadosqueseroapresentados
noprximoexemplo.Emseuladoesquerdo,aguratemumatabelaquerepresenta
osdadosdeorigemtrazidospelaconsultaSQLrealizadanobancodedados.Depois
deseremprocessados,essesdadosresultamnamatrizdadireita,querepresentao
relatriomatricialresultante.

Figura5.8Formaodeumamatrizcomquatrodimenses.

Atabeladaesquerda,quecontmosdadosdeorigem,temcincocolunas,equatro
delassetransformaroemdimensesdorelatriomatricial,eaquintadelas,querepresentaovalorvendido,seracolunaasertotalizadanointeriordorelatrioresultante.
Asduasprimeirascolunasdatabeladaesquerda(lialenomedovendedor)seroas

Captulo5Relatrioshierrquicosematriciais

275

Avarivelcontmumaestruturadedadosquearmazenaostotaisdevendas
demaneirasimilarcomoestesseroexibidos.Trata-sedeumamatrizcomquatro
ndices(lial,vendedor,msdavendaesexodocliente)queserutilizadaparaa
exibiodorelatrio.Jamatrizarmazenarostotaisdecadavendedoreserutilizadaparaapresentaraltimacolunadorelatrio.Dessaforma,essa
matrizarmazenaatotalizaodevendasconformealialeovendedor.Jamatriz
armazenaratotalizaodevendasconformeomseosexoeserutilizada
paraapresentaraltimalinhadorelatrio.
Osvetores e armazenaroosdiferentesvaloresdascolunassexoems,
resultantesdaconsultaaobancodedados,paramontagemdascolunasdorelatrio.
Essesvetoressounicados()paragarantirquenocontenhamvalores
repetidosesoordenados().Agura5.9apresentaoresultadodorelatrio.

Figura5.9RelatriocomquatrodimensesemHTML.

matriz_quatro_html.php

CAPTULO6

Grcosedocumentos

Eupreroseressametamorfoseambulantedoqueteraquelavelhaopinio
formadasobretudo.
RaulSeixas

Nestecaptuloserabordadaageraodegrcos,bemcomodedocumentos.O
captuloabordaquatrotpicosprincipais:geraodegrcosdelinhasecolunas
segundoosdadosexistentesnabasededados,degrcoscominteraocomousurio,dedocumentosnoformatoPDFededocumentosnoformatoRTF.

Grcos
Nocaptulo3foramapresentadasasbibliotecasutilizadasaolongodolivro,entre
elasaJPGraph.Osexemplosdessecaptuloutilizavamapenasdadosestticos,denidosnaformadevetores,paragerargrcos.Osprximosexemplostratamda
geraodessesmesmosgrcos,masconformeosdadosprovindosdabasededados
utilizadaatomomento.

Grcodelinhas
Oprximoexemplotratadageraodeumgrcodelinhasapartirdosdados
existentes na base de dados utilizada at o momento. O objetivo do grco ser
projetarasvendas(R$)realizadasemcadaumadasliaisaolongodosmeses.Nesse
grco,cadalinharepresentarumalial,conformepodemosconferirnalegenda.
Ogrcoapresentar,noeixoX,osmesesemqueasvendasocorrerame,noeixoY,
omontantedevendas.
Oprogramainiciacomaapresentaodomtodo,quedenirapartir
dequaislocaisasclassesdeconexocomabasededados(app.ado)serocarregadas.
Apartirdeento,deneoano(varivel)queserutilizadonaconsultaSQLpara
montarogrco.Apsaaberturadaconexocomabasededados,aconsultaSQL
denida,tendocomoobjetivolistaromontanterealizadoemvendasagrupadopor
290

292

CriandoRelatrioscomPHP

, que contm sempre seis valores (desde julho at dezembro) para serem

projetados. S depois, o objeto instanciado, recebendo esse vetor como


parmetro.Emseguida,sodenidasalgumascaractersticasdecadalinhacomo
cor,espessura,exibiodemarcasevalorese,aonal,oobjetoadicionado
aogrcopormeiodomtododaclasseeogrcoexibidoemtelapor
meiodomtodo.Agura6.1apresentaoresultadodogrco.

Figura6.1Grcodelinhasrepresentandoasvendasdecadalialporms.

grafico_linhas.php

296

CriandoRelatrioscomPHP

seisposies,eovolumedevendasdecadams,quandoessainformaoexistir,ou
zero,quandonoexistir.
Depoisdeinstanciarumobjeto,algumascaractersticassodenidas,como
acordecadabarra(),seosvaloresdeveroserexibidosouno,onome
querepresentarabarranalegenda(),seasbarrasterosombreamento
(),entreoutras.Porm,abarraadicionadaaovetor ,queter
todasasbarras(umaparacadalial).Depoisdepercorreramatriz ,criado
um objeto da classe , que representa um agrupamento de barras. Esse
objetorecebecomoparmetroovetor,sendoresponsvelporsuaexibio.
Esseobjeto,ento,adicionadoaogrcopormeiodomtododa
classe,que,ento,exibidoemtelapelomtodo.Agura6.2apresenta
oresultadodogrco.

Figura6.2Grcodecolunasrepresentandoasvendasdecadalialporms.

grafico_colunas.php

300

CriandoRelatrioscomPHP

Depoisdepercorrerosdadosretornadosdabasededados,ogrcoinstanciado
pormeiodacriaodoobjetodaclasse.Depois,algumascaractersticasdo
grcocomosombreamento()ettulosodenidas.Depois,umobjeto
dotipo criado,recebendocomoparmetroovetorquecontmosdados
aseremprojetados().
O mtodo dene uma fatia a ser distanciada do grco, indicando
umdestaquemaior.Omtodo denedemaneirapercentual(entrezero
eum)aposiodocentrodogrcoemrelaoaoseixoshorizontalevertical.O
mtododeneosvetorescontendooslinksertulosdelink.Omtodo
atribuiaslegendas(nomesdeliais)aogrco.Aonal,oobjeto
adicionadoaoobjeto,pormeiodomtodo,eogrcoexibidoem
tela,pormeiodomtododaclasse,que,emvezdeexibirapenas
umaimagememtela,responsveltambmpelageraodocdigoHTMLquefaz
omapeamentodoslinks,permitindoqueousuriocliquesobreasfatiasdapizza.A
gura6.3apresentaoresultadodogrco.

Figura6.3Grcodepizzarepresentandoopercentualdevendasparacadalial.

grafico_pizza.php

Captulo6Grcosedocumentos

313

Oprogramaaseguirprocurademonstrarcomosedautilizaodaclasserecmcriada.Oresultadodaexecuodesseprogramapodeservisualizado
nagura6.5.

Figura6.5NotascalgeradanoformatoPDF.

Esteexemploiniciacomadeniodomtodo,quedenecomosedar
acargadasclassesdeconexocomabasededadosapartirdaclasse app.ado.Em
seguida,iniciaumblococomautilizaodaclasse.
Paraemitirasnotasscais,seroutilizadososdadosdastabelas:,,,
e.Dessaforma,seremitidaumanotascalparacadavendarealizada.Osprodutosintegrantesdeumavendafaropartedocorpodanotascal.
Ocdigoiniciacomadeclaraodavarivel,quedenequalocdigoda
vendaqueserutilizadoparaemissodanotascal.Essecdigoestdenidode
maneiraxa,mas,emumaaplicaoreal,seriapassadoviaformulriodeparmetros.Logodepoisdedenirocdigodavenda,abrimosumaconexocomabasede
dadosedenimosumaconsultaSQLparaobter,apartirdocdigodavenda,adata
emqueestafoirealizadaeocdigodocliente.

Captulo6Grcosedocumentos

323

Figura6.6CartadeinadimplnciageradanoformatoRTF.

Emdocumentoscomocartasdeinadimplncia,contratosdeprestaodeservios,
entreoutros,bastantecomumotextododocumentosofreralteraesaolongo
dotempo,sejapormudanasnasregrasdenegcio,mudanasnalegislao,entre
outrosfatores.Dessaforma,noumaboaprticamanteressecontedocomoparte
integrantedocdigo-fontedaaplicao,umavezquequalqueralteraosubsequente
dependerdaaododesenvolvedor.
Paraevitaressetipodemanuteno,recomendvelmanterocontedododocumentoemumlocalquepossasereditadopelousurio,deprefernciapelaprpria
interfacedaaplicao.Paraimplementaressaseparaoemnossoexemplo,otexto
dacartacararmazenadoemumarquivoexternoaplicao,chamadodecarta.txt.
Essedocumentopodersereditadopelousurioeconterinclusivetagshtmlcomo
(bold),(italic)e(underline),umavezqueessastagssosuportadaspelaPHPRtfLite.
Comoimpossvelescreverumnicotextodecartaquesirvaparatodososclientes,
essetextodevercontervariveiscomo,,e,quesero
posteriormentesubstitudaspeloprograma.Autilizaodevariveispermitequeo
textodacartacontenhaosdadosretornadosposteriormentepelobancodedados,
tornandoacartapersonalizada.
Oprogramainiciacomadeclaraodomtodo,quedenecomosed
acargadasclassesdeconexoaobancodedados.Aseguir,jdentrodobloco
,denimosocdigodoclienteparaoqualemitiremosacartadeinadimplncia.
importantetornarclaroque,emumaaplicaoreal,nuncaestaremosdenindo

CAPTULO7

Umabibliotecaparageraoderelatrios

Aperfeionoalcanadaquandojnohmaisnadaparaadicionar,mas
quandojnohmaisnadaquesepossaretirar.
AntoinedeSaint-Exupry

Oobjetivoprincipaldestecaptuloconstruirumconjuntodeclassesquepermita
aoprogramadordesenvolverrelatriostabularesehierrquicosemformatosdiversos,
comoHTML,PDFeRTF,semnecessariamenteconhecerdetalhesdofuncionamento
dessasbibliotecas,comoocasodaFPDFparaarquivosPDFoudaPHPRtfLitepara
arquivosRTF.Paraisso,serocriadasclassesqueautomatizamaelaboraodesses
tiposderelatrio,aumentandoaprodutividadenodesenvolvimentodeaplicaes
corporativasnoquedizrespeitocriaoderelatriosoperacionais.

Introduo
Aolongodolivro,aprendemosautilizaralgumasdasmaisimportantesbibliotecas
paragerarrelatriosemPHPetambmdiversasestratgiasparagerarrelatriosdos
maisdiversostipos,desdeosmaissimplesatosmaiscomplexos.Atesteponto,
construmosvariadostiposderelatrios,realizamosconsultasaosbancosdedados,
formatamososdadosparaapresentaoemtabelas,grcos,entreoutrositens.
Nodiaadiadodesenvolvimentodeaplicaes,sobretudoquandofalamosdeaplicaesdenegcio,necessrioquetenhamosprodutividadeeestapossaseralcanada
dediversasmaneiras.Quandodesenvolvemosumaaplicaoorientadaaobjetos,
umadasmaneirasmaisecientesdealcanarmosaprodutividadepormeioda
criaodeclassesqueautomatizamtarefasparaoprogramador,demaneiraqueele
possafazercadavezmaiscommenoslinhasdecdigo.poressemotivoqueneste
captuloprojetaremosalgumasclassesquesimplicamatarefadegerarrelatrios,
tornandomelhoravidadoprogramador.
Dentretodosostiposderelatriosquevimos,osrelatriostabulareseoshierrquicos
estoentreosmaissolicitadospelosusuriosdeaplicaesdenegcioemtermos
327

Captulo7Umabibliotecaparageraoderelatrios

329

estruturaodosdadosantesdesuaapresentao.Essaclassepermitiraodesenvolvedor especicar o banco de dados, a consulta, adicionar colunas aorelatrio,


adicionargruposetotalizaese,aonal,gerarorelatrioemumdostrsformatos
disponveis:HTML,PDFouRTF.
Aseleodoformatoqueserutilizadopelaclasseparagerarorelatrio
serrealizadopeloprogramadoraoacionaromtodo.Essemtodo
recebercomoparmetroumobjeto,ou,
oqualserarmazenadonoatributo.Esseobjetoserutilizadoaolongoda
classeparaformatarorelatrio.Essatcnicanospermiteselecionarum
algoritmo,nestecasorepresentadoporumadastrsclassesduranteaexecuoda
aplicao.Essatcnicaconstituiumavariaododesignpattern.Agura7.1
procurarepresentararelaoentreasclassesnessepadro.

Figura7.1PadrodeprojetoStrategy.

Um designpattern representadoporumafamliadealgoritmosencapsuladosemumahierarquiadeobjetos,deformaquepossamosfacilmentetrocarde
algoritmo.Paraimplementarodesignpattern,normalmentedeclaramosuma
classeabstratacontendoosmtodosqueessealgoritmodeveprovereumconjunto
declasses-lhaconcretasdesta,queimplementamcadaversodiferentedessealgoritmo.Adecisodequalalgoritmotomarcaporcontadoprogramadorques
terdeescolherumadeterminadaclasseainstanciar.Independentementedaclasse
escolhida,todasasclasses-lhaimplementaroamesmainterface.

Captulo7Umabibliotecaparageraoderelatrios

335

Obs.:Aversosemcortesdessecdigoencontra-separadownloadnositedaeditora
Novatec.

EscritordePDF
Aprximaclasseescritoraqueconstruiremosa,queserresponsvel
pelaescritadetabelasemarquivosPDF.EstaclassefarusodaclasseFPDFpara
construiroarquivonalemPDF.Emseumtodoconstrutor,aclasse
recebercomoparmetroumvetorcontendoaslargurasdascolunasdatabelae
armazenar esse vetor no atributo .Alm disso, o mtodo construtor
inicializaovetorecriaoobjeto,instnciadaclasseFPDF,que
serresponsvelporescreveratabelanoformatoPDF.Emseguidasoexecutados
osmtodoseparaaberturadodocumentoPDF.

TTableWriterPDF.class.php

Captulo7Umabibliotecaparageraoderelatrios

347

Obs.:Aversosemcortesdessecdigoencontra-separadownloadnositedaeditora
Novatec.

Utilizandorecursosvisuais
Noltimoexemplo,vimoscomoutilizarasclassesescritorasdetabelaspormeio
deumexemplobastantesimplesquegeravaaomesmotempotrsarquivoscomo
mesmocontedo,masemtrsformatosdiferentes:html,pdfertf.
Oobjetivodestenovoexemplo,quepodeservistonagura7.3,exploraraspotencialidadesdasclassesescritoras,criandoumdocumentocommaisdetalhes,explorando
recursoscomoestilos,cores,fontes,alinhamentoseapossibilidadedecriarclulas
queocupemmaisdeumacoluna()paraproporcionarumrelatriocomefeito
dequebras(agrupamentos)etotalizaes.

Figura7.3RelatriogeradonoformatoPDF.

Assimcomofoirealizadonoexemploanterior,tambmnesteoblocoprincipaldo
programaestardentrodeumlaoderepetiescujoscomandosseroexecutados
umavezparacadaumdosformatosdearquivos:html,pdfertf.Aonaldaexecuo

370

CriandoRelatrioscomPHP

importantenotarqueacolunaquecontmonomedofabricantenoserexibida
nosdetalhesdorelatriopornotersidoadicionadapelomtodo.Dessa
forma,onomedofabricantesomenteserexibidoquandoalterarseuvalor,congurandoumaquebranorelatrioesendoexibidaemumalinhadegrupo.Almdisso,
importantedizerqueambosparmetrosdosmtodosedevem
corresponderexatamenteaosnomesqueoscampostmnaconsultaSQLenviadaao
bancodedados.Paragarantirqueoscampostenhamessesnomes,podemosutilizar
recursoscomoaliasesdecampos,pormeiodaclusuladalinguagemSQL.Isso
especialmentetilquandocamposdetabelasdiferentestmomesmonome.
Aonal,omtodo acionado,aconsultabasededadosrealizada,o
relatriogeradoemmemriaeomtodo armazenaorelatrionoarquivo
saida5.pdf.Casoalgumaexceoocorraduranteageraodorelatrio,oprograma
serdirecionadoparaoblocoeamensagemdeexceoserexibidanatela.Por
m,umlinkexibidoaousurio,pormeiodoqualelepoderefetuarodownloaddo
arquivocontendoorelatrio,quepodeservisualizadonagura7.6.

Figura7.6RelatriogeradonoformatoPDF.

relatorio5.php

Вам также может понравиться