Pular para o conteúdo principal

Lazarus - Dicas de LazReport

Neste post vou apresentar algumas dicas para criar relatórios com mais eficiência em LazReport. No post Lazarus - Criando relatórios com FortesReport (Parte I) eu mostrei como instalar o LazReport e o link para um tutorial que ensina passo a passo como criar um relatório.

Exportando um relatório para PDF

Esse é um procedimento bastante simples, mas é necessário instalar dois pacotes. Para exportar um relatório para PDF você precisa do LazReportPDFExport. Este componente está em source\addons\pdfexport no mesmo diretório do LazReport. Mas este componente depende do PowerPDF. Você pode fazer o download do pacote PowerPDF no repositório de componentes e código Lazarus. Instale o PowerPDF e depois o LazReportPDFExport. O PowerPDF irá aparecer em uma nova aba de componentes e o LazReportPDFExport será um novo componente -TfrTNPDFExport - na aba do LazReport.
Supondo que você já criou o relatório, coloque um TfrTNPDFExport no mesmo form onde está o TfrReport. Execute o seu programa e visualize o relatório. Clique no botão Save report. Clique na caixa Tipo e deve aparecer a opção Adobe Acrobat PDF (*.pdf). Selecione esta opção, dê um nome ao arquivo e pressione o botão Salvar. Agora você tem um arquivo pdf com o seu relatório. Também existem componentes que permitem você exportar para HTML ou CSV.

Object Inspector

Semelhante ao Object Inspector do Lazarus, com ele podemos manipular propriedades de alguns objetos, tais como: nome, posição, tamanho e visibilidade. No LazReport ele é tratado como uma ToolBar. Pode ser mostrado ou ocultado. Para mostrar a janela do Object Inspector selecione Tools -> ToolBars -> Object Inspector. Depois simplesmente selecione um objeto no relatório para visualizar/alterar suas propriedades.

Destacando objetos

Em certos relatórios pode ser necessário mudar a cor da fonte e/ou do fundo de objetos, baseado em certas condições. Para isso selecione o objeto alvo e pressione o botão Highlight attributes na barra de ferramentas de formatação de texto, como mostra a figura abaixo.


Vamos supor que tenhamos um relatório de vendas mensais efetuadas pelos vendedores de uma loja e que a meta para aquele mês seja 10.000 reais. Então, queremos que os valores abaixo de 10.000 apareçam com fonte em vermelho. Na caixa de texto Condition da janela Highlight attributes informe Value < 10000. Selecione a cor da fonte e/ou a cor de fundo e pressione o botão OK. Veja a figura seguinte. Agora o relatório irá mostrar os valores de venda menores que 10.000 em vermelho. Condições mais complexas podem ser criadas usando o recurso de script que será apresentado mais adiante.


Programando eventos

Em certos casos pode ser necessário imprimir dados que não estão em bancos de dados. Uma opção é usar os eventos do componentes TfrReport. Dois desses eventos são OnGetValue e OnEnterRect. OnGetValue ocorre toda vez que um objeto Text encontra uma variável e precisa atribuir um valor a ela. Se a variável não possuir um valor então esse valor é definido através de código, por exemplo:

procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant);
begin
  if ParName = 'Variavel1' then
     ParValue := 100;
end;

Onde ParName tem o nome da variável como string e ParValue recebe o valor dessa variável. Por sua vez o evento OnEnterRect acontece antes que um objeto seja desenhado. Podemos, por exemplo, imprimir um dado bem específico em uma linha ou coluna do relatório.

procedure TForm1.frReport1EnterRect(Memo: TStringList; View: TfrView);
begin
  if (FCol=3)and(FRow=3) then
    view.Memo.Text := 'ALO';
end;

FCol e FRow definem uma coluna e uma linha do relatório respectivamente. No exemplo será impressa a palava ALO na linha 3 e coluna 3.

Programando um script

LazReport possui um interpretador interno semelhante ao Pascal que tem as seguintes características:

  • Operador de atribuição (:=);
  • Estruturas if ... then ... else, while ... do e repeat ... until;
  • Delimitadores de blocos begin e end;
  • Variávies não tipadas;
  • Acesso aos objetos do LazReport e suas propriedades.
Sempre que um objeto ou banda for impresso, o script associado a ele é executado. O editor de script é acessível no editor memo sempre que a caixa Script estiver marcada. Para visualizar o editor memo de um objeto como Text, por exemplo, basta dar um duplo clique nele. Em uma banda tecle CTRL + ENTER. Veja o editor memo abaixo com o editor de script habilitado.


Algumas propriedades de objetos visuais que podem ser usadas nos scripts são:

Visible - determina a visibilidade do objeto (boolean);
FillColor - determina a cor de fundo do objeto. Valores possíveis: clRed, clBlue, etc.;
Text - conteúdo do memo;

Objetos Text tem também as seguintes propriedades:

FontName, FontSize, FontColor - nome, tamanho e cor da fonte;
FontStyle - estilo da fonte (1 - itálico, 2 - negrito e 3 - sublinhado);
Adjust - alinhamento do texto (1 - direita, 2 - centro).

Por exemplo, voltando ao nosso relatório de vendas, vamos supor que queremos imprimir em verde os valores acima do dobro da meta, em vermelho os valores abaixo da meta e em azul os demais. O código ficaria como abaixo, supondo que o valor seja dado por [TotalVendas]:

if [TotalVendas] < 10000 then 
   FontColor := clGreen 
else if [TotalVendas] < 20000 then 
   FontColor := clBlue 
else 
   FontColor := clRed;

Vamos continuar explorando os recursos do LazReport. No próximo post vamos mostrar como criar um relatório mestre-detalhe.

Comentários

Unknown disse…
Carlos,
segui exatamente os passos que estão no exemplo do lazreport 'stringgrid' para imprimir os dados da minha grid, inclusive, achei um how-to igual.
no entanto, nao aparece no relatorio o conteudo da grid, somente o cabeçalho.
Será que falta alguma coisa?
Professor Carlos disse…
Você pode me passar o link do how-to? Vou fazer o exemplo aqui e depois retorno a você.
Unknown disse…
http://groups.google.com/group/lazarus-br/browse_thread/thread/2bb687ea46a99ff4

Professor,
e o mesmo exemplo que vem no pacote do lazreport. segui a risca,
mas nao joga no relatorio o conteudo da stringgrid.

Abração.
Professor Carlos disse…
Funcionou. Respondi no forum também. Se quiser pode me mandar e-mail.
Lewis Lopez disse…
HOLA QUE MAS, HACE RATO QUE QUIERO MiGRAR A LAZARUS PERO AUN EL ROMPE CABEZAS NO ESTÁ COMPLETO, ME GUSTARIA TENER O DESCARGAR EL GENERADOR DE REPORTES DE LASARUZ Y ASI ARMAR EL ROMPE CABEZAS, SI ME PUEDE AYUDAR SE LO AGRADECERIA MUCHISIMO.

GRACIAS.


MI CORREO ES:
lws_1234@hotmail.com O
l1w2s3_1234@yahoo.es
Professor Carlos disse…
O pacote do lazreport pode ser encontrado no diretório /components/lazreport sob o home do lazarus

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