Criando relatórios em Delphi 7 - Parte 1

por Adenilton Rodrigues

Criar relatórios sempre foi um desafio aos desenvolvedores de softwares de gerenciamento informações em bancos de dados. O usuário quase sempre tende a avaliar um sistema pela qualidade de suas informações de saída.
A entrada dos dados é vista como um mero detalhe necessário ao funcionamento do conjunto.

Relatórios é, indubitavelmente, o meio mais "palpável" com que ele contará no momento da análise dos dados processados pelos seus sistemas de informações. Qualquer software decente de controle (ou gerencial) deve produzir uma saída de dados à altura do seu input, sob pena de não atender aos propósitos de sua implantação ou não cativar seu usuário final.

Na época do desenvolvimento usando liguagens padrão DOS (Cobol, Pascal, dBase, Clipper, Fox, ...) o desenvolvedor inventava mil e uma artimanhas para bolar "aquele relatório impossível" solicitado pelo seu superior. E, mesmo com todas as dificuldades da época, ficava pronto e agradava a seus usuários. Investia-se muito tempo e paciência, mas a satisfação do solicitante pelo trabalho realizado compensava o esforço investido.

Era um modelo de desenvolvimento onde você, desenvolvedor, teria que se preocupar com todas as características da criação do relatório, desde o algoritmo a ser utilizado para a geração das informações até o código correto a ser enviado à impressora (que variava conforme o fabricante e o padrão adotado). Seu código se encarregava de "posicionar" a cabeça da impressora em uma certa linha e coluna, disparar a impressão, controlar linhas, tamanho da página, paginamento, cabeçalhos, salto de página, enfim, o relatório é seu, dê seu jeito...

Apareceu o Windows, e com ele novas linguagens, novas técnicas e novos paradigmas. Facilitou bastante o desenvolvimento de interfaces, gerenciamento de bases de dados, expandiu o conceito de conectividade, e tornou o usuário um rei, onde a aplicação não mais o modela, e sim, ele modela a aplicação. Uma nova técnica foi adotada para a construção de relatórios nos ambientes de desenvolvimento emergentes: A técnica visual, onde a ferramenta adotada se encarregaria de "adivinhar" as regras envolvidas no tratamento do conjunto de dados.

A construção de um relatório se assemelhava a construção de um brinquedo montado com blocos plástico "LEGO". Economizou o trabalho de gerenciamento da impressão e sacrificou a possibilidade da incorporação de recursos sofisticados conforme a necessidade do usuário, cada vez mais exigente e criativo. Houve um "encapsulamento" do desenvolvedor dentro das técnicas possíveis de uso dos métodos visuais para a construção de relatórios.

Em certas circunstâncias os desenvolvedores se assemelhavam ao Flintstones construindo o mundo dos Jetsons (paus, pedras e tacapes eram utilizados para construir os possantes veículos voadores).

Apareceram muitas ferramentas visuais (algumas excelentes por sinal) que economizavam código e prometiam criar relatórios fantásticos, chegando ao luxo de permitir ao usuário final criar seus próprios relatórios (se eles saberiam usar a ferramenta era um outro problema!).

A integração dessas ferramentas com as aplicações desenvolvidas era (e ainda é) uma experiência traumática. A aplicação torna-se elemento secundário e a ferramenta de relatórios a maior consumidora de recursos.

Sem alternativas, os desenvolvedores partiram para o uso massivo de ferramentas de relatórios visuais baseados no "Point and Click, Drag and Drop:". Funcionava? Sim, desde que se limitassem ao desenvolvimento baseado em listagens, queries, agrupamentos e bandas de dados e, colocassem na cabeça de seu exigente usuário que aquele relatório era tudo o que ele sabia (ou podia) fazer. Cabe aqui citar aquela máxima do desenvolvimento: "A complexidade do programa cresce tanto até exceder a competência do programador". Nesse contexto a competência era limitada à ausência de flexibilidade da ferramenta adequada.

