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.
23 Comentários
É 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.
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.
Afinal usa-se o fortes report ou o lazreport?
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.
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.
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...
Qual é especificamente o erro, qual o seu sistema operacional e que versões do Lazarus e do Fortes você está usando?
http://www.youtube.com/watch?v=pS0A4WjxxdE
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
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
Muito Obrigado
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
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.
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.
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??
Obrigado
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