13
Log in / create account freepascal wiki OPEN SOURCE COMPILER FOR PASCAL AND OBJECT PASCAL TUTORIAL DE LAZREPORT From Lazarus-ccr Relatório Vamos usar um demo de banco de dados fornecido pelo Delphi (alias DBDEMOS). Você deve criar uma nova aplicação com o formulário principal chamado Form1. Ponha no formulário os seguintes componentes: TTable: Table1.DataBaseName := DBDEMOS Table1.TableName := ANIMALS.DBF Table1.Active := TRUE TDataSource DataSource1.DataSet := Table1 TfrDBDataSet frDbDataSet.DataSource := DataSource1 TfrReport TfrDesigner 2 TButton Button1.Caption := ' Editing' Button2.Caption := ' Preview' O que resulta em: O LazReport permite associar nomes de variáveis a campos de dados ou valores do sistema, o que possibilita evitar que o usuário final decifre os geralmente pequenos HOME NEWS DOWNLOAD WIKI COMMUNITY DOCUMENTATION BUG TRACKER VIEWS NAVIGATION TOOLBOX WIKI SEARCH Article Discussion Edit History Main Page Documentation FAQ Downloads Glossary Index Recent changes Random page Help What links here Related changes Upload file Special pages Printable version Permanent link Go Search Contents 1 Relatório 2 Funções 2.1 Funções nos dados: 2.2 Funções nos caracteres de conexão: 2.3 Funções Lógicas: Page 1 of 13 Tutorial de LazReport - Free Pascal wiki 18/04/2009 http://wiki.freepascal.org/Tutorial_de_LazReport

Tutorial de LazReport

Embed Size (px)

DESCRIPTION

Informatica Laz Report

