Páginas

sexta-feira, 9 de julho de 2010

Lazarus - Relatório Mestre detalhe com LazReport

Neste post iremos mostrar como criar um relatório mestre detalhe usando o componente LazReport. No artigo Lazarus - Criando relatórios com FortesReport (Parte I) mostramos como instalar o LazReport. Para o exemplo que será criado aqui usaremos o banco de dados Firebird e o conjunto de componentes ZeosLib. Use o seguinte script para criar as tabelas.

O Data Module

Inicie uma aplicação no Lazarus e insira um Data Module. Selecione a aba Zeos Access e coloque um TZConnection no Data Module. Defina as propriedades da seguinte forma:

Database - informe o banco de dados Firebird que foi criado.
Name - dê um nome ao componente. Por exemplo: dbVendas.
Password - masterkey.
Protocol - firebird-2.0 ou a versão que está sendo usada.
User - sysdba.

Mude Connected para true, para verificar se a conexão está configurada corretamente.
Coloque um TZReadOnlyQuery e defina:

Connection - selecione o TZConnection.
Name - defina um nome para o componente. Por exemplo: queVenda.
SQL - select a.id_venda, a.data_venda, b.nome from venda a, cliente b where a.id_cliente = b.id_cliente.

Selecione a aba Data Access e coloque um TDataSource, onde DataSet deve estar associado à Query anterior. Defina Name como dsVenda.

Coloque um segundo TZReadOnlyQuery, defina Connection da mesma maneira e em Name digite queItem, por exemplo. Na propriedade SQL informe select a.id_produto, b.nome, a.quantidade, b.preco_venda, a.quantidade * b.preco_venda total from item a, produto b where a.id_produto = b.id_produto and id_venda = :id_venda.

Defina a propriedade DataSource desta Query com dsVenda. Isto, juntamente com o parâmetro :id_venda definem o relacionamento mestre detalhe entre as duas Queries. O parâmetro :id_venda é definido por queVenda através de dsVenda.

Coloque mais um TDataSource e defina a propriedade DataSet com a Query queItem. Defina Name como dsItem. Salve o Data Module e chame a unit de u_dmdados. Leia mais para conexão com Firebird em Lazarus - Conectando Firebird com SQLdb ou ZeosLib.

O relatório

No form onde será criado o relatório digite logo abaixo de Implementation a linha uses u_dmdados. Localize a aba LazReport e coloque um TfrDBDataSet e defina sua propriedade DataSource como dsVenda, e na propriedade Name digite frDBVenda. Coloque outro TfrDBDataSet e defina sua propriedade DataSource como dsItem, e na propriedade Name digite frDBVenda. Coloque um TfrReport e, na propriedade DataSet informe frDBVenda. Agora coloque um TfrDesigner. Dê um duplo clique no frReport. A seguinte tela deverá aparecer:


Este é o designer do LazReport. Insira uma banda e escolha o tipo Page Header. Coloque um objeto Text e informe o título do cabeçalho, por exemplo, Relação de Vendas. Escolha um tamanho de fonte e centralize o objeto adequadamente na banda.
Insira nova banda e escolha o tipo Master Data. Ele vai abrir uma janela solicitando a escolha de um DataSet. Escolha frDBVenda.


Insira objetos Text de forma que a banda fique como na figura acima. Em um objeto Text é possível digitar um texto, informar uma variável ou um campo de tabela. Do DataSet frDBVenda, informamos o ID, a DATA e o NOME do cliente. Os objetos restantes são todos textos.
Insira outra banda e escolha o tipo Detail Data. Escolha o DataSet frDBItem. Coloque cinco objetos Text e informe os campos ID_PRODUTO, NOME, QUANTIDADE, PRECO_VENDA e TOTAL. Para formatar PRECO_VENDA e TOTAL informe Text da seguinte forma:

[dmDados.zqItem."PRECO_VENDA" #N##,##0.00]


Insira nova banda e selecione o tipo Detail Footer. Coloque dois objetos Text. Em um deles informe Total da venda: No segundo digite:

[SUM([dmDados.zqItem."TOTAL"]) #N##,##0.00]

Esse campo somará o total da venda e o mostrará formatado. Salve o relatório. Dê a ele o nome venda.lrf, por exemplo. Feche e volte ao form. Coloque dois botões. Em um deles digite Editar no Caption. Dê um duplo clique nele e digite no editor de código:

frVenda.LoadFromFile('vendas.lrf');
frVenda.DesignReport;


Esse botão permitirá alterar o desenho do relatório. No segundo botão digite Preview no Caption. Dê um duplo clique e digite no editor de código:

frVenda.LoadFromFile('vendas.lrf');
frVenda.ShowReport;


Este é o botão que visualizará o relatório na tela, conforme mostra a figura a seguir:

Um comentário:

Fernando disse...

Bom dia senhor Carlos!
Sou Fernando, moro na cidade de uruará estado do para, sou programador em pascal e uso lazarus em dois projetos, uma grande dificuldade que tenho em lazarus e manipular o lazreports, em delphi trabalho com reportbuilder ou fastreports o fortes tambem e muito bom, mas em lazarus não temos tantos componentes apezar de o lazreports estar muito bom, ate hoje nao descobri como manipular os memos do lazreports pela aplicacao tipo, colocar um memo do relatorio como visivel em determinada situacao, ou ate mesmo enviar um determinado texto para um memo, sempre tem q estar relacionado a um dataset e fica muito trabalhoso as vezes se puder me passar alguma informacao importante a respeito agradeco muito, meu email e msn pra contato e fpasqueto@hotmail.com desde ja agradeco a sua iniciativa

 
Creative Commons License
This work by Carlos Alberto P. Araújo is licensed under a Creative Commons Atribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil License.