Pular para o conteúdo principal

Lazarus - Criando relatórios com FortesReport (Parte I)

Para a criação de relatórios, o Lazarus já trás o componente LazReport, no entanto ele precisa ser instalado no IDE. Para fazer a instalação do pacote, acesse o menu Package -> Open package file (.lpk). Localize o diretório de instalação do Lazarus e na pasta components abra lazreport e depois source. Abra o pacote lazreport.lpk, clique em Compile e depois em Install. Como já sabemos isso irá recompilar o IDE. Depois de inicializado novamente estará disponível a aba LazReport. Leia aqui um tutorial básico sobre o LazReport.
No entanto queremos mostrar uma alternativa ao LazReport. Por essa razão, vamos apresentar neste artigo o FortesReport. Para quem conhece o QuickReport, que fazia parte do Delphi, não terá dificuldade de desenvolver com esse componente. Baixe o pacote aqui e instale. Os procedimentos são semelhantes aos que mostramos acima. Você terá uma nova aba chamada Fortes Report.


Conectando o banco de dados

O primeiro passo para criar a aplicação é fazer a conexão com o banco de dados. Vamos usar o SQLite e o ZeosLib. O banco de dados será o mesmo já usado em exemplos anteriores. Selecione a aba Zeos Access e coloque um TZConnection no Data Module. Defina a propriedade Database com o caminho e o nome do arquivo do banco de dados. Na propriedade Protocol escolha sqlite-3.
Agora coloque um TZReadOnlyQuery da mesma aba. Na propriedade Connection escola o TZConnection anterior. Na propriedade SQL digite SELECT * FROM CIDADE ORDER BY NOME. Localize a aba Data Access e coloque um TDataSource no Data Module. Na propriedade DataSet selecione o TZReadOnlyQuery. Para que possamos visualizar uma prévia do relatório deixe o banco conectado e a Query aberta. Queremos criar um relatório com a seguinte aparência:


Ou seja, mostraremos as cidades em ordem alfabética e a cada letra inicial nova ela será impressa destacando um novo grupo de cidades.
A aplicação deverá ter dois forms. Um onde será criado o relatório, e outro que chamará o primeiro. Assim, se a aplicação já possui um form, adicione o segundo. Nosso trabalho será todo efetuado em cima do segundo form.
Selecione a aba Fortes Report e coloque um TRLReport no form. Esse componente é como se fosse a folha de papel e possui um quadriculado para facilitar o desenho. No Inspetor de Objetos expanda a propriedade AllowedBands e coloque em True as opções btColumnHeader, btDetail e btHeader. O componente trabalha com bandas e isso define quais as bandas que são permitidas no relatório. Definimos que nosso relatório terá um cabeçalho de página (btHeader), um cabeçalho de coluna (btColumnHeader) e uma banda de detalhe (btDetail). Na propriedade DataSource selecione o TDataSource colocado no Data Module anteriormente.
Agora coloque um TRLBand. Defina a propriedade BandType como btHeader. Aumente a altura da banda e coloque um TRLLabel sobre a TRLBand. Defina a propriedade Caption como Relatório de Cidades. Na propriedade Align selecione faCenter, para centralizar o rótulo na banda. Expanda a propriedade Font e defina Size como 14, por exemplo. Coloque um TRLSystemInfo no lado esquerdo da banda. Na propriedade Info selecione itDate. Isso mostrará a data atual na banda. Coloque outro TRLSystemInfo, este no lado direito da banda e defina a propriedade Info como itPageNumber. Isso mostra o número da página
Coloque outro TRLBand e defina BandType como btColumnHeader. Coloque dois TRLLabel sobre esta e defina as propriedades Caption como ID e Nome respectivamente.
Como desejamos agrupar as cidades precisamos de um TRLGroup. Coloque um componente desses. Expanda AllowedBands e defina btDetail e btHeader como True. As propriedades DataField ou DataFormula são responsáveis por definir como se dará a quebra de grupos. Como queremos que a quebra ocorra pela primeira letra do nome da cidade, então informamos em DataFormula, copy(nome, 1, 1).  Se a quebra fosse por um campo, este seria informado em DataField. Coloque um TRLBand sobre TRLGroup. Defina BandType como btHeader. Coloque um TRLDBText sobre o btHeader. Defina a propriedade DataSource com o TDataSource que foi inserido no DataModule. Podemos aqui imprimir um campo ou uma fórmula. Usaremos DataFormula para imprimir apenas a letra inicial do nome da cidade informando copy(nome, 1, 1). Coloque outro TRLBand sobre TRLGroup e dessa vez defina BandType como btDetail. Na banda detalhe é que são mostradas as linhas da tabela. Coloque dois TRLDBText sobre o btDetail de forma que fiquem abaixo dos rótulos ID e Nome inseridos no btColumnHeader. Defina a propriedade DataSource de ambos com o mesmo TDataSource usado desde o início do artigo. Na propriedade DataField do primeiro TRLDBText, informe ID_CIDADE. E no segundo informe NOME.
Podemos obter uma prévia do relatório clicando com o botão em TRLReport e selecionando Preview.
Para finalizar o exemplo coloque um botão no form que irá chamar o relatório. Abaixo de implementation acrescente no uses o nome da unit referente ao form do relatório. E no evento OnClick do botão escreva o código para chamar o método Preview() de RLReport.

