Professional Documents
Culture Documents
Fastreport VCL 5 User'S Manual: © 1998-2014 Fast Reports Inc
Fastreport VCL 5 User'S Manual: © 1998-2014 Fast Reports Inc
User's Manual
Table of contents
Chapter I Designer 2
1 Teclas
...................................................................................................................................
de controle 3
2 Controle
...................................................................................................................................
do mouse 3
3 Barras
...................................................................................................................................
de ferramentas 4
Barra Modo.........................................................................................................................................................
do designer 4
Barra de ferram
.........................................................................................................................................................
entas padr o 4
Barra de ferram
.........................................................................................................................................................
entas Texto 5
Barra de ferram
.........................................................................................................................................................
entas Borda 6
Barra de ferram
.........................................................................................................................................................
entas Paleta de Alinham ento 7
4 Opes
...................................................................................................................................
do designer 9
5 Configura
...................................................................................................................................
o do Relatrio 10
6 Opes
...................................................................................................................................
da Pgina 13
23 Cabealhos
...................................................................................................................................
e rodaps de uma banda de dados 50
24 Relatrios
...................................................................................................................................
com pginas mltiplas 52
25 Propriedades
...................................................................................................................................
RowCount e PageCount 53
Chapter VI Script 81
1 Um...................................................................................................................................
gostinho de script 81
2 Estrutura
...................................................................................................................................
de um script 84
3 Script
...................................................................................................................................
"Ol, Mundo!" 86
4 Usando
...................................................................................................................................
objetos no script 86
5 Chamando
...................................................................................................................................
as variveis da lista de variveis do relatrio 87
6 Referenciando
...................................................................................................................................
os campos de BD 88
7 Utilizar
...................................................................................................................................
funes de agrega o no script 89
8 Exibir
...................................................................................................................................
o valor de uma varivel em um relatrio 89
9 Eventos
................................................................................................................................... 89
10 Exemplo
...................................................................................................................................
de uso do evento "OnBeforePrint" 91
11 Imprimir
...................................................................................................................................
um total de grupo no cabealho do grupo 93
12 Evento
...................................................................................................................................
"OnAfterData" 97
13 Objetos
...................................................................................................................................
de servio 98
Objeto "Report"
......................................................................................................................................................... 98
Objeto "Engine"
......................................................................................................................................................... 99
Objeto "Outline"
......................................................................................................................................................... 100
14 Utiliza
...................................................................................................................................
o do objeto "Engine" 101
15 ncoras
................................................................................................................................... 103
16 Utiliza
...................................................................................................................................
o do objeto "Outline" 105
17 Evento
...................................................................................................................................
de pgina "OnManualBuild" 108
18 Cria
...................................................................................................................................
o de objetos no script 113
1 Tabelas
...................................................................................................................................
de refer ncia cruzada em relatrios matriciais 159
2 Impress
...................................................................................................................................
o de um relatrio matricial 161
3 Objeto
...................................................................................................................................
"Comando" 161
5 Exportar
...................................................................................................................................
o relatrio 211
Exportar .........................................................................................................................................................
para o form ato PDF 212
Exportar .........................................................................................................................................................
para Open Docum ent 214
Exportar .........................................................................................................................................................
ao form ato RTF 215
Exportar .........................................................................................................................................................
para Word 2007 216
Exportar .........................................................................................................................................................
para Excel 97/2000/XP 216
Exportar .........................................................................................................................................................
para o form ato Excel XML 218
Exportar .........................................................................................................................................................
para Excel 2007 219
Exportar .........................................................................................................................................................
para Pow erPoint 2007 220
Exportar .........................................................................................................................................................
para o form ato CSV 220
Exportar .........................................................................................................................................................
para o form ato HTML 221
Exportar .........................................................................................................................................................
para o form ato texto 222
Exportar .........................................................................................................................................................
para os form atos grficos Jpeg, BMP, Gif, Tiff 223
6 Enviar
...................................................................................................................................
um relatrio por e-mail 224
7 Consideraes
...................................................................................................................................
do design do relatrio 226
I
Designer
2 FastReport VCL 5 User's Manual
Observe que alguns botes ficar o ativos quando mais de um objeto for selecionado.
cone Descri o
mostrar grade (ativar/desativar)
alinhar grade (ativar/desativar)
ajustar grade
alinhar bordas esquerdas (ao primeiro objeto
selecionado)
alinhar centros horizontais (ao primeiro objeto
selecionado)
alinhar bordas direitas (ao primeiro objeto
selecionado)
alinhar bordas superiores (ao primeiro objeto
selecionado)
alinhar centros verticais (ao primeiro objeto
selecionado)
possvel configurar a visibilidade e o alinhamento grade. Isso tambm pode ser efetuado
atravs de botes na barra de ferramentas "Padr o", dentro do prprio designer.
possvel configurar uma fonte para a janela do editor de cdigo e o editor do objeto "Texto". Se
a op o "Usar as configuraes de fonte do objeto" for habilitada, a fonte na janela do editor de
texto corresponder com a fonte do objeto que est sendo editado.
ferramentas".
A op o "Cor da grade LCD" aumenta um pouco o contraste das linhas de grade e melhora sua
visibilidade em monitores LCD.
A op o "Mostrar o editor aps inserir" controla o que acontece quando objetos novos s o
inseridos. Se a op o for habilitada, o editor ser exibido cada vez que um objeto for inserido.
recomendado desabilitar a op o ao criar uma grande quantidade de objetos em branco.
Desabilitar a op o "Mostrar rtulos das bandas" oculta os rtulos das bandas, ocupando
assim menos espao na pgina de design. Se forem desabilitados, os rtulos das bandas s o
exibidos dentro do espao de trabalho das bandas.
possvel vincular um relatrio a uma das impressoras instaladas no sistema. Isso significa
que a impressora selecionada se tornar a impressora padr o ao imprimir esse relatrio. Isso
pode ser til quando houver diversas impressoras no sistema; por exemplo, documentos de
texto podem ser vinculados a impressoras monocromticas, e documentos com grficos
podem ser vinculados a impressoras coloridas. "Padr o" listado nas configuraes da
impressora. Quando esta op o estiver selecionada, o relatrio n o ser vinculado a nenhuma
impressora especfica, mas ser impresso na impressora padr o do sistema.
Se o sinalizador "Dois passos" estiver marcado, o relatrio ser gerado em duas etapas. No
primeiro passo criado um rascunho do relatrio que dividido em pginas, mas n o estar
disponvel para visualiza o. No segundo passo o rascunho do relatrio convertido em um
relatrio padr o, que salvo no fluxo de visualiza o.
Por que s o necessrios dois passos? Na maioria das vezes esta op o usada quando um
relatrio precisa ter acesso ao nmero total de pginas no relatrio, por exemplo, para exibir
"Pgina 1 de 15". O nmero total de pginas calculado durante o primeiro passo e
disponibilizado atravs da varivel de sistema "TOTALPAGES". O erro mais frequente tentar
utilizar esta varivel em um relatrio de passo nico, quando a varivel retornar 0.
Outro uso para os dois passos ao executar clculos no primeiro passo e exibir os resultados
no segundo passo. Por exemplo, quando uma soma deve ser exibida no cabealho de um
grupo em vez de no habitual rodap do grupo. Clculos deste tipo s o executados ao escrever
O campo "Senha" habilita a defini o de uma senha, que deve ser inserida antes de abrir um
relatrio.
Mais tarde, no captulo "Herana do relatrio", voc obter mais informaes sobre herana.
Nesta caixa de dilogo possvel ver o nome do relatrio base (se o relatrio for herdado),
desanexar o relatrio base (neste caso seu relatrio ser autnomo e n o herdado) ou herdar o
relatrio a partir de um dos relatrios base disponveis.
Todos os campos nesta guia servem apenas para fins informativos e n o podem ser
impressos.
Na segunda guia da caixa de dilogo possvel definir o nmero de colunas para relatrios com
vrias colunas. As configuraes atuais tambm s o exibidas no designer.
O sinalizador "Imprimir para pgina anterior" permite imprimir pginas sem iniciar uma pgina
nova. Em vez disso o comeo ser em qualquer espao em branco na pgina anterior. Esta
op o pode ser til quando o modelo de um relatrio contm diversas pginas ou ao imprimir
relatrios em lote (compostos).
II
Criar relatrios
Criar relatrios 17
- Objeto "Banda": uma rea na pgina do designer que se comporta de acordo com seu tipo
(por exemplo, Banda de cabealho, Banda de dados)
- Objeto "Texto": exibe uma ou mais linhas de texto dentro de uma rea retangular
- Objeto "Figura": exibe um arquivo grfico no formato "BMP", "JPEG", "ICO", "WMF" ou
"EMF"
- Objeto "Linha": exibe uma linha horizontal ou vertical
- Objeto "Texto do sistema": exibe informaes do sistema (data, hora, nmero da pgina,
etc.) ou valores agregados
- Objeto "Sub-relatrio": permite inserir uma pgina de design de outro relatrio na pgina
host
- Objetos da categoria "Desenhar": exibem diversas formas geomtricas (linha diagonal,
retngulo, retngulo arredondado, elipse, tringulo e diamante)
- Objeto "Grfico": exibe dados em diversos formatos grficos (grfico de pizza, histograma,
etc.)
- Objeto "RichText": exibe texto no formato Rich Text (RTF)
- Objeto "Caixa de Sele o": exibe uma caixa de sele o com uma marca de sele o ou
uma cruz
- Objeto "Cdigo de Barras": exibe os dados como um entre diversos tipos de cdigos de
barra
- Objeto "OLE": exibe qualquer objeto usando a tecnologia OLE.
Os objetos bsicos usados com maior frequncia s o os objetos "Banda" e "Texto". Voc
saber mais sobre suas funcionalidades mais adiante neste captulo.
clique duas vezes no objeto. A abertura do editor de texto pode ser configurada nas
configuraes do designer isso ser visto mais adiante. Digite "Ol, Mundo!" e clique no bot o
OK.
O design do relatrio est concludo. Para visualizar o relatrio, selecione o item de menu
"Arquivo > Visualizar" ou clique no bot o correspondente na barra de ferramentas. A janela de
visualiza o que contm a pgina do relatrio com o texto "Ol, Mundo!" exibida. Este
relatrio pode ser impresso, salvo em um arquivo (*.fp3) ou exportado para um dos formatos de
exporta o suportados.
Agora vamos dar uma olhada em outros recursos deste objeto bsico. Como exemplo,
criaremos um novo objeto "Texto" que exibir duas linhas de texto:
Habilite a borda do objeto na barra de ferramentas e redimensione o objeto para 9x3 cm usando
o mouse. Vemos que o objeto pode n o apenas exibir uma nica linha, mas diversas linhas de
texto. Agora reduza a largura do objeto para 5 cm. bvio que linhas longas n o couberam no
objeto e foram quebradas. Isso controlado atravs da propriedade "WordWrap" do objeto. Se
ela for desabilitada (no inspetor de objetos ou atravs do menu de contexto do objeto), linhas
longas ser o apenas cortadas.
Todo o texto no objeto pode ser girado em qualquer ngulo no intervalo 0...360. O bot o na
barra de ferramentas "Texto" permite girar o texto rapidamente para as predefinies 0, 45, 90,
180 ou 270. Para qualquer outro valor, configure o ngulo desejado na propriedade "Rotation"
no inspetor de objetos. Ao girar texto em ngulos diferentes de 90, 180 ou 270, o texto pode ser
cortado pelo quadro do objeto, conforme mostrado abaixo. Para resolver isso, aumente
levemente a altura do objeto para que todo o texto caiba dentro do objeto.
Vamos dar uma olhada rpida em outras propriedades do objeto "Texto" que influenciam sua
aparncia. A maior parte destas propriedades est o disponveis apenas no inspetor de objetos:
Observe que somente algumas tags s o suportadas, mas isso deve ser suficiente para a maior
parte das aplicaes. N o possvel alterar o tamanho ou nome da fonte atravs de tags
HTML.
Como isso acontece? Quando FastReport cria o relatrio e encontra uma express o entre
colchetes, o mecanismo de relatrios calcula o valor da express o e insere este valor no texto
no lugar da express o. Objetos "Texto" podem conter inmeras expressres misturadas ao
texto normal. Expresses complexas podem conter parnteses (por exemplo [1+2*(3+4)]).
Constantes, variveis, funes e campos de BD podem ser usados em expresses. Iremos
aprender mais sobre eles mais tarde neste captulo.
a[1] := 10
a1 := 10
o que n o desejamos que acontea, claro. Uma maneira de evitar isso desabilitar o
reconhecimento de expresses. Desabilite a propriedade "AllowExpressions" (ou "Permitir
a[1] := 10
Porm, s vezes, necessrio que um texto tenha tanto uma express o quanto texto normal
entre colchetes, por exemplo:
a[1] := [myVar]
Desabilitar "AllowExpressions" nos permite exibir colchetes nos lugares necessrios, mas
tambm desabilita a manipula o de expresses. Nesta situa o, o FastReport permite a
utiliza o de um conjunto de smbolos alternativo para designar expresses. Por padr o, a
propriedade "ExpressionDelimiters" responsvel por isso. Em nosso exemplo podemos usar
chevrons para as expresses, em vez de colchetes:
a[1] := <myVar>
a[1] := <%myVar%>
Agora vamos adicionar alguns objetos. Adicione um objeto "Texto do Sistema" banda
"CabealhoDaPgina" e em seu editor selecione "[DATE]" na lista suspensa de variveis do
sistema (lembre-se que a data atual tambm pode ser exibida em um objeto "Texto" ao digitar
"[DATE]" em seu editor). Depois adicione um objeto "Texto" contendo "Oi!" banda
Ao executar o relatrio, voc ver que os objetos no relatrio pronto s o impressos nas
posies corretas na pgina.
Para deixar o componente Delphi (e os dados conectados a ele) disponvel para o relatrio,
qualquer conjunto de dados usado no relatrio deve ser habilitado. Faa isso no item de menu
"Relatrio > Dados..." no designer do FastReport e selecione os conjuntos de dados
necessrios na caixa de dilogo que aberta.
TableName = 'Customer'
Agora a tabela e todos os seus campos se tornar o visveis no painel "rvore de Dados" no
IDE.
Agora vamos fazer o design do relatrio. Primeiro adicione um objeto "Texto" que contm "Lista
de clientes" banda "TtuloDoRelatrio".
Depois conecte a banda "DadosMestre" a nosso conjunto de dados. Isso pode ser feito de trs
maneiras:
Agora coloque quatro objetos "Texto" (que ir o exibir os campos nmero do cliente, nome do
cliente, telefone e fax do conjunto de dados) na banda. Faremos isso de maneiras diferentes
para demonstrar alguns recursos do designer do FastReport.
DataSet = ADOTable1
DataField = 'Company'
Ambas as propriedades s o apresentadas como uma lista, ent o apenas selecione o valor
necessrio da lista suspensa usando o mouse.
A terceira maneira "arrastar e soltar" o campo necessrio do painel "rvore de Dados" para
dentro do relatrio. Esta a maneira mais simples e mais fcil, mas antes de fazer isso,
desmarque a caixa de sele o "Criar rtulo" na parte inferior do painel de "rvore de Dados", ou
um segundo objeto "Texto", que contm o nome do campo, criado junto ao objeto link do
campo. Desta maneira, selecione o campo "Phone" e arraste-o para a banda.
Observe como devem ser usados colchetes e chevrons. Lembre-se de que colchetes s o
usados por padr o para delimitar expresses no texto do objeto. Quando necessrio, os
colchetes podem ser substitudos por qualquer outro par de caracteres de abertura/fechamento
(consulte a se o "Exibir expresses com a ajuda do objeto 'Texto'"). Chevrons s o usados
dentro de expresses para delinear as variveis do FastReport ou campos de BD. De maneira
lgica, deveramos escrever:
em vez de
2.11 Aliases
No relatrio anterior, a fonte de dados se chamava ADOTable1, os campos eram chamados
"CustNo", "Company", "Phone" e "FAX", e ns nos referimos a eles no relatrio usando algo
parecido com "[ADOTable1.CustNo"]". Isso fcil de entender? N o exatamente. Seria mais
claro se a fonte de dados e o campo fossem chamados "Nossos clientes" e "Nmero",
respectivamente. No entanto, h uma maneira de evitar isso. Podemos usar pseudnimos ou
aliases para esses itens. No FastReport, tanto o conjunto de dados como seus campos
possuem uma segunda propriedade de nome conhecida como UserName, ou seja, um alias,
que pode ser alterada com facilidade. Sempre que for dado um alias a um componente (ou
seja, UserName foi alterado do seu nome padr o), este alias deve ser usado no FastReport a
muito fcil configurar aliases para uma fonte de dados e seus campos no FastReport. Para
abrir o editor de alias, clique duas vezes no componente ADOTable1 ou use seu menu de
contexto. possvel modificar o conjunto de dados e os aliases dos campos no editor, e
tambm especificar quais campos s o necessrios no relatrio. Vamos renomear o conjunto
de dados e os campos conforme visto abaixo:
O alias do conjunto de dados tambm pode ser modificado sem usar o editor de alias, ao
alterar a propriedade "UserName" do componente ADOTable1.
Tendo feito isso, agora precisamos modificar o relatrio, j que os nomes do relatrio e os
campos foram alterados. Para modificar os nomes dos campos em objetos do relatrio, mais
fcil usar o quarto mtodo descrito na se o "Relatrio 'Lista de Clientes'". Mova o cursor sobre
o objeto "Texto", de modo que o bot o aparea no lado direito do objeto, clique no bot o e
selecione o campo da lista. Aps fazer isso a origem dos dados no conjunto de dados e seus
campos se torna mais aparente.
Observa o: melhor atribuir aliases no incio do design do relatrio, a fim de evitar renomear
todos os campos em um relatrio mais tarde.
2.12 Variveis
Assim como aliases, h outra maneira de ajudar o designer do relatrio a definir nomes mais
inteligveis para campos de BD e outros elementos de informa o. Um nome de campo de BD
ou qualquer express o podem ser associados a uma varivel. Para criar e trabalhar com
variveis no FastReport, selecione o item de menu "Relatrio > Variveis...".
A lista de variveis no FastReport possui uma estrutura de dois nveis. O primeiro nvel contm
a categoria e o segundo nvel contm a varivel em si. Esta categoriza o de variveis
conveniente quando a lista de variveis for muito longa. Uma lista de variveis deve conter pelo
menos uma categoria, o que significa que variveis n o podem estar localizadas no nvel
superior. Alm disso, nomes de categorias n o podem ser includos em relatrios, ent o cada
nome na lista deve ser nico.
Vamos ilustrar o uso de variveis com o seguinte exemplo. Assumiremos que temos duas
fontes de dados: a primeira "frxDBDataSet1", com os campos "CustNo" e "Name", e a
segunda "frxDBDataSet2", com os campos "OrderNo" e "Date". Podemos associar a
seguinte lista de variveis aos campos:
Clientes
Nmero do cliente
Nome do cliente
Pedidos
Nmero do pedido
Data do pedido
onde "Clientes" e "Pedidos" s o duas categorias. Abra o editor de variveis e crie esta estrutura
usando os botes "Nova Categoria", "Nova Varivel" e "Editar". Para vincular as variveis aos
campos de BD, selecione uma varivel e clique duas vezes no campo de BD necessrio no
painel direito. O link ao campo do BD ser exibido no painel inferior. A varivel agora est
associada a esta express o, ent o o valor da varivel se torna o valor da express o. Se for
necessrio, a express o pode ser editada ou modificada manualmente, e qualquer fun o do
FR ou outras variveis podem ser usadas nela. Lembre-se que categorias n o devem ser
associadas a expresses.
Aps criar a lista de variveis, feche o editor de variveis. Agora podemos inserir as variveis no
relatrio. Ao contrrio de campos de BD, h um nmero menor de mtodos de inser o.
Podemos inserir uma varivel no texto do objeto manualmente ao digitar "[Nmero do cliente]",
ou podemos arrastar uma varivel do painel "rvore de Dados" para a pgina do relatrio. Neste
caso necessrio abrir a guia "Variveis" neste painel.
geradas pelo relatrio. Observa o: apesar destas bandas de dados terem tipos como
Mestre, Detalhe, etc., isto somente designa a rela o de locais na hierarquia de
posicionamento das bandas nas pginas de sada. As relaes de dados dependem das
relaes de tabela/consulta nos frxdbdatasets conectados. Cada nvel de banda de dados
requer um "TfrxDbDataset" separado ou uma associa o equivalente.
Vamos dar uma olhada nas funcionalidades deste objeto. Crie um relatrio em branco e
coloque um objeto "Figura" na pgina do relatrio. Se o editor de figura n o abrir
automaticamente, clique duas vezes no objeto "Figura". Voc pode carregar qualquer figura de
um arquivo grfico ou apagar a figura existente e fechar o editor ao clicar na marca de sele o
verde.
- Tamanho Automtico
- Esticar: ativado por padr o
- Centro
- KeepAspectRatio: ativado por padr o
"Esticar" ativado por padr o. Esta propriedade estende a figura dentro do objeto. Altere o
tamanho do objeto usando o mouse e voc ver que toda a figura sempre exibida dentro do
quadro do objeto. Se "Esticar" for desativado, a figura (ou somente parte dela) exibida em seu
tamanho original. Este comportamento difere de "Tamanho Automtico" porque voc tem
controle sobre o tamanho do quadro do objeto, que pode ser maior o menor que a figura que
contm. Com "Tamanho Automtico" ativado, voc n o possui nenhum controle sobre o
tamanho do quadro do objeto.
"KeepAspectRatio" ativado por padr o. Ela evita que a figura seja distorcida quando o
tamanho do objeto for modificado. Esta propriedade somente efetiva quando "Esticar"
tambm estiver ativado. Quando "KeepAspectRatio" estiver ativado, um crculo desenhado
permanece sendo um crculo sem se tornar um oval, n o importando o tamanho do objeto
"Figura". A figura estendida ocupa somente a parte do espao interno do objeto que
necessria para exib-la com a taxa de propor o correta. Quando desativado, a figura
estendida para preencher o quadro do objeto e ser distorcida se a taxa de propor o do
quadro n o for a mesma da figura.
Outra propriedade til que est disponvel somente no inspetor de objetos "FileLink". Ao inserir
o nome de um arquivo, como c:\figura.bmp, ou uma varivel que contm o nome de um
arquivo, como [figura_arquivo], ir carregar a figura do arquivo nomeado ao executar o relatrio.
Vamos demonstrar isso com um relatrio que exibe os nomes e as imagens de alguns peixes.
Crie um novo relatrio, coloque o componente "ADO Table" no relatrio e configure estas
propriedades:
TableName = 'Biolife'
UserName = 'Bio'
Agora iremos adicionar objetos pgina do relatrio. Coloque um objeto "Texto" que contm
"Peixe" na banda "TtuloDoRelatrio". Conecte a banda "DadosMestre" fonte de dados (clique
duas vezes na banda e selecione "Bio" da lista). Aumente a altura da banda para 5 cm ao
arrastar a parte inferior da banda para baixo ou ao usar o inspetor de objetos. Coloque um
objeto "Texto" na banda e conecte-o ao campo "CommonName", usando qualquer um dos
mtodos j descritos. Depois disso, coloque um objeto "Figura" ao lado e conecte-o ao campo
"Grfico" ao configurar suas propriedades no inspetor de objetos.
DataSet = Bio
DataField = 'Graphic'
Observe que ambas as propriedades s o do tipo "Lista" e podem ser configuradas com os
valores necessrios usando o mouse. Para criar espao para a figura, estenda o objeto para 4
x 2,5 cm.
O design do relatrio agora est concludo, e ele produz o relatrio mostrado abaixo:
primeira vista, isso parece fcil adicionar um objeto "Texto" banda de dados entre os
objetos existentes, conect-lo ao campo "Notes" e configurar o tamanho do objeto como 8 x 2,5
cm. No entanto, a visualiza o do relatrio n o mostra exatamente o que desejamos:
FastReport executou exatamente o que foi instrudo a fazer. O campo "Notas" contm um texto
com vrias linhas de comprimentos variados, porm o objeto "Texto" que exibe as informaes
deste campo tem um tamanho fixo. por isso que algumas linhas parecem cortadas. O que
pode ser feito a respeito?
claro que o tamanho do objeto pode ser aumentado ou o tamanho da fonte pode ser reduzido.
No entanto, isso pode levar perda de espao na pgina de sada, j que alguns peixes
possuem descries longas, e outros possuem descries curtas. O FastReport tem algumas
propriedades que nos permitem solucionar este problema.
Essas propriedades permitem que uma banda ou um objeto ajustem sua altura
automaticamente para criar o espao necessrio para um registro (fileira). Para obter isso,
precisamos apenas ativar a propriedade "Esticar", tanto da banda como do objeto "Texto". No
entanto, isso n o tudo, j que um objeto "Texto" com texto mais longo deve ser capaz de se
estender automaticamente. Para isso precisamos configurar outras propriedades tambm.
O objeto "Texto" capaz de definir sua altura e largura automaticamente para criar espao para
seu contedo. "AutoWidth" e "EsticarMode" podem ser usado para isso. "AutoWidth" permite
que o objeto texto varie sua largura, para que todas as linhas criem espao sem dividir
nenhuma palavra. Este modo til quando um objeto possui uma nica linha de texto, e quando
o aumento de tamanho direita n o afeta outros objetos. A propriedade "Esticar" permite que a
altura de um objeto aumente para acomodar o texto, sem alterar a largura do objeto. "Esticar"
tem diversos modos que podem ser selecionados no inspetor de objetos:
Como voc pode ver, ao criar o relatrio, o FastReport preenche os objetos com dados e os
estende se "Esticar" for habilitado. Ele ent o calcula a altura da banda para que cada objeto
tenha espao suficiente. Se a propriedade "Esticar" da banda for desabilitada, este ajuste de
altura n o executado e a banda exibida na altura definida no design. Neste caso, veramos
que objetos com texto mais longo seriam estendidos, mas a banda n o o seria, o que levaria
sobreposi o do texto, j que a banda seguinte seria exibida imediatamente aps a anterior.
Nosso relatrio contm um objeto com texto longo, e por isso que a altura da banda
bastante grande. Alm disso, se uma banda grande n o possuir espao suficiente em uma
pgina, ela deslocada para a prxima, deixando muito espao em branco na parte inferior da
pgina, como mostrado aqui:
Para limitar o desperdcio de papel, vamos usar um recurso do FastReport que transforma o
contedo de uma banda em pargrafos. Tudo que precisamos fazer habilitar a propriedade
"AlllowSplit" da banda "Dados de 1o. Nvel". Voc ver que agora h menos espao vazio na
parte inferior das pginas do relatrio:
Como funciona essa divis o de bandas? H alguns objetos no FastReport que suportam este
recurso. Eles s o os objetos "Texto", "Linha" e "RichEdit". Eles podem ser "divididos", e outros
objetos n o podem. Quando FastReport precisa dividir uma banda, ele o faz da seguinte
maneira:
Deve ser observado que o algoritmo de divis o n o perfeito, e que a sada final pode n o ser
igual ao esperado. Esta op o deve ser usada com muito cuidado em casos onde objetos na
banda dividida s o agrupados de maneira complexa ou o tamanho das fontes difere. Segue um
exemplo do que pode ser gerado.
Adicione mais um objeto "Texto" banda de dados abaixo do objeto Bio."Notes", conforme
mostrado aqui:
Iremos desabilitar o Esticar no objeto Bio."Notes" e habilit-lo no objeto inferior. Para fazer o
texto "fluir" do objeto Bio."Notes" para o objeto inferior, configure a propriedade "FlowTo" do
objeto Bio."Notes" no inspetor de objetos uma lista suspensa. Selecione o nome do objeto
inferior nesta lista. O relatrio resultante ter a seguinte aparncia:
Quando o relatrio for gerado, se o texto n o couber no objeto superior, o excesso deslocado
para o objeto inferior. Ao arranjar os dois objetos em volta da imagem, obtido o efeito da
quebra automtica de linha.
Observe: o objeto principal deve ser inserido no relatrio antes de inserir o objeto vinculado, ou
de outro modo o fluxo do texto pode n o funcionar corretamente! Se isto ocorrer, selecione o
objeto vinculado e traga-o para a frente usando o item de menu "Editar > Trazer para Frente".
O primeiro tipo de tabela, e tambm o mais simples, tem uma borda completa nas clulas.
Para obter isso, habilite todas as linhas da borda (encontradas na propriedade Frame.Typ) para
cada objeto:
O prximo tipo de borda desenha somente linhas de clulas horizontais ou verticais, novamente
usando a propriedade Frame.Typ:
Finalmente, para desenhar apenas uma borda externa para a tabela, o relatrio precisa ser
modificado:
Voc pode ver que adicionamos dois objetos "Texto", um na banda de cabealho da pgina e
outro na banda de rodap da pgina. As linhas de borda apropriadas para os objetos nas
bordas da banda de dados foram habilitadas, resultando em um relatrio com o seguinte
aspecto:
Todos esses exemplos continham bandas que tinham tamanhos fixos. Como possvel exibir
uma tabela quando a banda estendida? Vamos explicar como isso feito atravs de um
exemplo. Adicione um campo novo (um texto com vrias linhas de Bio."Notes") a nosso
relatrio. Como voc j aprendeu, a propriedade "Esticar" deve ser habilitada tanto para este
objeto como para a banda no qual o objeto est localizado, para que a altura da banda seja
alterada dependendo do tamanho do texto no objeto "Texto". O relatrio gerado tem este
aspecto::
Isso difere um pouco do que precisamos a aparncia melhor se as bordas dos objetos
vizinhos tambm s o estendidas. O FastReport pode solucionar este problema com facilidade.
Configure a propriedade "StretchMode" como smMaxHeight no inspetor de objetos para todos
os objetos que devem ser estendidos, e o ncleo do FastReport calcular a altura de banda
mxima e "estender" objetos que tm Esticar habilitado at a extremidade inferior da banda. J
que bordas de objetos s o estendidas juntas com o objeto, a aparncia do relatrio alterada:
Observe que h muito espao vazio direita da pgina. Para usar toda a pgina, possvel
configurar o nmero de colunas nas quais s o exibidos os dados nas configuraes da pgina
do relatrio. Para fazer isso, clique duas vezes no espao vazio na pgina de design ou use
"Arquivo > Configuraes da Pgina..." no menu.
O relatrio agora criado da seguinte maneira. FastReport repete a banda "Dados de 1o. Nvel"
enquanto houver espao em branco na parte inferior da pgina. Depois disso, criada uma
nova coluna na mesma pgina e as bandas de dados continuam a ser repetidas a partir do topo
da coluna nova. Isso difere de relatrios simples, nos quais criada uma nova pgina em vez
de uma coluna nova. Quando a segunda coluna tiver sido preenchida, criada uma terceira
coluna, e assim por diante apesar de nosso exemplo possuir somente duas colunas. Quando
todas as colunas tiverem sido preenchidas, o FastReport cria uma nova pgina e continua
exibindo os dados, comeando novamente pela primeira coluna.
Este design exibe os dados na ordem 'esquerda para a direita e depois de cima para baixo'.
Aqui o primeiro objeto de campo Bio."Common Name" contm muito texto e estendido por
duas linhas. Isso causa o deslocamento para baixo do objeto de campo Bio."Length (cm)",
localizado abaixo do primeiro. Isso acontece porque todos os objetos possuem a propriedade
"ShiftMode" configurada como smAlways como padr o, o que significa que eles s o
deslocados para baixo se houver um objeto extensvel (um objeto "Texto" com a propriedade
"Esticar" habilitada) sobre eles. A distncia do deslocamento depende de quanto o objeto acima
estendido.
Mas n o desejamos que isso acontea com nosso rtulo. Ns queremos que o objeto
"Comprimento, cm:" tambm seja deslocado igualmente. Isso pode ser obtido ao usar uma
banda de FastReport especial chamada de banda "Filho". Uma banda "Filho" vinculada a (e
exibida aps) uma banda pai. Adicione uma banda "Filho" ao design e arraste os dois objetos
"Texto" para dentro dela, conforme mostrado aqui:
Vincule a banda DadosMestre banda Filho ao configurar sua propriedade "Child" como
"Child1" no inspetor de objetos. Agora, cada vez que a banda DadosMestre for impressa, a
banda Filho impressa imediatamente depois dela:
O ttulo "Comprimento, cm:" agora est alinhado corretamente com seu campo de valor "50".
Para prevenir que uma banda filho seja movida para a prxima pgina se n o houver espao
livre suficiente na pgina (e se tornando 'rf ' de sua banda pai), habilite a propriedade
"KeepChild" da banda pai no inspetor de objetos.
Isso permite a cria o de relatrio complexos, especialmente em casos nos quais um objeto
pode sobrepor diversos outros objetos acima dele ao mesmo tempo. No exemplo abaixo, todos
os objetos superiores contm texto extensvel, e todos os objetos inferiores est o no modo
'smWhenOverlapped'. Os objetos inferiores sempre ser o exibidos perto do objeto que estiver
acima, n o importando o comprimento do texto dos objetos superiores:
Vamos ver como fazer o design de um relatrio com dois nveis de dados. O relatrio ir exibir
dados das tabelas de demonstra o "Customer" e "Orders". A primeira tabela uma lista de
clientes e a segunda uma lista de pedidos feitos por esses clientes. As tabelas contm dados
nos seguintes campos:
Customer:
CustNo Company
1221 Kauai Dive Shoppe
1231 Unisco
1351 Sight Diver
.
Orders:
Como voc pode ver, a segunda tabela contm a lista de todos os pedidos feitos por todos os
clientes. Para ver os pedidos da tabela Orders que foram feitos por um cliente da tabela
Customers, as duas tabelas s o vinculadas no campo "CustNo", que comum a ambas as
tabelas. A sada do relatrio desses dados deve ter este aspecto:
1231 Unisco
1060 28.02.1989
Let's design the report. Create a new project in Delphi, place two TTable, one "TDataSource",
two TfrxDBDataSet and one TfrxReport components on the form. Set the component
properties as shown here:
Table1:
DatabaseName = 'DBDEMOS'
TableName = 'Customer.db'
Table2:
DatabaseName = 'DBDEMOS'
TableName = 'Orders.db'
DataSource1:
DataSet = Table1
frxDBDataSet1:
DataSet = Table1
UserName = 'Customers'
frxDBDataSet2:
DataSet = Table2
UserName = 'Orders'
Crie um relatrio novo. Coloque duas "Tabelas ADO" na pgina e configure suas propriedades:
ADOTable1:
TableName = 'Customer'
UserName = 'Customers'
ADOTable2:
TableName = 'Orders'
UserName = 'Orders'
Agora adicione uma banda "Dados Mestre" e uma "Dados de Detalhe" pgina:
Observe que a banda "DadosMestre" deve ser colocada acima da banda "DadosDeDetalhe"!
Arraste-a para l se necessrio. Se a banda Mestre for colocada embaixo da banda Detalhe, o
FastReport ir gerar uma mensagem de erro ao visualizar o relatrio.
Se voc visualizasse o relatrio agora, voc veria que a lista de pedidos permaneceria igual
para todos os clientes e iria conter todos os registros da tabela "Orders". Isso aconteceria
porque a propriedade MasterSource da tabela "Orders" n o foi configurada. Configure
"MasterSource ADOTable1" no componente "ADOTable2". Agora configuramos uma rela o
'mestre-detalhe'. Depois disso, selecionamos os campos a serem vinculados. Configure a
propriedade "MasterFields" do componente "ADOTable2".
Precisamos vincular os campos "CustNo" das duas fontes. Para fazer isso, selecione os
campos desejados e clique no bot o "Adicionar". A vincula o do campo ser exibida no painel
inferior. Conclua ao fechar o editor clicando em OK.
Vamos dar uma olhada em um exemplo mais complexo que utiliza dois nveis de dados
mestre e detalhe:
Como voc pode ver, o cabealho exibido antes de todos os registros de bandas de dados.
Deste modo, o cabealho dos dados mestre exibido primeiro, no incio do relatrio, e um
cabealho de dados detalhe exibido antes de cada grupo de bandas detalhe que pertencem
banda de registros mestre atual. O rodap de detalhe exibido depois do grupo de bandas
detalhe que pertencem banda de registros mestre, e o rodap mestre n o exibido at que
todos os registros da banda de dados mestre sejam exibidos.
Quando um relatrio novo criado no designer, ele contm uma pgina por padr o. possvel
adicionar uma pgina nova ao clicar no bot o na barra de ferramentas ou ao selecionar o
comando de menu "Arquivo > Nova Pgina". Ent o voc veria que exibida uma nova guia de
pgina no designer:
fcil alternar as pginas ao clicar nas guias de pginas. As guias de pginas podem ser
arrastadas ("arrastar e soltar") para mudar sua ordem de impress o com facilidade. Uma
pgina desnecessria pode ser excluda com o bot o na barra de ferramentas, ou ao
selecionar o comando de menu "Editar > Remover Pgina". Tambm possvel usar o menu
de contexto ao clicar com o bot o direito na guia da pgina:
Aqui h um exemplo simples de como criar uma pgina de ttulo. Vamos usar nosso relatrio
anterior que possui um nvel de dados. Adicione uma nova pgina a ele e ela ser adicionada
como uma segunda pgina. Mova-a para a frente do relatrio ao clicar na guia Page2 e arrast-
la sobre a guia da primeira pgina, Page1. Isso altera a ordem das pginas. Selecione a pgina
nova e coloque um objeto "Texto" contendo "Nosso relatrio" no meio da pgina. Isso tudo. O
relatrio com uma pgina de ttulo est concludo:
III
Grupos e
agregados
56 FastReport VCL 5 User's Manual
Para fazer isso necessrio uma consulta SQL que retorna dados de ambas as tabelas
ordenado de maneira especfica. Em nosso exemplo, as tabelas ser o unidas nos campos
"CustNo", que est o presentes em ambas as tabelas. A consulta pode ser:
A linha "order by" necessria para ordenar os registros no campo "CustNo". Esta consulta
retorna um conjunto de dados parecido com isto:
Como possvel fazer o design de um relatrio de vrios nveis usando estes dados? No
FastReport h uma banda especial, o "Cabealho de Grupo". Uma condi o (um campo de BD
ou uma express o) especificada para a banda; a banda exibida sempre que o valor da
condi o for alterado. O exemplo a seguir ilustra isso.
SQL =
select * from customer, orders
where orders.CustNo = customer.CustNo
order by customer.CustNo
UserName = 'Group'
Depois adicione uma banda "Cabealho de Grupo" ao relatrio. Defina uma condi o (neste
caso o campo de dados "Group.CustNo") no editor da banda "Cabealho de Grupo":
Tambm vincule a banda de dados fonte de dados "Group" e arranje alguns objetos como
mostrado abaixo (observe que o cabealho do grupo deve ser colocado acima da banda de
dados):
Como voc pode ver, a banda "Cabealho de Grupo" exibida somente quando o valor do
campo ao qual vinculada alterado. Caso contrrio, a banda de dados conectada ao conjunto
de dados "Group" exibida. Se compararmos este relatrio ao relatrio mestre-detalhe criado
anteriormente, bvio que os nmeros de pedidos n o s o ordenados. Isso pode ser corrigido
com facilidade ao alterar a clusula 'order by' da consulta SQL:
possvel fazer o design de relatrios que possuam grupos aninhados de maneira similar. A
profundidade de grupos aninhados ilimitada. Relatrios que usam grupos tm algumas
vantagens sobre relatrios do tipo mestre-detalhe:
Ao olhar para o relatrio, n o claro a qual cliente se refere a lista de pedidos no topo da
segunda pgina. FastReport permite que o cabealho do grupo seja exibido na pgina nova (o
que em nosso caso identifica o cliente). Para fazer isso, habilite a propriedade
"ReprintOnNewPage" da banda "Cabealho do Grupo" usando o inspetor de objetos ou o menu
de contexto. Isso ir alterar o relatrio desta maneira:
H outra maneira de evitar quebrar grupos nos limites de pginas, que habilitar a propriedade
"KeepTogether" do cabealho do grupo no inspetor de objetos ou no menu de contexto. Dessa
maneira, se o grupo inteiro n o couber no espao livre na pgina de sada, ele movido inteiro
para uma pgina nova. Em nosso exemplo, ele exibido deste modo:
Pode haver muito espao vazio em algumas pginas, mas, sempre que possvel, o grupo
exibido de forma completa em uma pgina.
Aqui est um exemplo: voc criou um relatrio que coloca o nome do cliente em um cabealho
de grupo e os pedidos do cliente na banda de dados. Agora voc precisa imprimir o relatrio e
envi-lo a todos os seus clientes, e cada cliente deve receber apenas as pginas do relatrio
que se referem a ele. Lamentavelmente, a numera o das pginas contnua no relatrio,
ent o um cliente que receber as pginas 50 a 52 perguntar "Onde est o as primeiras 49
pginas?". Para evitar este tipo de situa o, necessrio numerar as pginas de cada cliente
com sua prpria sequncia. No relatrio, cada grupo ter pginas numeradas a partir de 1.
Ao visualizer o relatrio, podemos ver que ambos os nveis de dados agora possuem seus
Para numerar de maneira contnua as linhas de dados do segundo nvel, use a varivel [Line#]
em vez de [Line] no objeto "Texto" na banda de dados. O resultado ent o ter este aspecto:
A sintaxe de todas as funes de agrega o (exceto COUNT) similar quela da fun o SUM:
Os parmetros s o:
Uma express o o nico parmetro obrigatrio, os outros dois s o opcionais. No entanto, para
evitar cometer erros recomendado que os parmetros da banda sejam sempre fornecidos.
COUNT(banda, sinalizadores)
COUNT(banda)
H uma regra geral para todas as funes de agrega o: uma fun o de agrega o somente
pode ser calculada sobre uma banda de dados, e ela somente pode ser usada no rodap da
banda, que pode pertencer a estas categorias: rodap, rodap da pgina, rodap do grupo,
rodap da coluna ou rodap do relatrio (banda de resumo).
Como funcionam as funes de agrega o? Abordaremos isso com nosso relatrio de grupo
como exemplo. Vamos adicionar alguns elementos novos ao relatrio:
[SUM(<Group."ItemsTotal">,MasterData1,1)]
[SUM(<Group."ItemsTotal">,MasterData1,3)]
O valor "3" uma combina o de bits de "1" e "2", o que significa que precisamos incluir as
bandas invisveis sem redefinir o total aps cada grupo. Como resultado obtemos:
Como voc pode ver, adicionamos uma banda "Sumrio do Relatrio" que contm um objeto
"Texto" com a fun o de agrega o SUM tanto na banda "Sumrio do Relatrio" como na
banda "Rodap da Pgina". Isso tudo que precisamos fazer:
Primeiramente, podemos usar o objeto "Texto do Sistema" para exibir uma fun o de
agrega o. Na verdade, este objeto parecido com um objeto "Texto" e possui seu prprio
editor especial para especificar variveis de sistema ou funes de agrega o com mais
facilidade:
Selecione um tipo de fun o, depois uma banda de dados (sobre a qual ser calculada a
fun o de agrega o) e finalmente um campo de BD ou uma express o cujo valor deve ser
calculado. Tambm possvel configurar os sinalizadores "Contar bandas invisveis" e "Total de
execu o", se necessrio.
O segundo mtodo usar um objeto "Texto" e clicar no bot o em seu editor. Isso abre uma
caixa de dilogo parecida com o editor do objeto "Texto do Sistema". Ao clicar no bot o OK,
inserida uma chamada da fun o de agrega o no texto do objeto.
IV
Formatar,
realar
Formatar, realar 69
Os campos de dados normalmente retornam um valor formatado, que exibido pelo objeto
"Texto" sem nenhuma altera o. Para aplicar a formata o ao resultado de "SUM", vamos usar
as ferramentas de formata o de valores do FastReport.
Selecione o objeto que contm a fun o Sum e abra o editor de formata o ao clicar em
'Formato de Exibi o...' em seu menu de contexto ou usar a propriedade "DisplayFormat" no
inspetor de objetos.
Aps clicar em OK e visualizar o relatrio, voc ver que a fun o Sum no relatrio agora est
formatada corretamente:
Usando o exemplo, redimensione o rodap e seu objeto e altere o texto do objeto para isto:
Total: [SUM(<Group."ItemsTotal">,MasterData1)]
Number: [COUNT(MasterData1)]
Para exibir cada valor em seu formato correto, eles devem ser formatados individualmente.
Para fazer isso usamos tags de formata o, que s o colocadas antes do colchete de
fechamento da express o. Em nosso exemplo, desabilite a formata o no objeto (selecione a
categoria "Texto (sem formata o)" no editor de formata o). Agora somente precisamos
especificar o formato da primeira express o, j que a segunda ser exibida corretamente por
padr o (como nmero inteiro). Modifique o texto do objeto deste modo:
[expression #formattag]
Observe que o caractere de espao entre a express o e o smbolo "#" obrigatrio! A tag de
formata o em si pode ter este aspecto:
Pode ser usada uma vrgula ou um hfen em vez do ponto em format_string para a formata o
numrica. Este smbolo usado como separador entre o nmero inteiro e a fra o do valor.
Nenhum outro caractere permitido.
Para a formata o do tipo "#b" (booleana), a cadeia format_string inserida como dois valores
separados por vrgula. O primeiro valor corresponde a "False" e o segundo a "True".
possvel definir uma ou mais condies e configurar o estilo de cada condi o. O estilo pode
conter uma ou mais configuraes:
borda;
preenchimento;
fonte;
visibilidade do objeto.
Voc pode indicar quais configuraes devem ser alteradas quando a condi o for cumprida.
Para isso necessrio marcar a configura o desejada usando a caixa de sele o.
Para criar uma condi o nova, clique no bot o "Adicionar". O editor de expresses exibido.
Nele possvel escrever qualquer express o que retornar um resultado booleano. Em muitos
casos voc usar a varivel "Value", que contm o valor de impress o atual.
Vamos dar uma olhada no seguinte exemplo: temos um objeto "Texto", o qual imprimimos a
quantidade de produtos em estoque:
[Products."UnitsInStock"]
Value = 0
Value == 0
Neste caso usamos a varivel "Value", que possui um valor impresso. Se houver diversas
expresses em um objeto, esta varivel ter o valor da ltima express o. Em vez de "Value",
possvel usar uma coluna de dados:
<Products."UnitsInStock"> = 0
Configure o estilo da condi o de maneira que somente preenchimento pode ser usado, e
escolha a cor vermelha:
Ao imprimir um objeto com valor zero, ele ser vermelho. Vamos tornar nosso exemplo mais
complexo, adicionando outra condi o. Se as unidades em estoque forem menores que 10,
elas devem ser impressas em amarelo. Para fazer isso, abra o editor de condies e clique no
bot o "Adicionar". A segunda condi o ser como esta:
Value < 10
1. Value = 0
2. Value < 10
1. Value < 10
2. Value = 0
Neste caso, "Value = 0" n o ser executado, j que quando o valor for zero, a primeira condi o
Este objeto ir modificar sua cor em dependncia do nmero da linha de dados. Selecione o
objeto e configure a express o condicional a seguir na guia Realce do editor de objetos:
<Line> mod 2 = 1
<Line> % 2 == 1
Selecione cinza n o muito saturado e claro como a cor de realce. Agora possvel adicionar
outros objetos banda de dados em cima do primeiro objeto "Texto" vazio:
V
Relatrios
aninhados
(sub-relatrios)
Relatrios aninhados (sub-relatrios) 77
Alm disso, objetos "Sub-relatrio" podem ser inseridos em uma pgina de design de sub-
relatrio, aumentando a profundidade do aninhamento. Um exemplo de um relatrio aninhado
pode ser encontrado no programa de demonstra o, no relatrio "Sub-relatrio".
Este design habilita relatrios nos quais a sada de dados de cada "Sub-relatrio" possui fileiras/
registros de diversos comprimentos, alturas e graus de extens o:
Conforme ilustrado, FastReport continua exibindo a pgina de design bsica somente aps
concluir o Sub-relatrio mais longo. Tambm possvel usar a propriedade Vertical Alignment
para ajustar o alinhamento do objeto "Texto" em cada sub-relatrio.
Se fizer isso, os objetos criados no sub-relatrio ir o se sobrepor a tudo que for colocado
abaixo do objeto sub-relatrio na pgina de design principal, e a sada ser parecida com isto:
Para exibir objetos abaixo ou aps um relatrio aninhado, utilize uma banda filho:
Este mtodo tambm usado quando diversos Sub-relatrios devem ser colocados um
embaixo do outro. Utilize uma banda filho para cada Sub-relatrio e conecte-os em cadeia,
configurando a propriedade child de Child1 como Child2, e assim por diante.
5.4 Op o PrintOnParent
O objeto "Sub-relatrio" possui a propriedade "PrintOnParent" que s vezes pode ser til. Esta
propriedade configurada como False por padr o.
VI
Script
Script 81
Um script um programa escrito em uma linguagem de alto nvel que faz parte do relatrio.
Conforme o relatrio executado, o script tambm executado. Um script pode gerenciar
dados de maneiras que n o s o possveis usando as operaes normais do nucleo do
FastReport; por exemplo, um script pode ocultar dados redundantes dependendo de uma
condi o predefinida. Tambm possvel utilizar um script para controlar as propriedades de
formulrios de dilogo que fazem parte de um relatrio.
- PascalScript
- C++Script
- BasicScript
- JScript
Os scripts podem ser criados no designer do FastReport, que contm um editor de scripts com
realce de sintaxe. Tambm h um depurador embutido que possui as seguintes funes:
"Step", "Breakpoint", "Run to cursor" e "Evaluate".
1 guia "Cdigo"
2 painel do editor de scripts
3 lista suspensa para selecionar a linguagem na qual escrito o script
4 barra de ferramentas do depurador
- executar o relatrio no modo de depura o (F9)
- executar at o cursor (F4)
- executar a linha de cdigo regular (Seguir Dentro, F7)
Tecla Significado
teclas de dire o movem o cursor
PageUp, PageDown ir para a pgina anterior/prxima
Ctrl+PageUp ir para o incio do texto
Ctrl+PageDown ir para o final do texto
Home ir para o incio da linha
End ir para o fim da linha
Enter ir para a prxima linha
Delete excluir smbolo na posi o do cursor; excluir texto selecionado
Backspace excluir o smbolo esquerda do cursor
Ctrl+Y excluir a linha atual
Ctrl+Z desfazer a ltima a o (at 32 eventos)
Shift+teclas de dire o selecionar um bloco de texto
Ctrl+A selecionar todo o texto
Ctrl+U deslocar o bloco selecionado 2 smbolos para a esquerda
Ctrl+I deslocar o bloco selecionado 2 smbolos para a direita
Ctrl+C, Ctrl+Insert copiar o bloco selecionado para a rea de transferncia
Ctrl+V, Shift+Insert colar texto da rea de transferncia
Ctrl+X, Shift+Delete cortar o bloco selecionado para a rea de transferncia
Ctrl+Shift+<nmero> definir um indicar com <nmero> 0..9 na linha atual
Ctrl+<nmero> saltar para o indicador <nmero>
Ctrl+F pesquisar uma linha
Ctrl+R substituir uma linha
F3 pesquisa/substitui o repetida a partir da posi o do cursor
F4 definir ponto de parada para a execu o do script (Executar at
o cursor)
Ctrl+F2 redefinir o script
Ctrl+F7 visualizar o valor da varivel (Avaliar)
F9 executa o script (Executar)
Estrutura de PascalScript:
begin
end;
Estrutura de C++Script:
{ // procedimento principal.
}
Estrutura de JScript:
Estrutura de BasicScript:
' o captulo "imports" deve ser colocado antes de qualquer outro captulo
imports "unit1.vb", "unit2.vb"
Mais adiante iremos dar uma olhada em scripts escritos na linguagem "PascalScript". Quando
um relatrio novo criado, esta linguagem selecionada por padr o.
Abra o designer e clique no bot o "Novo Relatrio" para que o FastReport crie automaticamente
um modelo bsico. Abra a guia "Cdigo" e escreve o script a seguir:
PascalScript:
begin
ShowMessage('Ol, Mundo!');
end.
C++ Script:
{
ShowMessage("Ol, Mundo!");
}
Depois disso execute o relatrio. Conforme esperado, o FastReport exibe uma pequena caixa
de dilogo com a sauda o:
Vamos explicar alguns detalhes. Criamos um script que composto de um nico bloco "begin
end". Desta forma, nosso script possui uma estrutura muito simples; ele composto apenas
de um procedimento principal (consulte a se o "Estrutura de um script" acima). O
procedimento principal executado assim que o relatrio executado. Neste caso, ele exibiu
uma caixa de dilogo de sauda o, e o procedimento concludo aps fechar a caixa de
dilogo. Depois do trmino da execu o do procedimento principal, a cria o normal do
relatrio iniciada.
PascalScript:
Memo1.Color := clRed
C++Script:
Memo1.Color = clRed
A lista de objetos do relatrio que podem ser acessados pelo script exibida no painel "rvore
do Relatrio". Quais propriedades do objeto est o disponveis para um script? A resposta
simples: todas que est o visveis no inspetor de objetos. O inspetor de objetos tambm mostra
dicas de cada propriedade na parte inferior. Ambos os painis (a rvore do relatrio e o inspetor
de objetos) permanecem disponveis ao trabalhar em um script. Para obter ajuda detalhada
sobre as propriedades do objeto e os mtodos, consulte o arquivo de ajuda do FastReport que
includo no kit de distribui o.
Aqui h um exemplo simples. Coloque um objeto "Texto" com o nome "MyTextObject" que
contm "Test" na pgina de design do relatrio. Ent o escreva este script:
PascalScript:
begin
MyTextObject.Color := clRed
end.
C++Script:
{
MyTextObject.Color = clRed
}
PascalScript:
C++ Script:
PascalScript:
C++ Script:
PascalScript:
C++ Script:
Vale a pena observar que para atribuir um valor de string varivel, voc deve colocar o valor
entre aspas:
PascalScript:
C++ Script:
Variveis de sistema, como "Page#", devem ser referenciadas exatamente da mesma maneira:
PascalScript:
C++ Script:
if (<Page#> == 1) { ... }
PascalScript:
C++ Script:
De forma alternativa, possvel usar a fun o "Get" para acessar campos de BD (na verdade
esta fun o usada implicitamente por FastReport ao calcular expresses dentro de
chevrons).
PascalScript:
var
MyVariable: String;
begin
MyVariable := 'Ol!';
end.
C++ Script:
string MyVariable;
{
MyVariable = "Ol!";
}
O valor da varivel pode ser exibido em um objeto "Texto", por exemplo, ao digitar '[MyVariable]'
no objeto.
O nome de uma varivel deve ser nico. Isso significa que o nome n o deve duplicar o nome de
outro objeto do relatrio, de uma fun o padr o ou constante. Se houver um erro em um script,
exibida uma mensagem quando o relatrio for executado e a cria o do relatrio parada.
6.9 Eventos
At agora nos vimos scripts com apenas um procedimento principal que executado quando o
relatrio executado. No procedimento principal possvel efetuar configuraes iniciais e
inicializar variveis. No entanto, isso n o suficiente para obter o controle total sobre o
processo da gera o de relatrios. Para obter o mximo de controle possvel sobre a gera o
de relatrios, cada objeto possui diversos eventos aos quais possvel atribuir manipuladores
(ou seja, procedimentos no script). Por exemplo, conectar um manipulador banda de dados
permite a filtragem de registros, de modo que a banda pode ser ocultada ou revelada de acordo
As bandas continuam a ser impressas enquanto a fonte conectada banda tiver dados. Depois
que a impress o do relatrio concluda, chamado o evento "OnAfterPrint" da pgina do
relatrio, e finalmente o evento "OnStopReport" do objeto "Relatrio".
(ordem de chamada) de cada um de seus eventos. Isso tambm vlido para cada um dos
objetos contidos nas bandas.
Para criar um manipulador de eventos "OnBeforePrint" (que o mais apropriado para ns),
clique duas vezes no campo em branco direita do nome do evento:
Tudo que precisamos fazer agora digitar o seguinte cgido no corpo do manipulador:
PascalScript:
C++Script:
if (Copy(<Customers."Company">, 1, 1) == "A")
MasterData1.Visible = true;
else
MasterData1.Visible = false;
Vamos explicar diversas coisas. Um manipulador pode ser atribudo aos eventos de mais de
um objeto o parmetro "Sender" exibe qual objeto iniciou o evento. Para atribuir um
manipulador existente ao um evento, digite-o diretamente no inspetor de objetos ou selecione-o
na lista suspensa:
Vamos demonstrar dois mtodos de executar esta tarefa. Crie um relatrio novo. Coloque o
componente "Consulta ADO" na pgina e configura sua propriedade SQL:
SQL =
select * from customer, orders
where orders.CustNo = customer.CustNo
order by customer.CustNo, orders.OrderNo
UserName = 'Group'
Habilite dois passos nas configuraes do relatrio (item de menu "Relatrio > Opes...").
Adicione duas bandas ao relatrio: "Cabealho de Grupo" e "Dados Mestre". No editor da banda
"Cabealho de Grupo", insira o campo de dados Group."CustNo". Conecte a banda de dados
fonte de dados "Group" e arranje alguns objetos da seguinte maneira:
Para exibir o total, usamos o objeto com a seta no design (em nosso exemplo ele chamado
de "Memo8").
O primeiro mtodo.
Usaremos a classe "TStrigList" como um array para armazenar os totais vamos armazenar
os valores numricos como cadeias. O primeiro item na StringList corresponder ao total do
primeiro grupo, etc. Uma varivel de nmero inteiro (que iremos incrementar aps imprimir
cada grupo) usada para calcular o nmero de ndice do grupo.
PascalScript:
var
List: TStringList;
i: Integer;
begin
end.
C++ Script:
TStringList List;
int i;
{
List = TStringList.Create();
}
Os nomes dos procedimentos no script mostram quais eventos utilizamos. Eles s o: "Report.
OnStartReport", "Report.OnStopReport", "Page1.OnBeforePrint", "GroupHeader1.
OnBeforePrint" e "GroupFooter1.OnBeforePrint". Os primeiros dois eventos s o chamados no
incio e no final do relatrio, respectivamente. Para criar manipuladores para estes dois eventos,
selecione o objeto "Report" na lista suspensa do inspetor de objetos e suas propriedades ser o
exibidas no inspetor de objetos. Ent o abra a guia "Eventos" do inspetor de objetos e crie os
manipuladores.
Por que n o criamos a varivel "List" no procedimento principal do script? Nos a criamos no
evento "OnStartReport" porque variveis criadas dinamicamente devem ser destrudas aps
concluir o relatrio. lgico criar variveis dinmicas no evento "OnStarReport" e destru-las no
evento "OnStopReport". Em outros casos (quando a memria n o precisa ser liberada na
conclus o do script) possvel usar o procedimento principal do script para a inicializa o de
variveis.
A cria o e destrui o da varivel "List" simples. Agora vamos ver como o script funciona. No
incio da pgina, o contador do grupo atual (a varivel "i") redefinida como zero e
incrementada aps a impress o de cada grupo (no evento "GroupFooter1.OnBeforePrint"). O
total calculado adicionado a "List" neste evento antes de incrementar o contador. O evento
"GroupHeader1.OnBeforePrint" n o faz nada no primeiro passo (condi o if "Engine.
FinalPass"), mas durante o segundo passo (quando "List" foi preenchida com valores) o total
que corresponde ao grupo atual recuperado de "List" e a sada enviada para o objeto
"Memo8" para exibir o total no cabealho do grupo. No relatrio concludo, o total exibido desta
maneira:
Este algoritmo bastante simples. No entanto, ele pode ser simplificado ainda mais.
O segundo mtodo.
Vamos usar a cole o de variveis do relatrio como um array para armazenar os totais dos
grupos. Lembre-se de que as variveis do relatrio s o acessadas atravs das funes "Get" e
"Set". Usar estas funes tambm nos poupa de ter que criar e destruir estas variveis de
maneira explcita. Este ser nosso script:
PascalScript:
begin
end.
C++ Script:
FloatToStr(SUM(<Group."ItemsTotal">,MasterData1)));
}
Como voc pode ver, este script um pouco mais simples. O cdigo no manipulador
"GroupFooter1.OnBeforePrint" define o valor de uma varivel que possui um nome derivado do
nmero do cliente (tambm possvel usar qualquer outro identificador que identifique o cliente
de maneira n o ambgua, por exemplo <Group."Company">). Se n o existir nenhuma varivel
com este nome, o script a cria automaticamente; de outro modo, se ela existir, seu valor
atualizado. O valor da varivel apropriada recuperado no manipulador "GroupHeader1.
OnBeforePrint".
PascalScript:
C++ Script:
PascalScript:
C++ Script:
Usar "Value" em vez de uma express o habilita voc a escrever um manipulador multiuso para
o evento "OnAfterData", que pode ser conectado a diversos objetos.
Observe tambm outra coisa: se um objeto possuir diversas expresses (por exemplo '[expr1]
O evento "OnAfterData" ideal para calcular a altura e largura de objetos como "Texto". Isto ,
se em um script for necessrio obter a altura exata de um objeto "Texto" estendido que contm
uma express o, possvel usar este cdigo no evento "OnAfterData":
PascalScript:
var
MemoHeight: Extended;
begin
MemoHeight := TfrxMemoView(Sender).CalcHeight;
end;
C++ Script:
float MemoHeight;
MemoHeight = TfrxMemoView(Sender).CalcHeight;
Se este cdigo fosse usado no evento "OnBeforePrint", o resultado seria a altura do objeto que
contm a express o antes da express o ser avaliada, e n o seu valor real na impress o.
Mtodos:
Mtodo Descri o
function Calc retorna o valor de "Expr", que uma express o
(const Expr: String): Variant por exemplo, Report.Calc('1+2') retorna "3"
qualquer express o vlida do FastReport pode ser
passada no parmetro
function GetDataSet retorna o conjunto de dados que possuir o nome
Mtodos:
Mtodo Descri o
procedure AddAnchor adiciona "Text" lista de ncoras
(const Text: String) veja mais abaixo
procedure NewColumn cria uma nova coluna em um relatrio com vrias colunas
aps a ltima coluna, uma quebra de pgina inserida
automaticamente
"Outline" exibe uma estrutura tipo rvore do relatrio concludo. Quando um n da rvore
clicado, o painel de visualiza o abre a pgina referida no n. Para exibir "Outline", ele deve ser
habilitado ao clicar no bot o na barra de ferramentas da janela de visualiza o ou ao configurar
a propriedade "Report.PreviewOptions.OutlineVisible" como True. A largura de "Outline" em
pixels tambm pode ser configurada ali: "Report.PreviewOptions.OutlineWidth".
Mtodo Descri o
procedure AddItem adiciona um elemento que possui o nome "Text" na posi o atual da
(const Text: String) rvore
a pgina atual do relatrio e a posi o na pgina s o vinculados ao
elemento
procedure LevelRoot move a posi o atual na rvore para o nvel raiz
procedure LevelUp eleva a posi o atual na rvore por um nvel
Finalmente, "FreeSpace" a altura do espao livre em uma pgina. Se houver uma banda
"Rodap da Pgina" na pgina, sua altura includa no clculo de "FreeSpace". A altura
retornada em pixels na fun o "Engine.FreeSpace". Observe que aps exibir a prxima banda,
o espao livre reduzido na pgina, e isto levado em conta ao calcular "FreeSpace".
cria o de uma nova pgina, "CurY" igual a "0". "CurX" alterada ao imprimir relatrios com
diversas colunas.
"Engine.CurX" e "Engine.CurY" est o disponveis n o somente para a leitura, mas tambm para
a grava o. Isso significa que as bandas podem ser deslocadas ao incrementar ou reduzir
estes valores. Por exemplo, em um relatrio parecido com este:
PascalScript:
C++ Script:
PascalScript:
C++ Script:
PascalScript:
C++ Script:
Observe que usamos o evento "OnAfterPrint" (ou seja, aps imprimir a pgina). Tambm
observe que a varivel de sistema "Line" retorna o nmero sequencial do registro.
6.15 ncoras
Uma ncora um dos elementos no sistema de hiperlinks que permite saltar para qualquer
elemento conectado ao objeto do relatrio concludo ao clicar nele (na janela de visualiza o).
A ncora pode ser configurada atravs do mtodo "Engine.AddAnchor". Uma ncora possui um
nome e uma posi o na pgina de um relatrio. Para saltar para uma ncora com um nome
especificado, digite a seguinte linha na propriedade URL de qualquer objeto do relatrio:
#AnchorName
ou
#[AnchorName]
Ao clicar no objeto, um salto executado para o local do relatrio onde foi adicionada a ncora.
Use ncoras ao construir uma tabela de "Contedo", por exemplo com links para captulos
correspondentes. Vamos ilustrar isso no exemplo a seguir. Primeiro precisamos da familiar
tabela "Clientes".
Nosso relatrio ter diversas pginas (com duas pginas de design). Colocaremos a tabela de
"Contedo" na primeira pgina e a lista de clientes na segunda pgina. Um clique em qualquer
linha de Contedo executa um salto at o elemento correspondente do relatrio.
Coloque o seguinte texto na propriedade URL do objeto "Texto" contido na banda de dados
#[Customers."Company"]
PascalScript:
C++ Script:
Isso tudo que necessrio. Visualize o relatrio e certifique-se de que todos os "hiperlinks"
estejam funcionando.
Quase todas as bandas possuem a propriedade "OutlineText" para conter uma express o que
cria a rvore automaticamente. A express o avaliada ao criar o relatrio, e seu valor
adicionado rvore quando a banda impressa. Desta maneira a hierarquia de elementos na
rvore similar hierarquia de bandas no relatrio, o que significa que a rvore ter elementos
principais e subordinados que correspondem s bandas principais e subordinadas no relatrio
(por exemplo, onde o relatrio tiver dois nveis de dados ou tiver grupos). Vamos usar nosso
exemplo anterior para mostrar a opera o de uma rvore em um relatrio que possui grupos.
evidente possvel obter uma navega o at os nmeros dos pedidos, e que a hierarquia
dos elementos na rvore similar quela no relatrio.
Agora criaremos uma rvore parecida, mas usando um script em vez da propriedade
"OutlineText". No relatrio, limpe as propriedades "OutlineText" de ambas as bandas e crie dois
manipuladores de eventos:
"GroupHeader1.OnBeforePrint" e "MasterData1.OnBeforePrint":
PascalScript:
begin
end.
C++ Script:
Visualize o relatrio para certificar-se de que ele funciona da mesma maneira como no exemplo
anterior, no qual a rvore foi criada automaticamente. Vamos ver como a rvore criada pelo
script.
Item1
Item2
Item3
...
script:
Outline.AddItem('Item1');
Outline.AddItem('Item2');
Outline.AddItem('Item3');
Outline.LevelUp;
Outline.AddItem('Item4');
Item1
Item2
Item3
Item4
Isso mostra que "Item4" um elemento filho do elemento "Item2". No entanto, o mtodo
"LevelRoot" move o cursor at a raiz da rvore. Por exemplo, o script:
Outline.AddItem('Item1');
Outline.AddItem('Item2');
Outline.AddItem('Item3');
Outline.LevelRoot;
Outline.AddItem('Item4');
Item1
Item2
Item3
Item4
Ao entender isso se torna claro como o relatrio funciona. Antes de cada ttulo de grupo (nome
da empresa) exibida a raiz da rvore, que transformada no elemento atual. Depois exibida
a lista de pedidos, e cada pedido adicionado como um elemento filho da empresa. Para
assegurar que todos os pedidos estejam localizados em um nvel e n o exibidos como uma
"escada", chamado o mtodo "Outline.LevelUp" aps cada adi o de pedido para deslocar o
cursor de volta ao nvel da empresa.
Isso quer dizer que a essncia do manipulador "OnManualBuild" dar comandos ao ncleo do
FastReport para exibir bandas em momentos especficos. O ncleo faz o resto sozinho: ele
cria novas pginas quando n o houver espao livre na pgina atual, gerencia os scripts
anexados a eventos, etc.
Vamos demonstrar um manipulador usando um exemplo simples. Este relatrio possui duas
bandas de dados mestre que n o est o conectados a dados:
O manipulador exibir estas bandas em ordem alternada (seis vezes para cada). Aps exibir
seis bandas, uma pequena lacuna ser inserida.
PascalScript:
C++ Script:
int i;
O exemplo a seguir exibe as mesmas bandas, com uma segunda cpia deslocada para a
direita.
PascalScript:
C++Script:
SaveY = Engine.CurY;
for (j = 1; j <= 2; j++)
{
for (i = 1; i <= 6; i++)
{
Engine.ShowBand(MasterData1);
Engine.ShowBand(MasterData2);
if (i == 3)
Engine.CurY = Engine.CurY + 10;
}
Engine.CurY = SaveY;
Engine.CurX = Engine.CurX + 200;
}
}
Como voc pode ver, nestes exemplos controlamos apenas a sada das bandas de dados. O
resto das bandas (em nosso caso, o "Ttulo do Relatrio") foi exibido automaticamente.
PascalScript:
C++Script:
DataSet = MasterData1.DataSet;
DataSet.First();
while (!DataSet.Eof)
{
Engine.ShowBand(MasterData1);
DataSet.Next();
}
}
Visualize o relatrio para certificar-se de que o script produz um relatrio idntico ao relatrio
padr o. Observe que temos um link para o conjunto de dados ns conectamos uma varivel
do conjunto de dados fonte de dados com este cdigo:
DataSet := MasterData1.DataSet;
Se a banda DadosMestre n o estiver conectada fonte de dados, ent o o link fonte de dados
necessria pode ser feito da seguinte maneira:
DataSet := Report.GetDataSet('Customers');
PascalScript:
var
Band: TfrxReportTitle;
Memo: TfrxMemoView;
begin
Band := TfrxReportTitle.Create(Page1);
Band.Height := 20;
Memo := TfrxMemoView.Create(Band);
Memo.SetBounds(10, 0, 100, 20);
Memo.Text := 'Este memorando foi criado por cdigo';
end.
C++ Script:
TfrxReportTitle Band;
TfrxMemoView Memo;
{
Band = TfrxReportTitle.Create(Page1);
Band.Height = 20;
Memo = TfrxMemoView.Create(Band);
Memo.SetBounds(10, 0, 100, 20);
Memo.Text = "Este memorando foi criado por cdigo";
}
Visualize o relatrio:
Observe que n o destrumos os objetos FastReport que criamos neste exemplo. Isso n o
necessrio, j que objetos do FastReport s o destrudos automaticamente pelo aplicativo
Delphi aps concluir o relatrio. Tambm observe que quando criamos objetos Delphi padr o
em um script (como TStringLists), tambm precisamos destru-los no script, j que isso n o
feito automaticamente pelo aplicativo.
VII
Relatrios tipo
tabela de
referncia
cruzada
116 FastReport VCL 5 User's Manual
Este tipo de relatrio possui uma estrutura em tabela, o que significa que ele consiste de fileiras
e colunas. Ao criar o design n o possvel saber quantas linhas e colunas ter o relatrio de
sada. por isso que um relatrio n o estendido apenas para baixo (como nos tipos de
relatrio descritos anteriormente), mas tambm para os lados. Um exemplo tpico de um
relatrio tipo tabela de referncia cruzada mostrado abaixo.
Na ilustra o vemos uma tabela com duas linhas (fileiras) e quatro colunas, onde "a" e "b" s o
ttulos de linhas, "1", "2", "3" e "4" s o ttulos de colunas, e "a1".."a4" e "b1".."b4" s o clulas.
Para criar um relatrio deste tipo, precisamos de apenas um conjunto de dados (de uma
consulta ou uma tabela) que possua trs campos e contenha os seguintes valores:
a 1 a1
a 2 a2
a 3 a3
a 4 a4
b 1 b1
b 2 b2
b 3 b3
b 4 b4
Voc pode ver que o primeiro campo contm a letra da linha, o segundo contm o nmero da
coluna e o terceiro contm o contedo da clula na interse o da linha e coluna especificadas.
Ao exbir o relatrio, FastReport cria uma tabela na memria e a preenche com dados. Deste
modo a tabela estendida dinamicamente, criando linhas e colunas onde elas ainda n o
existirem.
Neste exemplo, o nmero (ou ndice) da coluna composto, ou seja, ele composto de dois
valores. Este relatrio gerado dos seguintes dados:
a 10 1 a10.1
a 10 2 a10.2
a 20 1 a20.1
a 20 2 a20.2
b 10 1 b10.1
b 10 2 b10.2
b 20 1 b20.1
b 20 2 b20.2
Aqui o primeiro campo contm o ndice da linha como no caso anterior, o segundo e terceiro
campo contm os ndices das colunas e o ltimo campo contm o valor da clula. Veja como
FastReport constri a tabela de memria ao usar dados de tabela de referncia cruzada com
ttulos complexos:
Ao exibir o relatrio desta tabela de memria, FastReport une as clulas de ttulo que possuem
o mesmo valor e est o localizadas no mesmo nvel.
Aqui h um relatrio de tabela de referncia cruzada mais complexo, que incorpora totais
intermedirios e gerais:
Este relatrio derivado dos mesmos dados dos relatrios anteriores. Os valores nas clulas
que s o destacadas com a cor nova s o calculados automaticamente, e n o est o presentes
no conjunto de dados original.
Crie um relatrio novo. Coloque um componente "Tabela ADO" na pgina e configure suas
propriedades:
Somente o mouse pode ser usado neste editor para fazer alteraes. Para nosso exemplo
apenas necessrio arrastar campos da lista 2 para as listas 3, 4 e 5 (no diagrama acima).
Depois disso feche o editor ao clicar no bot o OK. O objeto tabela de referncia cruzada agora
exibe sua estrutura:
Quando o relatrio for visualizado, voc ver uma tabela parecida com esta:
Tambm podemos usar um conjunto de estilos predefinidos. Eles est o disponveis no editor
de tabela de referncia cruzada clique em "Selecionar estilo" e escolha um.
Para alterar os dois textos "Grand Total", clique duas vezes em cada clula, o que abre o editor
de texto onde podemos digitar "Total":
Para formatar os valores da moeda, selecione a primeira clula (interse o de [Name] e [Year]
em nosso exemplo), clique com o bot o direito para exibir o menu de contexto e selecione
"Formato de Exibi o...":
Selecione o formato necessrio e feche o editor de formato. Tudo isso produz o seguinte
relatrio:
Vamos usar a fun o "MIN" em nosso exemplo. Abra o editor de tabela de referncia cruzada e
na lista 5 (o item de campo "Salary") clique na seta para baixo.
Selecione a fun o "MIN" na lista suspensa. Agora podemos mudar o texto nas clulas de totais
de "Total" para "Mnimo". O relatrio concludo tem o seguinte aspecto:
Vamos alterar a classifica o das colunas em nosso exemplo. Coloque os anos em ordem
decrescente. Para fazer isso, abra o editor de tabela de referncia cruzada, selecione o
elemento de coluna "Year" e altere o modo de classifica o ao clicar na seta para baixo e
selecionar Decrescente:
Que tipo de relatrio iremos obter? Ele deve se parecido ao relatrio do exemplo anterior,
porm os dados anuais devem ser divididos por meses. O objeto tabela de referncia cruzada
deve ser configurado da mesma maneira como antes. Desta vez tambm arrastaremos o
campo "Month" at a lista de cabealhos de colunas, conforme mostrado aqui:
Tambm observe que o ltimo elemento de coluna na lista de cabealhos de colunas nunca
possui um sinalizador "Subtotal" (incluindo no caso de um elemento nico). Em nosso exemplo,
n o precisamos dos totais intermedirios de cada ms, ent o o sinalizador "Subtotal" pode ser
desmarcado.
H outro recurso de totais intermedirios, se eles forem usados: pode ser melhor colocar o
cabealho do total intermedirio como "Ano + total do ano" em vez de "Total". No objeto tabela
de referncia cruzada na pgina do relatrio, clique duas vezes na clula de total intermedirio
e digite no editor de texto:
O mtodo mais simples para controlar a largura da clula adicionar quebras de linha ao texto
dos totais intermedirios:
Total
for[Value]
No entanto, h circunstncias nas quais difcil ou impossvel quebrar linhas manualmente. Por
isso o objeto tabela de referncia cruzada possui as propriedades "MinWidth" e "MaxWidth"
(que se referem largura das clulas). Estas propriedades podem ser acessadas apenas
atravs do inspetor de objetos.
Por padr o, "MinWidth" 0 e "MaxWidth" 200, o que suficiente na maioria dos casos. O
segundo mtodo de controlar a largura das clulas alterar estes valores de acordo com
necessidades especiais.
Ent o, em nosso exemplo podemos configurar "MinWidth" e "MaxWidth" como 50. Isso significa
que uma clula de dados deve ter pelo menos 50 pixels de largura, mesmo se o valor da clula
couber em um espao com menos pixels. Para valores grandes de clula, a largura da clula
est limitada ao valor de "MaxWidth", e o texto na clula quebrado conforme for necessrio.
Logo, nosso exemplo agora tem este aspecto:
Para adicionar realce a nosso relatrio de exemplo, e assumindo que precisamos mudar a cor
da fonte para valores maiores que 3000, selecione o objeto que representa a clula da tabela e
configure os parmetros de realce ao clicar no bot o de realce na barra de ferramentas. A
janela familiar do editor de realce ser aberta, e nela podemos configurar esta condi o:
Evento Descri o
Mtodo Descri o
function ColCount: Integer retorna o nmero de colunas na tabela
Agora vamos demonstrar como realar a terceira coluna (em nosso exemplo, a data
"November 1999"). Selecione o objeto tabela de referncia cruzada na pgina de design do
relatrio, clique na guia Eventos no inspetor de objetos, localize o evento "OnPrintCell" e crie
um manipulador na pgina Cdigo ao clicar duas vezes na lista vazia direita do nome do
evento. O editor de script ser aberto com a declara o bsica criada para voc. Ent o
adicione o cdigo necessrio no bloco 'begin...end' vazio da declara o:
Pascal script:
C++ Script:
void Cross1OnPrintCell(
TfrxMemoView Memo,
int RowIndex,
int ColumnIndex,
int CellIndex,
Variant RowValues,
Variant ColumnValues,
Variant Value)
{
if (ColumnIndex == 2) { Memo.Color = clRed; }
}
Pascal script:
C++ Script:
void Cross1OnPrintColumnHeader(
TfrxMemoView Memo,
Variant HeaderIndexes,
Variant HeaderValues,
Variant Value)
{
if ((VarToStr(HeaderValues[0]) == "1999") &&
(VarToStr(HeaderValues[1]) == "11"))
{
Memo.Color = clRed;
}
}
Pascal script:
C++ Script:
void Cross1OnPrintCell(
TfrxMemoView Memo,
int RowIndex,
int ColumnIndex,
int CellIndex,
Variant RowValues,
Variant ColumnValues,
Variant Value)
{
if ((VarToStr(ColumnValues[0]) == "1999") &&
(VarToStr(ColumnValues[1]) == "11"))
{
Memo.Color = clRed;
}
}
Por que a fun o "VarToStr" necessria? Ela previne erros durante a convers o de tipos. Ao
trabalhar com o tipo Variant, FastReport tenta converter cadeias para o formato numrico
automaticamente, o que pode causar erros ao converter os valores das colunas "Total" e
"Grand Total".
Em nosso exemplo foi mais fcil usar o parmetro "HeaderValues", mas seria possvel usar o
seguinte manipulador em seu lugar:
Pascal script:
C++ Script:
void Cross1OnPrintColumnHeader(
TfrxMemoView Memo,
Variant HeaderIndexes,
Variant HeaderValues,
Variant Value)
{
if ((HeaderIndexes[0] == 0) && (HeaderIndexes[1] == 2)) { Memo.Color =
clRed; }
}
Pascal script:
C++ Script:
void Cross1OnCalcWidth(
int ColumnIndex,
variant ColumnValues,
Extended &Width)
{
if ((VarToStr(ColumnValues[0]) == "1999") &&
(VarToStr(ColumnValues[1]) = "11"))
{
Width = 100;
}
}
E o relatrio ser:
Para ocultar uma coluna em nosso exemplo, configure Width como zero. Observe que os totais
n o s o calculados novamente, j que a tabela j est preenchida com valores nesse ponto.
O objeto "Tabela de Referncia Cruzada" n o conectado a uma tabela de BD. Por isso ela
deve ser preenchida manualmente com dados. O objeto "Tabela de Referncia Cruzada"
possui um editor parecido ao objeto "Tabela de Referncia Cruzada de BD", apesar de haver
uma diferena, j que as dimenses dos ttulos das tabelas e das clulas devem ser
especificadas em vez de serem configuradas pelos campos do BD:
PascalScript:
C++ Script:
O mtodo "AddValue" tambm pode ser usado para o objeto "Tabela de Referncia Cruzada de
BD". Isso possibilita inserir dados que n o sejam derivados da fonte de dados conectada ao
objeto. Se dados forem adicionados desta maneira, eles tambm ser o resumidos junto aos
dados da fonte de dados.
Uma barra vermelho-escuro exibida se o valor da clula for menor que 100, amarela se for
menor que 3000 ou verde ser for maior que 3000.
Vamos comear com nosso relatrio. Coloque um objeto "Tabela de Referncia Cruzada de
BD" na pgina do relatrio e configure suas propriedades desta maneira:
Agora adicione o objeto forma a nossa tabela. Selecione o objeto "Retngulo" na barra de
ferramentas de objetos e coloque-o dentro da clula:
Modifique sua altura e largura para 0,2 cm e configure suas propriedades Top e left. Adicione
dois retngulos parecidos.
Agora crie um script que exibir o nmero correto de formas coloridas (dependendo do valor da
clula). Para fazer isso, selecione a clula e crie um manipulador de evento "OnBeforePrint":
Escreva o cdigo a seguir no manipulador de evento (preste aten o aos nomes das formas,
de modo que eles correspondam a seus objetos):
end
else if Value < 3000 then
begin
DBCross1Object1.Color := $00CCFF; // amarelo
DBCross1Object2.Color := $00CCFF;
DBCross1Object3.Color := clWhite;
end
else
begin
DBCross1Object1.Color := $00CC98; // verde
DBCross1Object2.Color := $00CC98;
DBCross1Object3.Color := $00CC98;
end;
end;
Isso tudo. Visualize o relatrio, que ser parecido quele que foi mostrado no incio desta
se o.
A op o "Borda em volta das clulas" permite desenhar um quadro em volta dos elementos da
clula. Este uma tabela de exemplo com uma borda (observe que as clulas em si n o tm
bordas):
A op o "Imprimir para baixo depois para os lados" determina como uma tabela impressa em
vrias pginas. Aqui seguem dois exemplos que mostram o funcionamento desta fun o
(observe a ordem das pginas):
A op o "Clulas lado a lado" usada se houver dois ou mais valores em uma clula da tabela.
Ela determina se esses valores da clula s o impressos lado a lado ou empilhados um acima
do outro (o padr o).
A op o "Unir clulas iguais" une as clulas horizontalmente se elas tiverem o mesmo valor:
VIII
Grficos
Grficos 143
O FastReport pode inserir grficos em um relatrio. Vamos fazer um relatrio de exemplo com
um grfico simples. O grfico ir utilizar a tabela "Country". Esta tabela contm dados sobre
pases, suas reas e populaes.
Adicione um objeto "Grfico" pgina de design do relatrio e defina seu tamanho como 18 cm
de largura e 8 cm de altura. Abra seu editor de objeto ao clicar duas vezes nele.
Quando for aberto pela primeira vez, o editor de grfico ser exibido como na imagem
mostrada acima. A primeira tarefa adicionar uma ou mais sries ao grfico (apenas uma
srie em nosso exemplo). Faa isso ao clicar no bot o adicionar e selecionar o grfico de
pizza na Galeria:
As setas verticais alteram a ordem das sries na lista. Para modificar o nome de uma srie,
selecione a srie e, um segundo depois, clique nele novamente (observe que isso n o um
clique duplo).
H muitos tipos diferentes de sries disponveis. Depois de adicionar uma srie, a rea de
opes 3 ativada. Nela voc especifica quais dados devem ser usados para a plotagem do
grfico. Primeiro vamos escolher o conjunto de dados na lista suspensa "Conjunto de Dados".
Ent o escolha os campos "Rtulo" e "Pizza", usando suas listas suspensas, conforme
mostrado abaixo:
O que pode ser melhorado neste relatrio? Seria bom classificar as populaes em ordem
decrescente. Abra o editor do grfico novamente, selecione a srie na estrutura do grfico e
Em nosso exemplo, o grfico possui 18 valores, mas na verdade apenas 8 deles podem ser
vistos. Abra o editor do grfico e configure o limite como 8:
Estas propriedades bsicas est o disponveis quando 'Chart' for selecionado na Estrutura do
Grfico:
Vamos demonstrar como isso funciona com um exemplo simples. Coloque um grfico na
pgina de design do relatrio e abrea o editor do grfico. Adicione uma srie de tipo "Grfico de
barras" e configure as seguintes propriedades, usando um ponto e vrgula para separar valores
individuais:
O grfico resultante :
PascalScript:
begin
Chart1.SeriesData[0].XSource := 'Jan;Feb;Mar;Apr';
Chart1.SeriesData[0].YSource := '31;28;31;30';
end.
C++Script:
{
Chart1.SeriesData[0].XSource = "Jan;Feb;Mar;Apr";
Chart1.SeriesData[0].YSource = "31;28;31;30";
Neste caso, SeriesData[0] nos permite configurar parmetros para a primeira srie do grfico.
Se o grfico tiver mais de uma srie, refira-se a elas com SeriesData[1], etc.
IX
Relatrios
interativos
Relatrios interativos 151
possvel tornar interativo um relatrio criado no FastReport. Isso significa que ele ir reagir s
aes do usurio na janela de visualiza o. possvel usar as interaes a seguir:
9.1 Hiperlink
Quase todos os objetos do relatrio possuem a propriedade "Hyperlink". Ao usar esta
propriedade, possvel definir a rea o de um objeto ao clique do mouse na janela de
visualiza o.
Ao clicar em um objeto desse tipo, uma das aes a seguir pode ocorrer:
navegar at a URL;
enviar um e-mail;
executar qualquer comando de sistema;
navegar at a pgina do relatrio que possui o nmero indicado;
navegar at a ncora que foi adicionada em um script;
executar um relatrio detalhado em uma janela de visualiza o separada;
a o padr o, definida em um script.
Para usar este tipo de link, primeiro necessrio definir uma ncora. Para fazer isso, use um
script e o mtodo Engine.AddAnchor (consulte o tpico "Script/ncoras" para maiores
detalhes). Agora possvel indicar seu nome na janela de configuraes do hiperlink. Isso pode
ser feito por dois mtodos:
for executado.
Ao escollher uma pgina do relatrio, sua propriedade "Visible" redefinida como False. Isso
significa que ao criar o relatrio principal, esta pgina ignorada.
X
Relatrios
matriciais
156 FastReport VCL 5 User's Manual
Vamos ver como criar um relatrio do tipo "Lista" projetado para a impress o em impressoras
matriciais. Anteriormente ns criamos este tipo de relatrio, consulte o relatrio "Lista de
clientes". Usaremos os mesmos dados no relatrio.
Abra o designer de relatrios. Selecione "Arquivo > Novo..." para abrir a caixa de dilogo do
assistente de relatrios e selecione o item "Relatrio Matricial":
Ao clicar em OK, exibida uma pgina de design vazia, marcada para uma fonte matricial:
A barra de ferramentas de objetos tambm alterada para exibir os objetos disponveis para a
impress o matricial, que s o "Banda", "Texto", "Linha", "Comando Matricial", "Sub-relatrio",
"Tabela de Referncia Cruzada" e "Tabela de Referncia Cruzada de BD". Outros objetos n o
podem ser usados em uma impressora matricial.
Vamos modificar nosso relatrio ao usar o estilo "Negrito" nos cabealhos. O relatrio est
concludo e est pronto para ser visualizado:
O editor da tabela de referncia cruzada exibe a estrutura da tabela de sada no modo matricial.
Os atributos da fonte da clula podem ser configurados usando o bot o "Tt" na barra de
ferramentas. Quanto aos demais aspectos, os objetos tabela de referncia cruzada se
comportam como foi descrito anteriormente. O relatrio visualizado tm a seguinte aparncia:
A caixa de dilogo de impress o parecida com a normal, mas possui elementos especficos
para impressoras matriciais. O sistema de comandos da impressora deve ser escolhido na
lista a seguir antes da impress o (os comandos ESC):
Este um conjunto padr o que aceito por todos os modelos de impressoras matriciais.
Alguns modelos de impressoras podem suportar outros comandos que n o est o presentes no
conjunto padr o, por exemplo a impress o na resolu o de 20 caracteres por polegada. Para
poder enviar estes atributos adicionais impressora, use o objeto "Comando Matricial" no
relatrio.
Coloque o objeto "Comando Matricial" no local correto na pgina do relatrio, antes de objetos
que usem atributos fora do padr o (ou seja, no canto superior esquerdo da pgina). Para
configurar um comando, edite a propriedade Command do objeto no inspetor de objetos:
XI
Formulrios de
dilogo
164 FastReport VCL 5 User's Manual
Alm das pginas de design do relatrio normais, possvel usar formulrios de dilogo em um
relatrio. Formulrios de dilogo s o criados no designer de relatrio normal com o bot o na
barra de ferramentas do designer. O bot o adiciona uma nova guia de pgina de dilogo ao
relatrio. Ao abrir a guia da pgina de dilogo, o espao de trabalho do designer alterado para
exibir o formulrio, e a barra de ferramentas de objetos alterada para mostrar os objetos de
controle que podem ser colocados no formulrio:
11.1 Controles
TfrxLabelControl:
Caption = 'Ol, Mundo!'
TfrxButtonControl:
Caption = 'OK'
Default = True
ModalResult = mrOk
Quando o design do formulrio de dilogo estiver concludo, volte para a guia Pgina1 do design
do relatrio e coloque um objeto "Texto" que contenha a sauda o na pgina. Visualize o
relatrio e voc ver o formulrio de dilogo:
Aps clicar no bot o OK, a caixa de dilogo fechada e o relatrio construdo e exibido. Se a
caixa de dilogo for fechada ao clicar no bot o "X" do menu do sistema, o relatrio n o ser
criado. O FastReport funciona deste modo: se houver formulrios de dilogo em um relatrio, o
relatrio somente construdo depois que todas as caixas de dilogo terem sido fechadas com
ModalResult mrOk, ou seja, neste exemplo ao clicar no bot o OK. por isso que a
propriedade "ModalResult" do bot o tem que ser configurada como "mrOk".
Coloque um objeto "Texto" que contenha este texto na Pgina1 do relatrio, e configure
"AutoWidth" como True:
Visualize o relatrio e certifique-se de que o texto digitado nele exibido com xito no relatrio.
possvel acessar outros objetos na caixa de dilogo de maneira parecida. J que cada objeto
possui um nome nico em todo o relatrio, ele pode ser usado em qualquer lugar dentro do
mesmo relatrio.
Clique duas vezes no objeto "Caixa de Sele o" para criar um manipulador de evento
"OnClick", e insira o script a seguir:
PascalScript:
end;
C++ Script:
caixa de dilogo, o relatrio ser criado. O FastReport lida com vrias caixas de dilogo da
seguinte maneira: as caixas de dilogo s o exibidas na ordem de cria o; cada caixa de
dilogo exibida somente aps fechar a anterior com "ModalResult = mrOk" (neste exemplo,
ao clicar no bot o OK). Se alguma caixa de dilogo for fechada com o bot o Cancelar ou o
bot o "X" do menu do sistema, o relatrio n o criado.
PascalScript:
C++Script:
Este cdigo oculta a segunda caixa de dilogo (DialogPage2) se a caixa n o for marcada.
Visualize o relatrio para ver se ele funciona corretamente.
Outra maneira de gerenciar formulrios e usar o evento do relatrio "OnRunDialogs". Para criar
este manipulador de evento, selecione o objeto Report na rvore do relatrio ou no inspetor de
objetos e abra a guia "Eventos" no inspetor de objetos. Clique duas vezes no evento
"OnRunDialogs" para criar um manipulador:
PascalScript:
C++Script:
O manipulador funciona deste modo: a primeira caixa de dilogo exibida; se ela for fechada
com o bot o OK, o estado de CheckBox1 avaliado; se o estador for Checked, ent o a
segunda caixa de dilogo exibida; se a segunda caixa de dilogo for fechada com o bot o OK,
Result configurado como True. Se o manipulador retornar Result = True, ent o a visualiza o
criada; se Result = False, a execu o do relatrio parada e nenhuma visualiza o criada.
XII
Componentes
de acesso a
dados
172 FastReport VCL 5 User's Manual
Alm dos componentes de acesso a dados de projetos Delphi, como "TfrxDBDataset" que
usamos em nossos exemplos at agora, h diversos componentes de BD especficos no
FastReport que podem ser ussados em relatrios, e seu uso depende das escolhas feitas
durante a instala o. Os princpios do acesso aos dados no FastReport s o praticamente os
mesmos do ambiente Delphi. Assim como em Delphi, componentes s o colocados em um
formulrio de dilogo, e suas propriedades s o configuradas no inspetor de objetos. O design
de componentes bastante flexvel e fcil criar componentes novos para suportar
mecanismos de banco de dados diferentes (consulte o Manual do Desenvolvedor). Com o
suporte do componente "TfrxDesigner", eles permitem que os usurios de um aplicativo criem
o design de um relatrio no tempo de execu o.
12.1.1 TfrxDBLookupComboBox
Este componente usado para selecionar um valor de um conjunto de dados de consulta.
Propriedade Descri o
DataSet fonte de dados qual o controle est conectado
ListField nome do campo de BD exibido no controle
KeyField nome do campo-chave do BD que identifica o registro
selecionado
KeyValue valor do campo-chave do BD que retornado pela sele o
da lista
Text valor do campo da lista do BD exibido na lista
Para conectar o controle ao conjunto de dados de consulta, insira valores para estas trs
propriedades: "DataSet", "ListField" e "KeyField".
Observe que o valor retornado disponibilizado atravs das propriedades "Text" ou "KeyValue",
que n o s o exibidas no inspetor de objetos. Elas somente podem ser acessadas atravs do
cdigo. A posi o inicial do cursor no conjunto de dados de consulta pode ser configurado por
cdigo usando "KeyValue".
12.1.2 TfrxADOTable
Este componente usado para acessar uma tabela de BD usando ADO. O componente possui
as seguintes propriedades:
Propriedade Descri o
DatabaseName nome da conex o (nome do componente TfrxADODatabase)
FieldAliases permite que aliases sejam configurados para os campos do
conjunto de dados
Filter express o para filtrar registros
Filtered se filtrado ou n o
IndexFieldNames nomes dos campos de ndice (para classifica o)
IndexName nome do ndice secundrio
MasterFields campos conectados ao conjunto de dados mestre
Master conjunto de dados mestre
TableName nome da tabela de BD
UserName alias do conjunto de dados, usado no cdigo
O editor da propriedade "MasterFields" usado para criar conexes mestre-detalhe entre duas
tabelas. Para conectar duas tabelas com a rela o mestre-detalhe, necessrio configurar
uma segunda tabela na propriedade "Master" da tabela dependente e abrir o editor da
propriedade "MasterFields". Se a tabela possuir ndices secundrios que devem ser usados,
configure antes a propriedade "IndexName".
O editor vincula visualmente os campos "mestre" e "detalhe" dos conjuntos de dados. Quando
Para conectar campos nos dois conjuntos de dados, selecione um campo na lista esquerda
(o conjunto de dados detalhe), depois um campo da lista direita (o conjunto de dados mestre)
e clique no bot o Adicionar. O vnculo entre os dois campos exibido na lista inferior. Para
limpar a lista inferior use o bot o Limpar. Os campos vinculados devem ser indexados e de
tipos compatveis.
12.1.3 TfrxADOQuery
Este componente executa consultas SQL em um BD. Ele tem as seguintes propriedades:
Propriedade Descri o
DatabaseName nome da conex o (nome do componente TfrxADODatabase)
FieldAliases permite que aliases sejam definidos para os campos do
conjunto de dados
Filter express o para filtrar registros
Filtered se filtrado ou n o
Master conjunto de dados mestre
Params lista dos parmetros da consulta
SQL texto da consulta
UserName alias do conjunto de dados, usado no cdigo
IgnoreDupParams se for True, permite usar parmetros com nomes duplicados.
O nome dos parmetros da consulta n o editado no editor de
parmetros
A propriedade "Params" tambm possui seu prprio editor. Ela habilitada quando o texto de
uma consulta tiver parmetros.
Um parmetro pode ter dois tipos: seu valor derivado da fonte mestre ou ele configurado
como um valor discreto (seja como um valor absoluto, como foi mostrado acima, ou vinculado
a uma varivel ou propriedade de um objeto).
12.1.4 TfrxADODataBase
Este componente usado para a conex o a um banco de dados. Sua fun o parecida do
componente Delphi "TADOConnection". O componente possui as seguintes propriedades:
Propriedade Descri o
Connected se for True, a conex o ativada
DatabaseName a cadeia de conex o ADO
LoginPrompt se a senha deve ser solicitada ao conectar ao BD
A propriedade "LoginPrompt" define se a senha deve ser solicitada ao efetuar uma conex o ao
BD. Se "LoginPrompt" for False, necessrio incluir um nome de usurio e uma senha devem
ser includos na cadeia de conex o ADO.
ADOConnection1:
LoginPrompt = False
frxADOComponents1:
DefaultDatabase = ADOConnection1
Depois disso, compile e execute o projeto. Isso tudo que voc precisa fazer para criar o
designer de relatrios de tempo de execu o para o usurio final.
Observe que a propriedade "Database" j est conectada a nosso banco de dados, porque isso
foi especificado na propriedade "TfrxADOComponents.DefaultDatabase". O nome da tabela,
porm, deve ser configurado agora:
TableName = 'Customer'
V para a guia Pgina1. Conecte a banda "DadosMestre" tabela ao clicar duas vezes nela e
selecionar "ADOTable1" na caixa de dilogo.
Arraste os campos exibidos abaixo da janela "rvore de dados" para a pgina do relatrio, que
ficar parecido com isto:
Abra a guia "Dados" e coloque um componente "Consulta ADO" na pgina. Clique duas vezes
nele para abrir seu editor e insira o seguinte texto SQL:
Label1:
Caption = 'Select if CustNo greater than'
Edit1:
Text = '2000'
Button1:
Caption = 'OK'
ModalResult = mrOk
Button2:
Caption = 'Cancel'
ModalResult = mrCancel
Depois disso v para a Pgina1 do design do relatrio e crie o relatrio conforme foi mostrado
no exemplo anterior:
XIII
Herana do
relatrio
Herana do relatrio 185
Muitas vezes um grupo de relatrios compartilha dados comuns por exemplo, o cabealho/
rodap com o logo da empresa ou outros dados, como o e-mail ou o endereo, etc. Se houver
a necessidade de modificar os dados da empresa, por exemplo o endereo de e-mail, ent o
isso teria que ser feito em cada relatrio! Para evitar essa tarefa entediante, possvel usar a
herana do relatrio. O que a herana do relatrio?
Como exemplo, relatrios normalmente possuem elementos (logo, nome da empresa, e-mail,
etc.) colocados no ttulo do relatrio ou no cabealho da pgina. possvel criar um relatrio
base que contm somente estes elementos comuns. Todos os outros relatrios podem ent o
usar o relatrio base e assim conter todos os elementos comuns, assim como outros
elementos que forem adicionados especificamente a cada relatrio.
Se algo precisar ser alterado (como o logo ou e-mail), o relatrio base aberto e as alteraes
necessrias ser o feitas ali. Todos os relatrios com herana do relatrio base ser o ent o
alterados automaticamente. Na verdade, quando um relatrio baseado em herana aberto, o
relatrio base aberto primeiro, seguido do relatrio derivado.
Primeiro necessrio criar o relatrio base. Que elementos ele deve conter? Os elementos
s o o bitmap do logo, o ttulo "Nossa empresa" e o endereo de e-mail. Crie um relatrio novo e
coloque os objetos comuns em "TtuloDoRelatrio":
Salve o relatrio como "base.fr3". Em que pasta? Isso depende de como voc configurou o
componente "TfrxDesigner". Por padr o, o FastReport procura os relatrios de base na pasta
que contm o arquivo .exe do aplicativo. De forma alternativa, possvel especificar uma pasta
para modelos na propriedade "TfrxDesigner.TemplateDir".
Agora crie o relatrio derivado. Para fazer isso, use "Arquivo > Novo...", selecione a guia
"Modelos" na caixa de dilogo e procure o relatrio base ("base.fr3"). Clique em "Herana do
relatrio" e pressione OK:
O FastReport criar um relatrio que contm todos os objetos do relatrio base. Eles s o
marcados com o smbolo de "cadeado":
O que significa o smbolo de "cadeado"? Ele significa que estes objetos n o podem ser
renomeados ou excludos, e tambm n o podem ser movidos para outra banda. possvel
efetuar alteraes em qualquer outra propriedades (como texto, cor e borda). Observe que se
voc alterar alguma propriedade de um objeto bloqueado (por exemplo a cor), esta altera o
ser armazenada no relatrio derivado. Se voc depois alterar a cor deste objeto no relatrio
base, a altera o ser ignorada pelo relatrio derivado. Por exemplo: abra o relatrio derivado,
altere a cor de "Nossa empresa" para vermelho e salve o relatrio. Agora abra o relatrio base e
configure a cor de "Nossa empresa" como verde. Quando o relatrio derivado for aberto
novamente, a cor de "Nossa empresa" ainda ser vermelho. Por isso, prefervel alterar as
propriedades de objetos que possuem o smbolo de "cadeado" no relatrio base, e n o no
relatrio derivado.
Vamos concluir nosso relatrio. Tudo que necessrio adicionar as bandas cabealho de
pgina e dados mestre:
Salve o relatrio. Agora abra o relatrio derivado e veja que o endereo de e-mail foi alterado
nele tambm:
O que acontece se for necessrio adicionar alguns objetos ao relatrio base? H uma regra
simples: os relatrios de base e os relatrios derivados n o podem conter nenhum objeto com
o mesmo nome. Ao alterar o relatrio base, pode n o ser possvel saber quantos relatrios
utilizam o relatrio base nem quais nomes de objetos foram usados nos relatrios derivados.
Neste caso, siga uma estratgia simples: ao adicionar objetos a relatrios de base, nomeie os
objetos usando um modelo, como 'NomeRelatrio_NomeObjeto'. Em nosso exemplo, adicione
um objeto "Texto" a nosso relatrio e configure seu nome como 'BaseMemo3'.
Isso acontece se os dois relatrios tiverem objetos com o mesmo nome. Os objetos com
nomes duplicados podem ser excludos ou renomeados no relatrio derivado.
XIV
Assistentes
Assistentes 191
Os cones do tipo "Relatrio padr o" e "Reltrio matricial" criam relatrios padr o e matriciais
vazios, respectivamente (veja mais informaes sobre relatrios matriciais nas sees
anteriores). Os relatrios novos contm um pgina vazia.
Os cones do tipo "Assistente de Relatrio Padr o" e "Assistente de Relatrio Matricial" guiam o
processo de escolher o conjunto de dados e os campos necessrios do relatrio, a cria o
opcional de grupos e a sele o do layout de dados. Vamos dar uma olhada em um relatrio
criado com a ajuda do "Assistente de Relatrio Padr o".
Escolha "Arquivo > Novo..." e clique no cone "Assistente de Relatrio Padr o". A caixa de
dilogo do assistente de relatrio exibida:
A caixa de dilogo possui diversas guias. Na primeira guia, escolha a fonte de dados do
relatrio. Escolha a tabela customer e aperte o bot o "Prximo >>".
No lado esquerdo h uma lista de campos disponveis; no campo direito h uma lista de
campos que foram selecionados para serem exibidos no relatrio. Use os botes "Adicionar >",
"Adicionar todos >>", "< Remover" e "<< Remover todos" para mover os campos de uma lista
para a outra. Use os botes para mover os campos selecionados para cima ou para baixo na
lista. Adicione os campos "Company", "Contact", "Phone" e "FAX" lista de campos
selecionados e aperte o bot o "Prximo >>".
A prxima guia define a orienta o da pgina e a escolha de um entre dois layouts de pgina
tabular e em colunas:
Finalmente, a ltima guia lista os esquemas de cores disponveis para seu relatrio, que
novamente s o ilustrados no lado direito da caixa de dilogo.
necessrio criar a cadeia de conex o com o bot o ..., que abre a caixa de dilogo de conex o
padr o do Windows para configurar os parmetros do banco de dados e da conex o. Depois
disso possvel configurar o nome de usurio e a senha, se forem necessrios.
Selecione o nome da tabela. Se necessrio, tambm possvel definir um filtro, por exemplo:
A consulta SQL deve ser criada aqui. possvel usar o construtor visual de consultas para
fazer isso - clique no bot o . O construtor de consultas descrito mais adiante neste captulo.
1 barra de ferramentas
2 espao de trabalho do construtor
3 lista de tabelas disponveis
4 propriedades de campo da tabela selecionada
Barra de ferramentas:
- abrir arquivo SQL
- salvar consulta em um arquivo (o diagrama da consulta tambm salvo no arquivo)
- limpar o espao de trabalho do construtor
- bot o OK: salvar e fechar o construtor
- bot o Cancelar: fechar o construtor sem salvar
Ao "arrastar" campos entre as tabelas no espao de trabalho (2), "linhas de uni o" s o exibidas.
Quando campos s o unidos, a compatibilidade dos tipos dos campos unidos verificada. O
construtor n o permite a uni o de campos de tipos n o compatveis. Para alterar os
parmetros da uni o, mantenha o cursor sobre a "linha de uni o", clique com o bot o direito e
selecione o item Opes. A caixa de dilogo Opes de Link exibida, na qual possvel
configurar a uni o, como mostrado abaixo:
Clique em "Novo Relatrio" na barra de ferramentas do designer para criar uma pgina de
relatrio com as bandas "Cabealho do Relatrio", "Dados de 1o. Nvel" e "Rodap da Pgina".
Coloque um componente "Consulta ADO" na guia "Dados". Clique duas vezes no componente
para abrir o editor de consultas.
Clique no bot o no editor de consultas para abrir a janela do criador de consultas. Selecione
a tabela Customer na lista de tabelas (3) e arraste-a para o espao de trabalho (ou clique duas
vezes na tabela). Selecione os campos CustNo, Company e Phone:
Isso tudo que necessrio fazer para criar uma consulta. O texto da consulta exibido na
guia SQL e a guia Resultado exibe os dados retornados pela consulta. Clique em para fechar o
construtor e retornar ao editor de consultas, onde o texto da consulta exibido:
Ao clicar em no editor de consultas, voc volta para o designer de relatrios. Tudo que resta
fazer conectar a banda "DadosMestre" fonte de dados e colocar os campos necessrios na
banda "DadosMestre".
Anteriormente abordamos um relatrio que utiliza grupos. Vamos criar uma consulta para este
relatrio com a utiliza o do construtor de consultas. Precisamos criar uma consulta em SQL
que retornar dados de ambas as tabelas, e os dados devem ser agrupados com condies
especficas. Em nosso exemplo a condi o ser os campos CustNo nas duas tabelas.
Arraste duas tabelas para a rea de trabalho Customers e Orders. Ambas possuem o campo
CustNo, que ser usado para unir as tabelas. Arraste o campo CustNo de uma tabela para a
outra para unir as duas tabelas:
Agora necessrio configurar os campos que devem ser exibidos e o campo de classifica o.
Marque o campo "*" nas duas tabelas e marque o campo CustNo na tabela Customer. Os
campos selecionados s o exibidos na lista de parmetros de campo. Selecione a ordem de
classifica o do campo CustNo:
Isso tudo que necessrio fazer para concluir a consulta. Esta a aparncia do cdigo SQL:
XV
Visualiza o,
impress o e
exporta o de
um relatrio
206 FastReport VCL 5 User's Manual
Um relatrio construdo pode ser exibido e impresso ou exportado para um dos formatos com
suporte. Tudo isso pode ser feito na janela de visualiza o.
Legenda:
1 pginas concludas do relatrio
2 barra de ferramentas
3 barra de status
4 espao da estrutura de tpicos para a rvore da estrutura de tpicos (exibida acima) ou
para miniaturas
Vamos dar uma olhada nas opes disponves nesta caixa de dilogo.
Painel "Pginas": selecione quais pginas ser o impressas (todas, a pgina atual ou um
intervalo selecionado).
Painel "Cpias": configure o nmero de cpias a serem impressas. Ao imprimir mais de uma
cpia, se Agrupar estiver marcado, a primeira cpia impressa completamente, ent o a
segunda impressa completamente, etc. Se Agrupar n o estiver marcado, ent o todas as
cpias da primeira pgina s o impressas, seguidas de todas as cpias da segunda pgina, etc.
- Imprimir: seleciona quais pginas ser o impressas (Todas as pginas, Pginas pares,
Pginas mpares)
- Ordem: imprimir pginas na ordem direta ou inversa (primeira pgina at a ltima, ltima
pgina at a primeira)
- Duplex: gerenciar duplex por padr o (as configuraes do relatrio s o usadas) ou escolha
uma das opes de duplex: vertical, horizonal, simplex
- Modo padr o: imprime na folha definida no relatrio. Uma pgina de relatrio impressa em
cada folha
- Repartir pginas grandes: este modo til ao imprimir um relatrio A3 em uma folha A4.
Uma pgina do relatrio impressa em mais de uma folha. Quando este modo escolhido,
o tamanho da folha ("Imprimir na folha") tambm deve ser especificado.
- Juntar pginas pequenas: este modo til ao imprimir um relatrio A4 em uma folha A3.
Duas ou mais pginas de visualiza o s o impressas em uma folha. Quando este modo
escolhido, o tamanho da folha ("Imprimir na folha") tambm deve ser especificado.
- Modo escala: o relatrio impresso em uma folha de tamanho especificado. Toda a sada do
relatrio dimensionada. Uma pgina da visualiza o impressa por folha. Quando este
modo escolhido, o tamanho da folha ("Imprimir na folha") tambm deve ser especificado.
Ao clicar em OK, a impress o do relatrio iniciada. Se "Imprimir para arquivo" for marcado, a
caixa de dilogo padr o "Salvar Como..." aberta. O relatrio salvo em um arquivo de
extens o *.prn. O arquivo contm uma cpia das informaes enviadas impressora.
Para continuar a pesquisa, clique em F3. O prximo resultado (se houver) ser realado.
O FastReport pode exportar para os seguintes formatos: PDF, Planilha Open Document, Texto
Open Document, Excel 97/2000/XP, Excel XML, Excel 2007, RTF, Word 2007, PowerPoint
2007, HTML, texto, CSV, BMP, Jpeg, Tiff e Gif. Relatrios tambm podem ser enviados por e-
mail em qualquer um dos formatos listados.
- 'Camada': cada objeto do relatrio exportado para uma camada separada. A sada
exportada parecida com a visualiza o original.
- 'Tabela': a exporta o para o arquivo de sada feita atravs da cria o de uma grade de
transi o na memria, seguido da sada dessa grade. A sada exportada corresponde
visualiza o original, contanto que os princpios do bom design de um relatrio tenham sido
seguidos (consulte o captulo "Consideraes do design do relatrio").
- 'Desenho': objetos exportados s o capturados da imagem da pgina. A sada exportada
uma cpia direta da visualiza o. este mtodo usado ao exportar para formatos grficos.
Ao exportar para o formato PDF, uma caixa de dilogo aberta que solicita as configuraes do
arquivo de sada.
Configuraes de exporta o:
O FastReport suporta a exporta o para arquivos de tabela (.ods) e texto (.odt). Estes arquivos
podem ser abertos no OpenOffice.
Ao exportar para o formato ODF, aberta uma caixa de dilogo que solicita as configuraes
do arquivo de sada.
Configuraes de exporta o:
Ao exportar para o formato RTF, uma caixa de dilogo aberta que solicita as configuraes do
arquivo de sada.
Configuraes de exporta o:
Ao exportar para o formato Word 2007, uma caixa de dilogo aberta que solicita as
configuraes do arquivo de sada.
Configuraes de exporta o:
Ao exportar para o formato Excel, uma caixa de dilogo aberta que solicita as configuraes
do arquivo de sada.
Agrupamento de Dados:
- Como no relatrio: cada pgina do relatrio exportada em uma planilha Excel separada;
- Tudo em uma pgina: gera um documento contnuo sem quebras de pgina e cabealhos/
rodaps de pgina;
- Pedaos. Cada pedao possui (fileiras): cada pedao exportado em uma planilha Excel
separada.
Configuraes de exporta o:
Ao exportar para o formato XML, exibida uma caixa de dilogo para a configura o dos
parmetros do arquivo de sada.
Parmetros de exporta o:
Ao exportar para o formato Excel, uma caixa de dilogo aberta que solicita as configuraes
do arquivo de sada.
Dividir em planilhas:
- N o dividir: todas as pginas do relatrio s o exportadas para uma nica planilha Excel
- Usar pginas do relatrio: cada pgina do relatrio exportada para uma planilha Excel
separada
- Nmero de fileiras: cada conjunto de fileiras exportado para uma planilha Excel separada
Parmetros de exporta o:
exporta o
Ao exportar para o formato PowerPoint, uma caixa de dilogo aberta que solicita as
configuraes do arquivo de sada.
Configuraes de exporta o:
Ao exportar para o formato CSV, uma caixa de dilogo aberta que solicita as configuraes do
arquivo de sada.
Configuraes de exporta o:
Ao exportar para o formato HTML, uma caixa de dilogo aberta que solicita as configuraes
do arquivo de sada.
Configuraes de exporta o:
- Estilos: estilos de design dos objetos texto exportados; quando desabilitados, a velocidade
de exporta o maior, mas a aparncia n o igual a uma planilha
- Todos em uma pasta: arquivos adicionais s o salvos na mesma pasta do arquivo principal
- Navegador de pginas: um navegador especial para criar saltos rpidos entre pginas
- Largura fixa: bloqueia o ajuste de largura automtico de tabelas/diagramas ao alterar o
tamanho da janela de exibi o
- Multi-pgina: cada pgina exportada como um arquivo separado
- Plano de fundo: a imagem grfica configurada como o plano de fundo da pgina exportada
para o arquivo HTML
- Figuras: imagens grficas s o exportadas para o arquivo HTML
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o
usando o visualizador HTML padr o instalado no computador.
Recursos da exporta o: a exporta o pode ser composta de diversos arquivos; cada imagem
grfica exportada para seu prprio arquivo; objetos RichText s o exportados como texto
simples; a precis o da renderiza o e do tamanho do arquivo dependem do design do relatrio,
consulte o captulo "Consideraes do design do relatrio".
Ao exportar para o formato texto, uma caixa de dilogo aberta que solicita as configuraes
do arquivo de sada.
Configuraes de exporta o:
- BMP (Windows Device Independent Bitmap): usado para armazenar imagens bitmap usadas
no Windows. Um formato de arquivo padr o em computadores que utilizam o Windows.
- TIFF, TIF (Target Image File Format): um formato independente de hardware. Hoje em dia
Ao exportar para os formatos exibidos acima, uma caixa de dilogo aberta que solicita as
configuraes do arquivo de sada.
Configuraes de exporta o:
- Arquivos separados: quando habilitado, cada pgina do relatrio exportada para um arquivo
separado; os nomes de arquivo s o derivados do nome de arquivo especificado com um
sufixo de um caractere de sublinhado + o nmero da pgina
- Monocromtico: exporta como uma imagem monocromtica
- Reduzir pgina: o espao em branco nas bordas da pgina s o cortados
- Qualidade JPEG: a taxa de compacta o JPEG; somente habilitada ao exportar para o
formato JPEG
- Resolu o: a resolu o grfica da imagem exportada
Ao exportar por e-mail, a caixa de dilogo de configura o de e-mail aberta. Antes de exportar,
necessrio configurar os detalhes da conta de e-mail do remetente na guia "Conta":
Recursos da exporta o por e-mail: somente a autentica o simples nos servidores SMTP
suportada. Se a autentica o n o for requerida, n o necessrio inserir o "Login" e "Senha".
Muitos formatos usam uma apresenta o de dados em tabela, como HTML, XLS, XML, RTF e
CSV. Ao contrrio da liberdade permitida no design da pgina no FastReport, ao exportar para
estes formatos, as clulas de sada criadas para estas tabelas n o podem ter intersees ou
serem arranjadas em camadas. Os filtros de exporta o normalmente levam esses
requerimentos em conta quando os objetos s o exportados pelo FastReport, atravs da
utiliza o de algoritmos especiais que lidam com intersees e o melhor posicionamento de
clulas. Nas intersees de objetos s o criadas novas linhas e colunas na tabela de sada. Isso
necessrio para permitir que o FastReport posicione os objetos de maneira exata e para obter
a maior correspondncia com a pgina de visualiza o original. Um grande nmero de objetos
com interse o no design de um relatrio resulta em um grande nmero de colunas e fileiras
adicionais na tabela de sada. Isso, por sua vez, pode levar necessidade de editar o arquivo
exportado em seu prprio editor antes que ele possa ser utilizado para outros fins.
Por exemplo, veja um relatrio onde o design possui uma sobreposi o pequena entre dois
objetos na mesma banda, e o nmero de registros no relatrio 150. Ao exportar para o
formato RTF, 450 linhas ser o criadas (150 fileiras para cada objeto e 150 fileiras para a
interse o). Se removermos a sobreposi o, haveria apenas 300 fileiras. Em relatrios
grandes com um grande nmero de objetos, a diferena seria muito maior. Isso, claro, afeta o
tamanho do arquivo de sada.
Tenha isso em mente ao criar relatrios que devem ser exportados para qualquer um dos
formatos que usa o mtodo de sada de 'tabela'.
Ao fazer o design de tabelas nos relatrios, fique ciente das bordas de clulas adjacentes.
importante que clulas n o se sobreponham e n o sejam arranjadas em camadas. O algoritmo
de exporta o pode lidar com as clulas de maneira inesperada e fornecer um resultado que
n o o desejado. melhor arranjar objetos de maneira que sejam colocados em linha tanto
verticalmente como horizontalmente. As linhas guia podem ajudar com isso.
Para usar linhas guia no designer do FastReport, clique na rgua horizontal ou vertical no topo
ou no lado esquerdo da pgina do relatrio e arraste a rgua at a posi o desejada na pgina,
onde a linha guia ser exibida. Ent o voc poder posicionar objetos que estejam alinhados
com essas linhas guia horizontais e verticais.
O alinhamento da grade tambm pode ajudar no posicionamento de objetos "Texto", para evitar
sua sobreposi o. A grade habilitada nas Opes do designer, onde tambm possvel
ajustar a densidade: "Exibir > Opes... > Grade".
Ao usar bordas em objetos "Texto", melhor usar as propriedades de borda do objeto em vez
de adicionar objetos grficos como linhas e retngulos ao redor do texto. Tambm tente n o
usar objetos no plano de fundo, embaixo de objetos de texto transparentes.
Manter essas regras simples em mente ajudar voc a criar um relatrio que ter uma
aparncia perfeita aps ser exportado para um formato que utilize o mtodo de sada baseado
em tabela.
Ruim Bom
Ruim
Bom