Pular para o conteúdo principal

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:

Comentários

Unknown 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

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)

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