Comentários

Anônimo disse…
Parabéns, graças a você pude dar o meu primeiro passo no FortesReport.
É simples para quem sabe mas de muito valor para os iniciantes e por isso te agradeço muito por este artigo. Continue compartilhando o seu conhecimento e que Deus lhe abençoe. Márcio.
Professor Carlos disse…
Márcio

Obrigado pelas palavras. Essa é a nossa intenção, contribuir com quem está dando os primeiros passos. O seu progresso na ferramenta é a nossa recompensa. Grande abraço e quando precisar da gente pode escrever.
Anônimo disse…
Este artigo está um pouco confuso.
Afinal usa-se o fortes report ou o lazreport?
Professor Carlos disse…
Desculpe se confundi você. Apenas comento no início que existe o LazReport. Mas o artigo é sobre FortesReport.
raphael luis Schettino (residente de porciuncula RJ) disse…
obrigado pela grande aula sobre fortes report.

eu nem sabia que ele existia, mas esta dando muita ajuda até pelo visual do relatório, muito obrigado amigo..


acho que já há material suficiente na internet para elaborar uma biblia dos componentes do lazarus.

obrigado amigo.
Professor Carlos disse…
Raphael

Realmente o Lazarus tem muita coisa boa. Pena que tudo está muito espalhado pela web. Foi isso que me motivou a começar a escrever esses artigos. Mas sinto que é pouco diante do que se pode fazer. O PostgreSQL tem um excelente exemplo do que é documentação: em PDF com mais de 2000 páginas. Excelente. A comunidade tinha que se unir em torno de um projeto assim.
Unknown disse…
Boa tarde professor. Tenho um conhecimento básico em delphi e estou tentando utilizar o Lazarus mas alguns erros se dão na hora em que vou tentar instalar alguns pacotes.

Primeiro o fortes report:
procedure TRLPreviewForm.ShowFindDialog;
begin
if not Assigned(fFindDialog) then
begin
fFindDialog:=TfrmRLFindDialog.CreateNew(nil);
fFindDialog.OnFind:=OnFindHandler;
end;
fFindDialog.ActiveControl:=fFindDialog.EditTextToFind;
fFindDialog.Show;
end;

O erro apresentado para a compilação no (nil). O que posso fazer...
Professor Carlos disse…
Márcio

Qual é especificamente o erro, qual o seu sistema operacional e que versões do Lazarus e do Fortes você está usando?
Pedro disse…
Tutorial que fiz BEM fácil egrar código de barras no Lazarus.