A missão tendia a tornar-se impossível quando o relatório pretendido não seguia nenhuma convenção no layout, extração, processamento e geração dos dados finais. A complexidade era tanta que o uso de um QuickReport ou ReportSmith (ahh ReportSmith! alguém se lembra dele?) costumava consumir mais horas de desenvolvimento dos relatórios do que o tempo alocado ao projeto por inteiro. Sem contar que eles geravam um modelo chamado "não-me-toque... senão estraga tudo". Quem de nós nunca arrastou acidentalmente uma informação de um relatório altamente sobrecarregado e penou pra recolocá-la no lugar de origem?

Na minha modesta opinião, o mal das ferramentas de construção de relatórios puramente baseadas no método visual reside na errônea assertiva de que elas podem abstrair toda e qualquer complexidade do processamento de regras de negócios envolvendo um conjunto de dados. Elas se propõem a ser uma espécie de remédio genérico para qualquer mal. Uma bala de prata...

Sou desenvolvedor Delphi desde a versão 1.0 (passei por todas as versões conhecidas do Turbo Pascal). Hoje estou me adaptando à versão 7.0. Nessa seta do tempo, experimentei várias soluções para a criação de relatórios, indo do Canvas da impressora até o Crystal Reports (excelente ferramenta, diga-se de passagem). Passei inclusive por soluções de Cubo e Business Intelligence sem nunca ter adotado uma solução definitiva, pois conforme a complexidade do projeto (e da cabeça do usuário), ferramentas distintas seriam utilizadas, chegando em alguns casos à adoção de ferramentas múltiplas para propósitos similares.

Na época do Delphi 1.0 (e Delphi 2.0) me aprofundei no QuickReport (ReportSmith era um elefante branco, umas dez vezes mais pesado que sua aplicação!). QuickReport, ferramenta interessante, pequena, leve, drag'n drop, stand-alone, 100% Delphi, boa opção? Acreditei que sim. Comprei o pacote full com a "turma" da QuSoft, peguei o código fonte e comecei a "aventura".

Missão: Criar minha própria biblioteca de rotinas que aliasse o poder da criação de relatórios via código runtime com a facilidade da interface gráfica, seria o melhor de dois mundos. Foi uma ótima experiência, cheguei a escrever alguns artigos (procure ai pela Net. Com um pouco de sorte você achará algo nos mecanismos de busca, com meu nome invariavelmente ligado ao QuickReport).

QuickReport, decepção total, era bug atrás de bug, comportamento instável e bastante problemático. A quantidade de problemas detectados foi uma barreira. Semanalmente mandava email pros noruegueses pedindo uma solução. Pasmem, existem bugs já detectados no Delphi 1.0 e até hoje não foram corrigidos (Acho que virou feature). Foi uma benção a Borland ter se livrado dele. Não dá nem pra dizer que foi bom estar com você, brincar com você...

O pacote do ReportBuilder da Digital-Metaphors sempre foi uma sedução, já imaginou uma variante do Crystal Reports embutido nos meus softwares? O usuário criando seus próprios relatórios? É uma suíte realmente profissional, mas puramente visual, a técnica de controle de código é muito trabalhosa e muito presa aos objetos do relatório. A reutilização de soluções em outros projetos é extremamente difícil, porém não chega a ofuscar o brilho do produto.

O site do Torry me conduziu à uma empresa pequena que estava começando o desenvolvimento de um novo produto para relatórios no Delphi 1.0, a Nevrona. Eles lançaram no mercado um pacote de componentes que não tinha nada visual, a não ser o resultado da impressão. Se assemelhava à uma espécie de Printer.Canvas com preview de impressão. A solução me chamou a atenção pelo fato deles terem feito o caminho inverso dos outros componentes: Ao invés de partir do modo gráfico para chegar ao modo código, ele partiram do modo código até chegar ao gráfico. Prepararam previamente um arsenal de rotinas básicas (tratamento de fontes, posicionamento, cores, gráficos, primitivas gráficas, controle de cursor, paginação, ...) para então projetarem o módulo baseado em técnicas visuais ( a utilizada no RAVE ). O desenvolvedor era incentivado a usar código (!), a parte gráfica estava implicita e só fazia diferença no resultado final. O propósito desta solução não era DESENHAR relatórios e sim ESCREVÊ-LOS.