Citation preview

  • Log in / create account

    freepascal wiki OPEN SOURCE COMPILER FOR PASCAL AND OBJECT PASCAL

    TUTORIAL DE LAZREPORT

    From Lazarus-ccr

    Relatrio

    Vamos usar um demo de banco de dados fornecido pelo Delphi (alias DBDEMOS). Voc deve criar uma nova aplicao com o formulrio principal chamado Form1.

    Ponha no formulrio os seguintes componentes:

    TTable: Table1.DataBaseName:= DBDEMOS Table1.TableName:= ANIMALS.DBF Table1.Active:= TRUE TDataSource DataSource1.DataSet:= Table1 TfrDBDataSet frDbDataSet.DataSource:= DataSource1 TfrReport TfrDesigner 2 TButton Button1.Caption:= ' Editing' Button2.Caption:= ' Preview'

    O que resulta em:

    O LazReport permite associar nomes de variveis a campos de dados ou valores do sistema, o que possibilita evitar que o usurio final decifre os geralmente pequenos

    HOME NEWS DOWNLOAD WIKI COMMUNITY DOCUMENTATION BUG TRACKER

    VIEWS

    NAVIGATION

    TOOLBOX

    WIKI SEARCH

    ArticleDiscussionEditHistory

    Main PageDocumentationFAQDownloadsGlossaryIndexRecent changesRandom pageHelp

    What links hereRelated changesUpload fileSpecial pagesPrintable versionPermanent link

    Go Search

    Contents

    1 Relatrio 2 Funes

    2.1 Funes nos dados: 2.2 Funes nos caracteres de conexo: 2.3 Funes Lgicas:

    Page 1 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • nomes de campos. Em nosso exemplo vamos tentar criar uma varivel nos campos BMP e NAME na Tabela1.

    Clique em Variables Editor...

    Agora clique no boto Variables para definir o lado esquerdo desta janela.

    Escreva as sentenas conforme indicado na figura acima. Demo Variables representa a categoria e CampoXXXX as variveis. Para diferenciar as duas, as variveis comeam com um espao. Ento clique em OK para ter o seguinte:

    Page 2 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • A categoria disposta na ComboBox de variveis acima. Cada varivel precisa ser associada a um campo. Para isso, selecione a varivel e depois o campo. A varivel Name Field associada ao campo Name da Tabela1.

    Como para as variveis, clique com o boto direito do mouse no componente frReport e ento em New State. Voc abriu o editor:

    Talvez voc tenha notado um pequeno nmero de objetos na barra de objetos.

    Page 3 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • Deve ter visto que os objetos so iguais aos componentes QRLabel, QRMemo, etc, do QuickReport.

    Em nosso relatrio em branco voc deve clicar no tipo de faixa que deseja criar: Selecione o ttulo do estado e clique OK.

    Nesta faixa, adicione um retngulo e o dimensione como quiser. Escolha uma cor para o plano de fundo com o boto Baldinho Cheio, ento clique duas vezes no retngulo para indicar o ttulo.

    Tipo de faixa Uso

    Report title Publicado apenas na primeira pgina

    Report summary Publicado apenas na ltima pgina Page header Publicado no topo de cada pgina

    Page footer Publicado no p de cada pgina

    Master header Publicado no comeo do primeiro nvel (detalhe/barra) Master Data Dados do primeiro nvel

    Master Footer Publicado no final do primeiro nvel

    Detail header Publicado no comeo do segundo nvel (barra/detalhe) Detail Data Dados de segundo nvel

    Detail Footer Publicado no final do segundo nvel

    Subdetail Header Publicados no comeo do terceiro (barra/detalhes) Subdetail Data Dados de terceiro nvel

    Subdetail Footer Publicados no fim do terceiro nvel

    Overlay

    Heading of column Publicado no topo de cada coluna Column base Publicado no comeo do grupo

    Heading of group Publicado no topo de cada pgina

    Foot of group Publicado no final do grupo VarColumn Usado para tabelas cruzadas

    Page 4 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • Na primeira linha deve ser indicado o ttulo do relatrio e na segunda, duas informaes do sistema precisam ser adicionados. Eles so obtidos clicando em DB Field e depois em Other na ComboBox. Agora temos:

    Vamos inserir a faixa como dados mestre, ento clique duas vezes nessa faixa para selecionar frDBDataSet1, a principal fonte de dados do nosso exemplo.

    Na metade esquerda da faixa insira um retngulo e d um duplo clique.

    Aqui podem ser colocados vrios campos, mas pode ser mantido um retngulo para um nico campo a fim de aplicar formatos, por exemplo. A primeira linha Name [Field Name] obtida escrevendo-se Name e ento, com o boto Variable, inserindo a varivel [Field Name] (poderamos ter escrito isto diretamente). Para a segunda linha, Size[[Table1, SIZE]*2.54], ns escrevemos Size e com o boto DB Field escolhemos o tamanho do campo de Table1 e para converter este campo, expresso em polegadas, para centmetros, multiplicamos este campo por 2.54. Pode-se ver o poder do

    Page 5 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • fastreport. Com apenas um retngulo coloca-se em nosso estado, a segunda nomeao, dois campos, incluindo um calculado. Agora no lado direito da faixa selecione uma imagem. Para mostrar sempre a mesma figura, seria suficiente dar um duplo clique nessa figura e carregar a figura desejada. Ns queremos uma figura associada com o pressionamento da tecla F11, para mostrar o Inspetor de Objetos.

    Informe a propriedade do Memo com a propriedade [ImageField]. Isso transforma a figura em um objeto associado com o campo de dados. O nosso primeiro estado est concludo. Deve ser gravado com o mesmo nome rapff. Um clique na pr-visualizaao nos d:

    Agora vamos escrever o cdigo necessrio para carregar e visualizar ou editar o nosso relaltrio rap1frf. Para isto adicione ao projeto o seguinte cdigo:

    Voc tem uma edio com pr-visualizao que d a possibilidade de os usurios finais modificarem o relatrio sem precisar modificar a aplicao bsica.

    Agora vamos adicionar funcionalidades ao nosso exemplo bsico. Voc deve adicionar um componente TButton com a propriedade Caption:= Print; e um TPrintDialog. Obtemos isso:

    Adicione tambm as unidades de impressora na clusula uses do seu formulrio e ponha o seguinte cdigo no evento OnClick do boto Print:

    TForm1.Button2Click(Sender procedure: TObject); begin frReport1.LoadFromFile(' rap1.frf'); FrReport1.ShowReport; end; TForm1.ButtonClick(Sender procedure: TObject); begin frReport1.LoadFromFile(' rap1.frf'); frReport1.DesignReport; end;

    Page 6 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • um pouco longo mas nada impede que voc crie uma classe herdada do TfrReport com um mtodo de impresso ou, mais fcil, crie um procedimento PrintReport(letat: string) que carregue o relatrio e o imprima.

    No menu Edit File > Page Options voc obtm isso:

    Para escolher o tamanho do papel

    TForm1.bPrintClick(Sender procedure: TObject); var

    FromPg, ToPg, Cpy: Integer; ind: Integer; St: String; Collap: Boolean; begin / / Carregar o estado St:=ExtractFilePath(ParamStr(0)); frReport1.LoadFromFile(St+' rap1.frf'); / / Mudando a impressora padro ind: = Printer.PrinterIndex; / / Preparar o estado; para sair se a preparao no funcionar if not frReport1.PrepareReport then Exit; / / inicializa a limpeza do dilogo para edio de parmetros with PrintDialog1 C begin Options:=[poPageNums ]; / / autoriza a seleo de pginas Copies: = 1; / / apenas uma espcie Collate: = True; / / cpias ordenadas FromPage: = 1; / / pgina do comeo ToPage: = frReport1.EMFPages.Count; // ltima pgina MaxPage: = frReport1.EMFPages.Count; / / nmero mximo de pgina if Execute then / / limpeza do dilogo begin if (Printer.PrinterIndex < > ind )/ / a impressora mudou? or frReport1.CanRebuild / / possui uma regenerao de estado? // mudana de impressora or frReport1.ChangePrinter(ind, Printer.PrinterIndex) then frReport1.PrepareReport else Exit; / / a mudana de impressora ocorreu de forma errnea if PrintDialog1.PrintRange = prPageNums then / / fez-se uma seleo de pginas begin FromPg : = PrintDialog1.FromPage; / / primeira pgina ToPg : = PrintDialog1.ToPage; / / ltima end; Cpy :=PrintDialog1.Copies; / / nmero de cpias Collap :=PrintDialog1.Collate; / / exemplares ordenados // recorte de edio da pgina FromPg com ToPg , " Cpy " // exemplares ordenados (Collap)) frReport1.PrintPreparedReport(FromPg, ToPg, Cpy, Collap); end; end; end;

    Page 7 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • Para escolher as margens

    Para especificar o nmero de colunas e o espao entre as colunas.

    No menu principal do editor, selecione File > Report options para mostrar a seguinte caixa de dilogo:

    Aqui voc especifica a impressora necessria para o carregamento de estados e se a preparao feita em duas formas.

    Se voc quer numerar suas pginas com a pgina atual a partir do nmero total de pginas, voc deve escolher a opo Two-pass Report.

    Aqui sero adicionadas ao nosso exemplo algumas variveis no relacionadas aos dados. Elas tornaro possvel, por exemplo, mostrar as diferentes nomeaes de acordo com o contexto. Para isso, abra o editor de relatrios e selecione o menu File e a Lista de Variveis. Com uma varivel Test, como explicado anteriormente, a nica diferena que voc no vai selecionar um campo de valor, mas deixar None (o valor padro). Publique um dos objetos e adicione a varivel Test como visto anteriormente. Retorne ao Delphi (no esquecer de salvar seu relatrio) e publique o evento OnGetValue do componente FrRepor1 adicionando o seguinte cdigo:

    Page 8 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • Ou tambm possvel passar o valor diretamente para a varivel atravs do seguinte cdigo:

    Isto no usado para os dados, mas para permitir formatar os dados com DisplayFormat. Agora vamos ver como criar uma varivel calculada. Como antes, vamos criar uma nova categoria (opcional) e uma varivel. Test Calculation. Selecione uma nova varivel e escolha um valor da ComboBox " Other " e " Expression ". Essa seleo ativa a rea de dados de entrada Expression. Escreva o seguinte: [Table1."SIZE"] + [Table1."WEIGHT"] . Dessa forma voc obter o sumrio dos campos de dados Size e Weight. Voc tambm pode colocar nome nas variveis. E pode utilizar os seguintes operadores:

    Mais frente voc poder dispor dos seguintes funes padronizadas:

    Se no for suficiente voc pode criar suas prprias funes, mas isso ns veremos mais adiante.

    Agora vamos definir um formato para as variveis de uma rea. Um formato vlido para todas as variveis de uma rea de display. Para mostrar o editor de formatos, clique com o boto direito em uma rea e ento em Variable Format.

    procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Varying; VAr fld: TField); begin // trata o caso de variveis no dependentes if UpperCase(ParName)=' TEST' then ParValue:=' Answer: Variable " test1 " '; end;

    procedure TForm1.Button1Click(Sender:TObject); begin frReport1.Values.FindVariable('test').Field := QuotedStr('test1'); frReport1.ShowReport; end;

    Tipos de Operadores Operadores

    Logic >, , > =, < =

    Mathematics -, *, +, MOD, /

    Funo Descrio Exemplos

    SUM SomaAVG Mdia

    MIN Mnimo

    MAX MximoFORMATDATETIME Data e hora formatadas

    FORMATFLOAT Ponto flutuante formatado

    LOWERCASE Letras minsculasNAMECASE Primeira maiscula

    STRTODATE Data para string

    STRTOTIME Hora para stringUPPERCASE Letras maisculas

    Page 9 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • A primeira ComboBox indica o tipo de dado (texto, numrico, data, hora, lgico). A segunda permite selecionar o formato preestabelecido. O tipo Text no permite qualquer formatao e o tipo Number requer um nmero decimal com vrgula. A no ser para os tipos Text e Logic, voc pode usar as funes de formatao do Delphi. Voc pode incluir tambm o conceito de highlighting, que muito til para enfatizar dados. Voc pode especificar uma condio para aplicar o highlighting. Para isso use a palavra-chave Value para indicar o valor da varivel. Aqui requisitado o highlighting para todos os valores maiores que 1000. Por padro o highlighter um simples negrito sobre fundo branco. Voc pode definir esses parmetros para uma rea clicando no boto Realce.

    Ento voc pode definir a cor do plano de fundo, o estilo e a cor da fonte a ser usada selecionando Intesified brightness.

    Funes

    necessrio adicionar ao arquivo FR.lng a linha seguinte:

    FCT = CATEGORY | FCT(, , ) | Help on the function

    onde: FCT o nome da funo. CATEGORY, o nome da categoria. FCT(, , ), a visualizao dos parmetros necessrios, com no mximo 3 parmetros. Help., uma pequena Ajuda que deve tornar possvell ao usurio entender o objetivo da funo. | um separador. Cada parmetro separado por vrgula e pode ser uma expresso, uma constante, uma varivel, um campo ou dados. As constantes de tipo alfanumrico devem ser limitadas por um caractere. As variveir so limitadas por and. Os campos de dados so limitados como as variveis e tem o seguinte formato:

    Dataset_Name. "Field_Name"

    Funes Estatsticas:

    Page 10 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • SUM() . Retorna a soma dos valores dados por , que geralmente um campo de dados.

    AVG() Retorna a mdia dos valores dados por .

    COUNT Meter.

    MIN() Retorna o valor mnimo dos valores dados em .

    MAX() Retorna o valor mximo dos valores dados em .

    Funes nos dados:

    FORMATDATETIME(, ) Retorna os dados abreviados em (TDateTime) < Y > no formato < X >. < X > usa a descrio padro Delphi para formatos.

    FORMATFLOAT(, ) Retorna o numeral < Y > no formato < X >. < X > usa o padro de descrio Delphi para formatos.

    STRTODATE() Retorna a repesentao (TdateTime) da string < X >. < X > deve respeitar o formato de dados

    STRTOTIME() Retorna A representao digital (TDateTime) da string < X >. < X > deve respeitar o formato de horas.

    Funes nos caracteres de conexo:

    LOWERCASE() Retorna a string em letras minsculas.

    UPPERCASE() Retorna a string em maisculas.

    NAMECASE() Retorna a string com a primeira letra maiscula.

    COPY(, , ) Retorna a string na posio < Y > e comprimento< Z >.

    Funes nos numerais:

    FRAC() Retorna a parte decimal do nmero < X >.

    INT() Retorna a parte inteira do nmero < X >.

    ROUND() Retorna o nmero inteiro correspondente ao arredondamento de < X >.

    STR() Retorna a string correspondente de um nmero < X >.

    Funes Lgicas:

    IF(, , ) Retorna < Y > se a expressso < X > verdadeira, se falsa retorna < Z >.

    Para adicionar suas prprias funes realmente muito simples. Aqui um cdigo-fonte para adicionar as funes POS e SQRT:

    Page 11 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • No arquivo FR.lng, anexe as seguintes linhas:

    SQRT = Matemtica e Trigonometria | SQRT() |Retorna a raiz quadrada de POS = Strings | POS(,) Retorna a posio da string em

    Publique um estado, ento em File>List esta janela aparecer:

    Unit FR_OGFct; interface implementation uses FR_Pars, FR_Class; / / Declarao-padro type //Declarao de TBrOGFunctionLibrary TfrOGFunctionLibrary = class(TfrFunctionLibrary) public constructor Create; override; procedure DoFunction(FNo:integer procedure; p1, p2, p3:Variant; var valley:string); override; p3:Variant; var valley:string); end; //************************** / / * TfrOGFunctionLibrary constructor TfrOGFunctionLibrary.Create; begin inherited Create; with List do begin Add('POS'); ADD('SQRT'); end; end; Procedure TfrOGFunctionLibrary.DoFunction(FNo:Integer procedure; p1, p2, p3:Variant; Var valley:String); VAr Par1, Par2: Varying; Result: Variantying; begin Try Case FNo of //FNo um indice das funes declaradas no constructor 0 : Begin //funo POS Par1:=VarToStr(Parser.Calc(p1)); Par2:=VarToStr(Parser.Calc(P2)); Resultat:=Pos(Par1,Par2); end; 1 : Resultat:=SQRT(Parser.Calc(P1)); //funo SQRT end; Except // String resultante se der erro Resultat:='Erreur fonction '+List.Strings[FNo]; end; Val:=VarToStr(Resultat); // String resultante end; Procedure DoInit; begin frRegisterFunctionLibrary(TfrOGFunctionLibrary); end;

    Page 12 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport

  • Voc pode notar o aparecimento de um pequeno boto (...), ativo somente se for o caso de uma expresso. Clique para abrir o editor abaixo:

    Voc pode notar a semelhana. Se clicar no boto Add voc vai carregar o editor de parmetros:

    De acordo com o nmero de parmetros, voc ter mais ou menos zonas de edio. O boto (...) torna possvel abrir o gerador de expresses para informar o parmetro.

    traduo: Ana Carolina Simplicio de Oliveira

    Retrieved from "http://wiki.freepascal.org/Tutorial_de_LazReport"

    This page was last modified 20:21, 24 May 2007.

    Content is available under .

    Page 13 of 13Tutorial de LazReport - Free Pascal wiki

    18/04/2009http://wiki.freepascal.org/Tutorial_de_LazReport