http://www.youtube.com/watch?v=pS0A4WjxxdE
André disse…
Boa noite Prof. Carlos, estou com muita dificuldade na utilização do fortes report com Lazarus! tenho certo conhecimento em delphi e quickreport e há 1 anos resolvi migrar para o Lazarus, tem 1 mês que consegui finalizar o meu
primeiro sistema em lazarus Zeos e Mysql, mas não consigo de maneira nenhuma fazer os relatórios em fortes report, acabei de fazer todos os passos do seu blog, e ao final foi realizar uma prévia clicando sobre o TRLReport - preview, e a seguite mensagem apareceu:
" O componente editor da classe "TRLReportDesigner" chamado com o verbob # 2"Preview"foi com o erro: "Undefined identifier"nome"

a versão do Lazarus é a v0.9.28.2 beta e o fortes Report não me lembro mais,baixei do seu link onde posso ver a versão na IDE? Mas por favor me ajude
a fazer este relatório funcionar, se possivel poste uma video aula no youtube sobre o assunto, acho que vai bombar!

Muito Obrigado
Professor Carlos disse…
André.

Para ver a versão do package, vá em Pacote -> Instalar/Desinstalar pacotes e na caixa Instalar você pode ver os componentes instalados com a versão.
Há muito tempo que deixei de usar a versão 0.9.28. Penso que é melhor atualizar o seu Lazarus para 0.9.31
André disse…
Obrigado pela atenção Prof. Carlos, vou seguir seu conselho e atualizar para a versão 0.9.31 do lazarus, onde posso baixar esta versão, e qual versão do fortes report para o lazarus 0.9.31
Muito Obrigado
Professor Carlos disse…
Baixe aqui ftp://ftp.hu.freepascal.org/pub/lazarus/snapshots/Lazarus-0.9.31-32520-fpc-2.5.1-20110927-win32.exe
Esses links mudam diariamente. Se deixar pra baixar amanhã, melhor entrar no site e verificar o novo build disponivel. Quanto ao fortes baixe aqui http://sourceforge.net/projects/fortes4lazarus/files/fortesreport-3.24-LCL-R2.zip/download
André disse…
Bom dia Prof. realizei o download no link que o sr. me passou, deu certo, desistalei a versão que tinha e instalei a versão sugerida pelo sr. a instalação foi concluída, mas quando clico no icone do lazarus da área de trabalho, me aparece uma caixa de mensagem - Configurar IDE Lazarus, nesta caixa existe 3 abas, a primeira Lazarus - OK, a segunda Compilador - OK e a terceira Fontes FPC com a seguinte mensagem Erro: diretório não encontrado, e quando clico em iniciar IDE me aparece ou mensagem dizendo - Sem os fontes FPC apropriados a navegação de código e compilação será bem limitada e me da duas opções Cancelar ou Ignorar mas nenhuma inicia o lazarus. Me ajude por favor
Professor Carlos disse…
Na aba fontes FPC, clique em Navegar, localize o diretório \lazarus\fpc\2.5.1\source e confirme. Deve aparecer um OK dentro da caixa. Confirme tudo.
André disse…
Prof. realizei tudo, fui Na aba fontes FPC, clique em Navegar, localizei o diretório \lazarus\fpc\2.5.1\source - e apareceu o Ok, depois cliquei em Iniciar IDE e a seguinte mensagem apareceu - List Index (0) out of bounds.
Pressione ok para ignorar e correr o risco de corrupção de dados Cancelar para finalizar o programa, ai clicando em qualquer uma das opções o programa não é iniciado. Se que estou sendo chato, mais falta pouco para concluir meu primeiro sistema em Lazarus, novamente me ajude.
Professor Carlos disse…
Depois que você desinstalou a versão antiga, você excluiu a pasta Lazarus no AppData?
Nessa pasta fica as configurações, que devem ser excluidas para receber uma nova instalação.
Em vez de postar comentários, pode mandar e-mail direto.
Tamiris disse…
Professor... eu estou com problemas na instalacao do fortes

Quando eu clico em compile aparece o seguinte erro:

C:\componentes\fortesreports\rlpreview.pas(350,17) Error: identifier idents no member "Tracking"

e o prog. para nessa linha

HorzScrollBar.Tracking:=True;