Esse componente não era interessante, era fantástico pois dava ao desenvolvedor Delphi o poder que faltava: usar uma linguagem poderosa para criar relatórios e assumir o controle total do seu processamento e regras de negócios envolvidas no tratamento do conjunto de dados. Era praticamente impossível trabalhar com ele sem se sentir tentado a criar sua própria biblioteca de desenvolvimento de relatórios. Sua arquitetura era um convite espontâneo à sua expansão.

Consegui enfim desenvolver minha biblioteca de criação de relatórios e a tenho utilizado ao longo de 7 anos (acho que essa é a idade do Delphi) sem nunca ter me deparado com problemas de impressão sem solução. Muitos amigos seguiram também o mesmo caminho e nem sentiram a "presença da ausência" (parafraseando Saint-Exuperry) do QuickReport. A adoção do RAVE pela Borland denota aliás uma grande maturidade de ambos os produtos.

O RAVE, que se chamava na época ReportPrinter Pro, sempre concorreu juntamente com o ReportBuilder ao prêmio de melhor ferramenta de relatórios para o Delphi durante vários anos seguidos. Creio que chegou a ganhar alguns Delphi Informant Reader's Choice.

Com relação às técnicas do RAVE, nada de novo foi inventado, foi apenas resgatado o conhecimento do desenvolvedor mais experiente já acostumado a escrever relatórios que extrapolam os limites de simples listagem de dados. Essa será, talvez, a maior dificuldade a ser enfrentada pelos desenvolvedores presos às écnicas puramente visuais. Será exigido um conhecimento maior de algoritmos de extração, tratamento e agrupamento de dados.

Logicamente nada impedirá a utilização da IDE do RAVE para a criação de relatórios de forma similar ao QuickReport. Haverá apenas uma sub-utilização dos recursos disponibilizados pelo produto e, sem muito tardar, certamente o desenvolvedor será forçado a usar código de programação para resolver um problema sem solução através do método simplista de "arrastar" um objeto para a página.

É uma ferramenta que atenderá plenamente do néofito usuário ao mais experiente desenvolvedor de soluções Delphi. Não tenho dúvida alguma de que produtos novos surgirão estendendo os recursos disponibilizados pela engine do RAVE.

No próximo artigo apresentarei detalhes da construção de relatórios usando o RAVE. Enfocarei o modelo baseado em código de programação, afinal este o grande diferencial do RAVE em relação às demais soluções de relatórios para o Delphi.

PS: O material exposto expressa a opinião pessoal do autor baseado numa longa experiência de desenvolvimento de soluções corporativas em Delphi e ferramentas de criação de relatórios (independentes e/ou integradas à IDE da linguagem).

Adenilton Rodrigues tem formação superior em Análise de Sistemas. É Consultor em Tecnologias de Desenvolvimento Internet e atualmente responde pelo Departamento de Tecnologia da SOL - Serviços Online (http://www.solnet.com.br/), onde implanta soluções em Delphi, Java e .NET.


COMENTÁRIOS
Fernando Antonio Sam - 12/10/2002 - 12:20:00
Concordo plenamente com você. já tive e tenho problemas com o QR e estou migrando para o RB.

SDS
Fernando
fasp@allways.com.br
................................................
Adenilton Rodrigues - 15/10/2002 - 18:46:33
Os desenvolvedores do QR tiveram sua chance para amadurecer o produto. Não conseguiram, não d? para ficar parado esperando...
................................................
Joemil C?ssio - 23/10/2002 - 12:22:36
Gostei muito deste artigo. Tb tive problemas com QR (por exemplo um texto de um QRDBText com autosize em false sobrepor o outro, ou qrdetails serem impressos sobre o Page footer, rid?culo)

Realmente, o Rave parece ter mais op??es de geração de relatório ("estilo no braão") que o QR e Printer.Canvas (posicionar texto em 1 cm d? um trabalho danado), parecendo mais com a geração no estilo Clipper (apesar de ter que usar mais comandos), mas deixo uma dúvida: se eu tiver que imprimir relatórios de várias páginas, como faria para que o mesmo imprimisse rápido (draft) ?
................................................
Adenilton Rodrigues - 23/10/2002 - 19:08:54
Oi Joemil. O RAVE possui excelentes recursos para o controle da impressão. Dificilmente você terá problemas com sobreimpressão de informa??es. Ele controla automaticamente o tamanho da página e a quantidade de linhas restantes até chegar ao rodap? (independente do tamanho e tipo de fonte). Com relação é impressão draft, acredito que você esteja querendo usar impressora matricial. Sei que o RAVE tem suporte a esse tipo de impressão. Experimente usar os m?todos PrintData e PrintDataStrem do TRVSystem e exponha-nos suas experiências. Abraãos...
................................................
Marcello Dias - 23/11/2002 - 15:43:30
J? utilizei a versão "Rave Programada",mas não
gostei porque ainda tinha que utilizar bandas.
Troquei pelo GmPrintSuite.
Tem como utilizar o Rave sem bandas?
O GmPrintSuite é baseado na propriedade Canvas,bem rápido e super barato.
................................................
Adenilton Rodrigues - 06/12/2002 - 00:17:46
Meu amigo, acho que você fez confusão. A versão "Code" do RAVE não usa bandas, apenas a versão IDE que trabalha com essa técnica. O Rave programado é o gmPrintSuite turbinado! []s AdeN
................................................
Adauto Martins - 17/12/2002 - 19:06:00
Uma dúvida. Qual seria o melhor para se fazer um Relatorio para Emitir Pedidos, e ao mesmo tempo fazer relatorios de venda entre outras.

Obrigado
................................................
Marcello Dias - 29/12/2002 - 23:20:18
Realmente deixei de utilizar o GmPrintSuite
e o agora estou utilizando o Rave Code Based.
Mas continuo achando bandas uma porcaria.

Grato,
Marcello Dias
................................................
Winston C. Silva - 18/01/2003 - 23:52:57
Estive escrevendo um pequeno sistema de script para flexibilização de meu sistema comercial e tive muitos problemas durante a criação devido o não conhecimento do gerador de relatório da Rave. Não estou usando ele ainda mas tenho certeza que será a solução para os meus problemas!
................................................
Adenilton Rodrigues - 26/01/2003 - 21:41:06
Pediria ao pessoal que tem postado duvidas nesse espaão para enviarem suas questées via email para aden@aden.com.br. Dentro das possibilidades estarei respondendo é todos.
................................................
Roberto Carlos Sence - 28/01/2003 - 10:09:08
Ola, pessoal
Recentemente Migrei meus programas de delphi 3 para delphi 7, e tive um problema... e que no delphi 7 percebi que o componente quick reports nao vem instalado, ok, mas meus programas precisa este componente, como consigo o download do componente quick reports para delphi 7.

Agradeão...

Roberto Carlos Sence - cacoal - ro
................................................
Joelcio Kuroski - 05/02/2003 - 00:12:23
O Quick Report vem sim com o Delphi 7, não lembro se no mesmo CD ou num CD adicional... só não é instalado por default na palheta de componentes. Isso vc tem que fazer sozinho...
................................................
Sergio Falco Daniel - 26/02/2003 - 20:57:46
bem amigos muito sim tem falado do Rave mais eu gostaria mesmo de saber onde eu consigo uma copia free do ReportBuilder que e considerado aqui na minha regiao como sendo um dos melhor programa para criacao de relatorio visto que o cristal report nao deixa os seu meritos mais e muito pesado para traficar num rede ja o reportbuilder ele e muito estavel por nao precisar ficar trafecando todo hora oxc e dll

no mais eu gostaria de saber somente isso
eu meu muito obrigado
................................................
Marcelo Novarine - 28/02/2003 - 18:10:42
Pessoal, para quem quer o fazer o fownload do report builder ou outras ferramentas para o delphi acessem a página http://delphi-forum.4u.ru/ foi l? que encontrei o link para download do report builder.

De qualquer forma segue o link abaixo:
http://www.digital-metaphors.com/w7ekdnx3/rbentX.exe

Obs.: troque o X pela versão do delphi. Por exemplo se vc for baixar para o delphi 6 entéo o link facar? assim:
http://www.digital-metaphors.com/w7ekdnx3/rbent6.exe
................................................
Sergio Falco Daniel - 05/03/2003 - 19:53:34
O Marcelo eu preciso do serial
q vc me passou
do report build sem mais muito obrigado.
................................................
Marcelo Novarine - 05/03/2003 - 22:15:38
Sergio eu tinha colocado nesse site, mais devem ter retirado. Se vc puder me passar o teu email, eu lhe envio a serial.
................................................
Sergio Falco Daniel - 07/03/2003 - 16:51:34
Marcelo vai aqui meu e-mail pra você mandar o serial do report build..
falcodan@bol.com.br
................................................
Junior - 07/03/2003 - 17:33:37
Reposta para Roberto Carlos Sence. Como a pergunta
foi postada em 28/01, não sei se tens a resposta.
De qualquer forma a? vai.
No menu componentes selecione Install Packages. Na janela Default
Project Options, clique no botão Add. V? até a pasta Delphi7\Bin e
selecione o arquivo dcltqr70.bpl e clique em abrir. Pronto! Não precisa
fazer mais nada. já estar? instalado o QuickReport
................................................
daniel soares 07/03/ - 07/03/2003 - 19:23:40
pessoal, sou aprendiz de delphi.
como faão para gerar um relatorio de um programa que criei como cadastros de clientes onde tenho os dados do cliente?
................................................
Sergio Falco Daniel - 08/03/2003 - 10:41:32
Marcelo.. consegui instalar..porém.. não é esse tipo de REportBuilder que eu esperava.. eu procuro aquele igual ao cristal report.. que executa fora do delphi e cria os modulos ... vc sabe qual é ???...
Se vc souber de qual estou falando me manda onde encontrar ele....
OBrigadoo
................................................
Marcelo Novarine - 08/03/2003 - 15:33:33
Sei Não. Mais eu estava dando uma olhada no site da empresa que desenvolve o report builder e acho que essa versão que vc esté falando é a versão Server. já tentou procurar naquele site?
................................................
Sergio Falco Daniel - 10/03/2003 - 19:18:37
Valeu
Eu vou dar uma olhada pq um amigo que e programador ele comentou comigo sobre este report builder e que ele so abrira somente um drive de banco de dados.

Mais eu vou dar uma olha na pagina do fabricante

Ate +


................................................
Sergio Falco Daniel - 10/03/2003 - 19:27:34
Eu dei uma olha na pagina do fabricante o que ele tem e trial entao fica muito dificil
mais assim mesmo valeu.

Obrigado

eu vou tentar encontrar em outras pagina o report builder server sem ser trial

................................................
Carlos Augusto Trudo - 11/03/2003 - 20:31:11
O Pessoal da Borland poderia ter deixado o QuickReport como uma segunda op?ão de gerador de relatório.....
................................................
Marlon - 19/07/2003 - 13:18:38
Prefiro o Quick Report
................................................
Juliana Fernandes - 19/12/2003 - 11:29:46
Gostaria de saber como se insere m?scaras em datatexts como para cep,data,telefone etc.Me ajudem!
................................................
Fabio Galdino - 11/03/2004 - 10:09:35
Adorei o seu artigo. Aqui na empresa concordamos que definitivamente o RAVE é a melhor solução!
................................................
R?gis Quinelato - 12/08/2004 - 17:21:12
Estou desenvolvendo relatórios para web com o RAVE usando intraweb 7, e tenho uma revista dizendo que não é recomendavel utilizar o Rave com Intraweb em conex?es diretas de banco de dados(definidas internamente no Rave)pois estas não dão suporte a m?ltiplas conex?es por processo..

Estou tendo esse problema como devo proceder para resolver isso...? Muito obrigado.
................................................
Henrique - 02/12/2004 - 10:13:02
Acho que o rave é muito superiosr oa Quickrep,mas tem comoutilizar o rave com o delphi 6?
................................................
Jones - 24/03/2005 - 15:36:46
Como faão um omelete de salsicha?
................................................
O Envio de Comentários está suspenso temporáriamente