pelo o que eu verifiquei nos comentarios, estou usando uma versao do lazarus que o Sr. não recomenda que é a 0.9.28.2
sera que pode ser isso??

e desculpa essa perg. pode ser ate um pouco tola, mas, se eu desistalar essa versao e instalar a outra, corro o risco de não conseguir mas abrir e compilar o projeto que eu ja vinha desenvolvendo na versao anterior??
Professor Carlos disse…
Penso que você deve instalar uma versão mais recente. Risco de não funcionar sempre existe, mas não acredito que isso vai ocorrer. Quando desinstalar a versão antiga, exclua o diretório lazarus que é criado com arquivos de configuração em Dados de aplicativo na pasta do usuário. Ah, estou supondo que você está usando Windows.
Anônimo disse…
Professor eu coloquei no Fortes Report um RLDBText com Datafield "Nome" porem só aparece o primeiro item da tabela. Por que não aparece todos, já que SQL esta Select*from tabela, já aconteceu isso com você ? Poderia me ajudar ?
Obrigado
Professor Carlos disse…
Se você está usando a banda correta deveria funcionar. Veja também que seu comando sql deve ter espaços entre as palavras-chave, tipo: select * from tabela.
AMOR - PAZ - FÉ disse…
Professor,
estou tentando dar os primeiros passos nesta grande ferramenta LAZARUS, e ainda não sei por onde começar, para primeiro projeto estou escolhendo criar um gestor comercial com ordem de serviços e recibos mas que a primeira tela seja de login de acesso para usuarios cadastrados, consigo criar o layout mas fico confuso na implementação de codigos.
pode me ajudar?
AGRADEÇO A SUA COMPREENSÃO!
alan.franca05@gmail.com
Professor Carlos disse…
Pra eu ajudar vc é necessário que sejas mais específico. Diga exatamente onde está sua dúvida.

Postagens mais visitadas deste blog

Lazarus - Acessando banco de dados com SQLdb - Parte I

Para fazer nossa primeira aplicação usando banco de dados no Lazarus vamos usar o SQLite e o conjunto de componentes nativo SQLdb. Inicialmente vamos apresentar passo como essa aplicação foi criada. Essa foi a maneira que eu fiz, e eu agradeço sugestões e questionamentos que pessoas que já passaram por essa experiência. Depois irei fazer algumas considerações sobre o uso do SQLdb. SQLite SQLite é uma biblioteca que implementa um motor de banco de dados SQL. É livre para qualquer finalidade, seja uso particular ou comercial. Lê e escreve em um único arquivo que pode ter além de tabelas, índices, gatilhos e visões. Executa em várias plataformas e é indicado para aplicações embarcadas. Maiores detalhes podem ser encontrados no site oficial. Para usá-lo, baixe-o do site e faça a instalação adequada para o seu sistema operacional. No Windows isso é muito simples, apenas copie sqlite3.dll para o system32 da pasta do sistema operacional. Existe uma ferramenta de linha de comando chamada

Tipos de dados no SQLite

Em SQLite, diferente de outros motores de banco de dados, o tipo de dado de um valor está associado com o valor propriamente dito, e não com o seu contêiner. É um sistema de tipo dinâmico. Um campo de uma tabela em SQLite pode receber qualquer tipo de dado. Assim, o SQLite simplesmente ignora o tipo informado no comando CREATE TABLE. Então, dizemos que no SQLite existem classes de armazenamento. E essas classes são: NULL - como em qualquer outro banco de dados. INTEGER - inteiro com sinal, armazenado em 1, 2, 3, 4, 6 ou 8 bytes dependendo da grandeza do valor. REAL - valor de ponto flutuante armazenado em 8 bytes. TEXT - uma string armazenada usando UTF-8, UTF-16BE ou UTF-16LE. BLOB - armazena um blob, como indica o nome. Uma coluna INTEGER PRIMARY é uma exceção. Só aceita números inteiros. Qualquer valor em um comando SQL tem uma classe de armazenamento implícita. Durante a execução do comando SQL, o SQLite pode converter valores entre classes numéricas (INTEGER e REAL)