Académique Documents
Professionnel Documents
Culture Documents
User's Manual
Table of contents
2
Chapter I Designer
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
17
1 Objetos
...................................................................................................................................
do relatrio
17
2 Relatrio
...................................................................................................................................
de exemplo "Ol, Mundo!"
17
3 O objeto
...................................................................................................................................
"Texto"
18
4 Tags
...................................................................................................................................
HTML no objeto "Texto"
20
5 Exibir
...................................................................................................................................
expresses com a ajuda do objeto "Texto"
21
6 Bandas
...................................................................................................................................
no FastReport
22
7 Bandas
...................................................................................................................................
de dados
24
8 O componente
...................................................................................................................................
TfrxDBDataSet
24
9 Relatrio
...................................................................................................................................
"Lista de Clientes"
25
10 Exibir
...................................................................................................................................
campos de BD com a ajuda do objeto "Texto"
28
11 Aliases
................................................................................................................................... 28
12 Variveis
................................................................................................................................... 30
13 Objeto
...................................................................................................................................
"Figura"
32
14 Relatrio
...................................................................................................................................
com figuras
33
15 Exibir
...................................................................................................................................
texto com vrias linhas
34
16 Divis
...................................................................................................................................
o de dados
36
17 Quebra
...................................................................................................................................
automtica de linha de objetos
38
18 Exibir
...................................................................................................................................
dados na forma de uma tabela
40
19 Imprimir
...................................................................................................................................
rtulos
42
20 Bandas
...................................................................................................................................
filho
44
21 Deslocar
...................................................................................................................................
objetos
46
22 Relatrio
...................................................................................................................................
com dois nveis de dados (mestre-detalhe)
47
Table of contents
II
23 Cabealhos
...................................................................................................................................
e rodaps de uma banda de dados
50
24 Relatrios
...................................................................................................................................
com pginas mltiplas
52
25 Propriedades
...................................................................................................................................
RowCount e PageCount
53
56
1 Relatrio
...................................................................................................................................
com grupos
56
2 Outros
...................................................................................................................................
recursos de grupos
58
3 Redefinir
...................................................................................................................................
nmeros de pginas
60
4 Grupos
...................................................................................................................................
de drill down
61
5 Numera
...................................................................................................................................
o de linhas
61
6 Funes
...................................................................................................................................
de agrega o
62
7 Totais
...................................................................................................................................
da pgina e do relatrio
65
8 Inserir
...................................................................................................................................
funes de agrega o
66
69
1 Formatar
...................................................................................................................................
valores
69
2 Formata
...................................................................................................................................
o embutida
70
3 Realce
...................................................................................................................................
condicional
71
4 Colorindo
...................................................................................................................................
fileiras de dados alternadas
74
77
1 Relatrios
...................................................................................................................................
aninhados (sub-relatrios)
77
2 Sub-relatrios
...................................................................................................................................
lado a lado
77
3 Limitaes
...................................................................................................................................
na utiliza o de sub-relatrios
78
4 Op
...................................................................................................................................
o PrintOnParent
79
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
III
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
116
1 Constru
...................................................................................................................................
o de um relatrio de tabela de refer ncia cruzada
117
2 Modificar
...................................................................................................................................
a apar ncia
119
3 Utiliza
...................................................................................................................................
o de funes
121
4 Classifica
...................................................................................................................................
o de valores
122
5 Tabelas
...................................................................................................................................
com cabealhos compostos
123
6 Ajustar
...................................................................................................................................
a largura da clula
125
7 Cor
...................................................................................................................................
da fonte e realce
127
8 Gerenciar
...................................................................................................................................
uma tabela de refer ncia cruzada em um script
129
9 Ajustar
...................................................................................................................................
o tamanho da fileira/coluna
134
10 Preencher
...................................................................................................................................
uma tabela manualmente
135
11 Adicionar
...................................................................................................................................
objetos externos tabela
137
12 Algumas
...................................................................................................................................
configuraes teis
139
143
1 Limitar
...................................................................................................................................
o nmero de valores do grfico
146
2 Algumas
...................................................................................................................................
configuraes teis
147
3 Grfico
...................................................................................................................................
com valores inseridos manualmente
147
4 Cria
...................................................................................................................................
o de grficos com um script
148
5 Imprimir
...................................................................................................................................
um grfico criado em Delphi
149
151
1 Hiperlink
................................................................................................................................... 151
2 Configura
...................................................................................................................................
o de um hiperlink
151
3 Link
...................................................................................................................................
para a URL
152
4 Link
...................................................................................................................................
para o nmero da pgina
153
5 Link
...................................................................................................................................
para uma ncora
153
6 Link
...................................................................................................................................
para um relatrio detalhado
153
7 Link
...................................................................................................................................
a uma pgina detalhada
154
8 Link
...................................................................................................................................
personalizado
154
156
Table of contents
IV
1 Tabelas
...................................................................................................................................
de refer ncia cruzada em relatrios matriciais
159
2 Impress
...................................................................................................................................
o de um relatrio matricial
161
3 Objeto
...................................................................................................................................
"Comando"
161
164
1 Controles
................................................................................................................................... 164
2 Relatrio
...................................................................................................................................
"Ol, Mundo!"
165
3 Inserir
...................................................................................................................................
parmetros e transferi-los para um relatrio
167
4 Intera
...................................................................................................................................
o com controles
167
5 Diversos
...................................................................................................................................
formulrios de dilogo
168
6 Gerenciar
...................................................................................................................................
formulrios de dilogo
169
172
1 Descries
...................................................................................................................................
de componentes
173
TfrxDBLookupCom
.........................................................................................................................................................
boBox
173
TfrxADOTable
......................................................................................................................................................... 174
TfrxADOQuery
......................................................................................................................................................... 176
TfrxADODataBase
......................................................................................................................................................... 178
2 Designer
...................................................................................................................................
de relatrios
178
3 Relatrio
...................................................................................................................................
simples do tipo "Lista"
179
4 Relatrio
...................................................................................................................................
com consulta paramtrica
181
5 Outros
...................................................................................................................................
recursos teis
183
185
1 Criar
...................................................................................................................................
um relatrio base
185
2 Alterar
...................................................................................................................................
um relatrio base
187
3 Controle
...................................................................................................................................
de herana
188
191
1 Assistente
...................................................................................................................................
de relatrio novo
191
2 Assistente
...................................................................................................................................
de nova conex o
195
3 Assistente
...................................................................................................................................
de nova tabela
196
4 Assistente
...................................................................................................................................
de nova consulta
197
5 Constru
...................................................................................................................................
o da consulta
197
Utiliza o.........................................................................................................................................................
do construtor de consultas
200
Construir.........................................................................................................................................................
consultas com plexas
202
206
1 Teclas
...................................................................................................................................
de controle
207
2 Controle
...................................................................................................................................
do mouse
208
3 Impress
...................................................................................................................................
o do relatrio
208
4 Pesquisa
...................................................................................................................................
de texto em relatrios
211
6 Enviar
...................................................................................................................................
um relatrio por e-mail
224
7 Consideraes
...................................................................................................................................
do design do relatrio
226
Chapter
I
Designer
Manual v5.0.0
Designer
1.1
Teclas de controle
Keys
Description
Ctrl+O
Ctrl+S
Ctrl+P
Ctrl+Z
Ctrl+C
Ctrl+V
Ctrl+X
Ctrl+A
Arrow, Tab
Del
Enter
1.2
Shift+arrows
Ctrl+arrows
Alt+arrows
Controle do mouse
Opera o
Descri o
Bot o esquerdo
Bot o direito
Dois cliques
Roda do mouse
Manual v5.0.0
1.3
Barras de ferramentas
1.3.1
Nome
Descri o
Selecionar
Objetos
M o
1.3.2
Zoom
Editar Texto
Copiar
Formata o
cone
Nome
Novo Relatrio
Descri o
cria um relatrio em branco
Manual v5.0.0
Designer
Abrir Relatrio
Salvar Relatrio
Visualizar
"Ctrl+P"
Nova Pgina de
Relatrio
Nova Pgina de
Dilogo
Excluir Pgina
para
rea
de
Copiar
Colar
Desfazer
Refazer
Agrupar
Desagrupar
Zoom
1.3.3
cone
Nome
Descri o
Sem
estilo
Estilo
Arial
Nome da Fonte
Manual v5.0.0
10
Tamanho da
Fonte
Sublinhado
(alternar)
Centralizar
Alinhar Direita
Justificar
1.3.4
Alinhar Acima
Centralizar
Verticalmente
Alinhar Abaixo
cone
Nome
Descri o
Manual v5.0.0
Designer
Linha Direita
(alternar)
Todas as Linhas da
Borda
Sem Borda
Editor de Borda
Cor do Plano de Fundo define a cor do plano de fundo a partir de uma lista
suspensa
Editor de
Preenchimento
1.3.5
invoca a caixa
preenchimento
de
dilogo
do
editor
de
Cor da Borda
Estilo da Borda
Largura da Borda
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
selecionado)
direitas
(ao
primeiro
objeto
verticais
(ao
primeiro
objeto
Manual v5.0.0
alinhar bordas
selecionado)
inferiores
(ao primeiro
objeto
Manual v5.0.0
Designer
1.4
Opes do designer
Configure as opes do designer atravs do comando de menu "Exibir > Opes...".
Manual v5.0.0
10
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.
A op o "Exibir lista suspensa de campos" controla a acessibilidade da lista suspensa ao
colocar o mouse sobre objetos "Texto" que est o conectados a campos de dados. Isso pode
ser necessrio se houver muitos objetos "Texto" estreitos em uma banda.
A op o "Coloca o livre de bandas" desabilita o ajuste de bandas pgina. Esta op o
permanece desabilitada por padr o, e as bandas s o agrupadas automaticamente na pgina de
acordo com sua fun o. O espao entre as bandas definido no campo "Espao entre
bandas".
1.5
Configura o do Relatrio
A caixa de dilogo Configura o do Relatrio pode ser acessada no menu "Relatrio >
Opes...". A caixa de dilogo possui trs guias.
Na primeira guia possvel ver as configuraes gerais do relatrio:
Manual v5.0.0
Designer
11
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.
Tambm possvel configurar o nmero de cpias do relatrio a serem impressas, e se elas
devem ser agrupadas. O valor definido nesta caixa de dilogo ser mostrado na caixa de
dilogo "Imprimir" ao imprimir o relatrio.
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
Manual v5.0.0
12
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.
A terceira guia da caixa de dilogo permite configurar propriedades descritivas do relatrio:
Manual v5.0.0
Designer
13
Todos os campos nesta guia servem apenas para fins informativos e n o podem ser
impressos.
1.6
Opes da Pgina
As "Opes da Pgina" est o disponveis atravs do menu "Arquivo > Configuraes da
Pgina..." ou ao clicar duas vezes em um espao em branco na pgina. A caixa de dilogo
possui duas guias:
Manual v5.0.0
14
Manual v5.0.0
Designer
15
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).
A op o "Margens espelho" troca as margens esquerda e direita de pginas pares durante a
visualiza o ou impress o de um relatrio.
As opes "Largura e altura de pgina infinita" aumentam o tamanho da pgina dependendo do
nmero de registros de dados na pgina (quando o relatrio for executado). Se forem
habilitadas, o relatrio ir ser exibido em uma pgina grande na janela de visualiza o, em vez
de diversas pginas de tamanho padr o.
A op o "Altura extensa em modo de design" aumenta a altura da pgina no designer. Este
recurso pode ser til se houver muitas bandas em uma pgina. Ele deve ser usado ao trabalhar
com bandas sobrepostas. Ele afeta somente a altura da pgina no modo de design.
Manual v5.0.0
Chapter
II
Criar relatrios
Criar relatrios
2.1
17
Objetos do relatrio
FastReport Designer representa relatrios como uma cole o de pginas esquemticas.
Objetos s o colocados em qualquer lugar nas pginas do relatrio e s o usados para definir a
aparncia do relatrio e exibir diversas informaes, como texto e grficos. Estes s o os
objetos FastReport que s o includos no pacote padr o:
- 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.
2.2
Manual v5.0.0
18
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.
2.3
O objeto "Texto"
O objeto "Texto" possui diversos recursos. Ele pode exibir texto em um quadro e ser preechido
com uma cor. O texto pode ser exibido usando qualquer fonte de qualquer tamanho e estilo.
Todas as propriedades podem ser definidas visualmente com a ajuda das barras de
ferramentas.
Seguem alguns exemplos do design do texto:
Manual v5.0.0
Criar relatrios
19
Agora vamos dar uma olhada em outros recursos deste objeto bsico. Como exemplo,
criaremos um novo objeto "Texto" que exibir duas linhas de texto:
Esta uma linha de texto muito, muito, muito longa.
E esta outra linha, a mais curta.
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.
Agora veremos como funciona o alinhamento de texto dentro do objeto. Os botes de
alinhamento est o localizados na barra de ferramentas "Texto" e eles controlam o alinhamento
de texto horizontal ou vertical. Observe o bot o "Justificar", que permite alinhar pargrafos a
ambas as bordas do objeto. Para fazer isso, "WordWrap" deve estar habilitada.
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.
Manual v5.0.0
20
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:
- BrushStyle: o tipo de preenchimento do objeto
- CharSpacing: o espaamento entre caracteres, em pixels
- GapX, GapY: os recuos do texto na borda esquerda e superior, em pixels
- LineSpacing: o espaamento entre linhas, em pixels
- ParagraphGap: o recuo da primeira linha do pargrafo, em pixels
2.4
Manual v5.0.0
Criar relatrios
21
2.5
Manual v5.0.0
22
2.6
Bandas no FastReport
Bandas s o usadas para colocar os objetos que elas contm em locais especficos na pgina
de sada. Ao colocar um objeto na banda "Cabealho da Pgina" ns dizemos ao mecanismo
de relatrios que o objeto deve ser exibido no topo de cada pgina no relatrio final. De maneira
similar, objetos na banda "Rodap da Pgina" s o exibidos na parte inferior de cada pgina.
Vamos demonstrar isso com um exemplo. Criaremos um relatrio contendo "Oi!" no topo da
pgina, a data atual direita e o nmero da pgina no rodap da pgina ao lado direito.
Abra o designer do FastReport e clique no bot o "Novo Relatrio" na barra de ferramentas.
exibido um modelo de relatrio que j contm trs bandas: "TtuloDoRelatrio", "DadosMestre" e
"RodapDaPgina". Vamos remover a banda "DadosMestre" brevemente (clique em qualquer
espao livre dentro da banda ou em seu cabealho e remova-a com a tecla "Delete" ou o item
"Remover" no menu de contexto). Agora vamos adicionar uma nova banda ("Cabealho da
Pgina"). Clique no bot o "Inserir Banda" na barra de ferramentas de objetos e selecione
"Cabealho da Pgina" na lista suspensa. Vemos que uma banda nova adicionada pgina.
Ao mesmo tempo, as bandas existentes s o movidas para baixo. O designer do FastReport
posiciona as bandas na pgina automaticamente bandas de cabealho no topo, bandas de
dados no meio e bandas de rodap embaixo.
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
Manual v5.0.0
Criar relatrios
23
Ao executar o relatrio, voc ver que os objetos no relatrio pronto s o impressos nas
posies corretas na pgina.
Manual v5.0.0
24
2.7
Bandas de dados
Agora iremos aprender como imprimir dados de tabelas de BD ou de consultas. O que
considerado uma 'tabela' ou uma 'consulta'? Elas s o compostas de dados organizados em
linhas (registros ou fileiras) que contm uma ou mais colunas (campos). Para imprimir estes
tipos de dados, o FastReport utiliza um tipo de banda especial, as diversas bandas que s o
chamadas "Dados...". Para imprimir uma tabela inteira ou apenas algumas fileiras e campos,
necessrio adicionar uma ou mais dessas bandas ao relatrio, vincul-las tabela e colocar
objetos de campo dentro delas. Quando FastReport criar o relatrio, as bandas ser o
impressas na pgina de sada, uma vez para cada registro na tabela. Se n o sobrar espao
livre na pgina de sida para uma banda, o mecanismo de relatrios criar uma nova pgina de
sada antes de continuar.
2.8
O componente TfrxDBDataSet
O componente conector "TfrxDBDataSet"
da paleta de componentes Delphi do FastReport
usado para conectar uma tabela (ou qualquer outra fonte de dados) ao FastReport. Este
componente atua como o mensageiro entre a fonte de dados e o ncleo do FastReport. O
componente responsvel pela navega o de registros e pela referncia da tabela. Isso torna o
ncleo do FastReport independente de bibliotecas de acesso a dados. O FastReport pode
utilizar as bibliotecas "BDE", "IB_Objects" (que possuem uma implementa o n o padr o que
incompatvel com TDataSet) e outras, assim como dados de fontes n o conectadas a um
banco de dados, como matrizes e arquivos. O componente "TfrxDBDataSet" foi projetado para
ser usado com fontes de dados que sejam compatveis com TDataSet (como BDE, ADO, IBX e
a maioria das outras bibliotecas). O componente "TfrxDBDataSet" destinado ao trabalho com
IB_Objects. O componente "TfrxUserDataSet"
(matrizes, arquivos, etc.).
Manual v5.0.0
Criar relatrios
2.9
25
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
Manual v5.0.0
26
maneiras:
- clique duas vezes na banda
- selecione "Editar..." no menu de contexto da banda
- ou clique na propriedade "DataSet" da banda no inspetor de objetos
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.
Manual v5.0.0
Criar relatrios
27
Manual v5.0.0
28
2.10
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
Manual v5.0.0
Criar relatrios
29
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.
Manual v5.0.0
30
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.
Manual v5.0.0
Criar relatrios
31
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.
Vamos revisar o que aprendemos at agora:
- O design de um relatrio composto de pginas de design
- As pginas podem conter objetos FR, que podem ser colocados na pgina ou dentro de uma
banda
- Bandas s o espaos reservados na pgina de design e controlam onde os objetos que els
contm s o exibidos na pgina de sada, de acordo com o tipo de banda
- Objetos "Texto" contm o texto que desejamos exibir em uma certa posi o. Eles podem ter
vrias linhas e podem conter texto esttico, campos de dados, variveis, expresses ou uma
combina o destes
- Bandas de tipos de dados (Mestre, Detalhe, Sub-detalhe, etc.), quando conectadas a um
TfrxDbDataset, controlam o nmero de vezes que estas bandas s o exibidas (fileiras) e, em
conjunto com o mecanismo de relatrios, determinam o nmero de pginas concludas
Manual v5.0.0
32
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.
2.13
Objeto "Figura"
O prximo objeto a ser abordado o objeto "Figura". Ele tambm usado nos relatrios com
frequncia. Ao usar este objeto possvel inserir logos, fotos (de um funcionrio, por exemplo)
ou qualquer outras informaes pictricas. O objeto pode exibir grficos nos formatos "BMP",
"ICO", "WMF" ou "EMF".
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.
Manual v5.0.0
Criar relatrios
33
2.14
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'
Manual v5.0.0
34
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:
2.15
Manual v5.0.0
Criar relatrios
35
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:
smDontEsticar n o estender o objeto (padr o)
smActualHeight estender o objeto para criar espao para todo o texto
smMaxHeight estender o objeto para que sua parte inferior alcance a parte inferior da banda
no qual estiver colocado. Abordaremos este modo mais adiante
Aqui estamos interessados na propriedade "Esticar" do objeto "Texto". Habilite-a usando o
Manual v5.0.0
36
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.
2.16
Divis o de dados
Vamos dar uma olhada em um aspecto peculiar deste relatrio: h muito espao em branco na
parte inferior das pginas. Por que? Quando um relatrio criado, o mecanismo do FastReport
preenche o espao em branco da pgina com as bandas. Aps exibir cada banda, a posi o
atual movida para baixo. Quando FastReport percebe que n h espao livre suficiente para
exibir a prxima banda (sua altura maior que o espao livre da pgina), ele cria uma nova
pgina e continua com a exibi o da banda neste ponto. Esta sequncia repetida para cada
registro no conjunto de dados.
Manual v5.0.0
Criar relatrios
37
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:
- exibe os objetos n o divisveis que cabem no espao vazio
- exibe os objetos divisveis parcialmente (objetos "Texto" s o exibidos de uma forma que
todas as linhas cabem no objeto)
- cria uma nova pgina e continua com a exibi o do objeto na banda
- se um objeto n o divisvel n o possuir espao no espao vazio, ele deslocado para a
prxima pgina; ao mesmo tempo todos os objetos localizados abaixo dele s o deslocados
conforme necessrio
- o processo continua at que todos os objetos da banda seja exibidos por completo.
O algoritmo de divis o se tornar mais claro ao olhar para este exemplo:
Manual v5.0.0
38
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.
2.17
Manual v5.0.0
Criar relatrios
39
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".
Manual v5.0.0
40
2.18
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:
Manual v5.0.0
Criar relatrios
41
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::
Manual v5.0.0
42
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:
2.19
Imprimir rtulos
Ao contrrio de relatrios do tipo tabela, outros relatrios (como relatrios de impress o de
rtulos) podem ter os dados arranjados de maneira que um campo esteja abaixo do outro.
Vamos dar uma olhada em um exemplo deste tipo de relatrio que exibe dados sobre peixes,
como no exemplo anterior. Os dados do relatrio s o apresentados como rtulos e possuem a
seguinte estrutura:
Manual v5.0.0
Criar relatrios
43
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.
Nosso relatrio de duas colunas deve ter esta aparncia:
Manual v5.0.0
44
Este design exibe os dados na ordem 'esquerda para a direita e depois de cima para baixo'.
2.20
Bandas filho
Pode haver um problema quando um campo em um relatrio tipo rtulo possui contedo de
comprimento varivel. Para simular isso em nosso exemplo, vamos reduzir a largura do objeto
Bio."Common Name" para 2,5 cm e habilitar a propriedade "Esticar" neste objeto e tambm na
banda "Dados de 1o. Nvel". Habilite todas as linhas da borda para todos os objetos para que os
efeitos da fun o de extens o sejam claramente visveis. O design agora gera um relatrio
como este:
Manual v5.0.0
Criar relatrios
45
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:
Manual v5.0.0
46
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.
2.21
Deslocar objetos
Voc j viu como 'smAlways' funciona na propriedade "ShiftMode". Vamos dar uma olhada no
prximo modo de deslocamento, 'smWhenOverlapped'. Neste modo, o deslocamento de
objetos ocorre quando o objeto acima estendido e sobreposto ao objeto abaixo. Aqui h dois
cenrios:
1: os trs objetos no topo tm "Esticar" habilitado, e os trs objetos inferiores tm "ShiftMode"
configurado como 'smAlways'. Os objetos inferiores s o deslocados apenas o suficiente
para dar espao ao objeto estendido acima deles:
Manual v5.0.0
Criar relatrios
47
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:
2.22
Company
Kauai Dive Shoppe
Unisco
Sight Diver
Manual v5.0.0
48
Orders:
OrderNo
1003
1023
1052
1055
1060
1123
.
CustNo
1351
1221
1351
1351
1231
1221
SaleDate
12.04.1988
01.07.1988
06.01.1989
04.02.1989
28.02.1989
24.08.1993
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:
1221
1023
1123
1231
1060
Unisco
28.02.1989
1351
1003
1052
1055
Sight Diver
12.04.1988
06.01.1989
04.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'
Manual v5.0.0
Criar relatrios
49
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
Manual v5.0.0
50
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.
Ao criar a visualiza o, FastReport faz o seguinte. Aps a sada de um registro da tabela
mestre (Customer), ele configura o filtro na tabela detalhe (Orders). Somente os registros que
cumprem a condi o 'Orders.CustNo = Customer.CustNo' permanecem na tabela. Isso
significa que para cada cliente somente s o exibidos na banda detalhe os pedidos que
correspondem ao cliente autal. importante enteder este conceito. Apesar das bandas de
dados serem do tipo mestre ou detalhe, elas somente controlam o posicionamento dos dados
na pgina de sada (ordem e nmero de exibies). Os dados exibidos pelos objetos nas
bandas depende dos campos aos quais os objetos est o vinculados e da vincula o externa
das duas tabelas.
Esta a sada final:
2.23
Manual v5.0.0
Criar relatrios
51
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.
Ao usar a propriedade FooterAfterEach da banda de dados, possvel alterar este
comportamento. Configurar esta propriedade como True (tambm possvel usar o menu de
contexto da banda de dados "Rodap Aps Cada Linha") resulta na exibi o do rodap aps
cada linha de dados. Isso pode ser til no design de relatrios mestre-detalhe. Se
FooterAfterEach da banda de dados mestre for configurado como True, o relatrio ser exibido
assim:
Manual v5.0.0
52
2.24
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:
Manual v5.0.0
Criar relatrios
53
2.25
Manual v5.0.0
54
Manual v5.0.0
Chapter
III
Grupos e
agregados
56
3.1
Company
Kauai Dive Shoppe
Kauai Dive Shoppe
Unisco
Sight Diver
Sight Diver
Sight Diver
OrderNo
1023
1123
1060
1003
1052
1055
SaleDate
01.07.1988
24.08.1993
28.02.1989
12.04.1988
06.01.1989
04.02.1989
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.
Crie um relatrio novo no designer do FastReport. Coloque um componente "Consulta ADO" na
pgina e configure suas propriedades:
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":
Manual v5.0.0
Grupos e agregados
57
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):
Manual v5.0.0
58
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:
select * from customer, orders
where orders.CustNo = customer.CustNo
order by customer.CustNo, orders.OrderNo
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:
- todo o relatrio precisa de somente um conjunto de dados (consulta)
- o nmero de nveis de agrupamento de dados ilimitado
- possvel ordenar os dados
- uso mais otimizado dos recursos de BD (a consulta retorna apenas um conjunto de dados
para sada e a filtragem executada pela consulta).
A nica desvantagem a necessidade de escrever consultas na linguagem SQL. No entanto, o
conhecimento bsico de SQL praticamente obrigatrio para qualquer programador que
trabalhe com bancos de dados.
3.2
Ao olhar para o relatrio, n o claro a qual cliente se refere a lista de pedidos no topo da
Manual v5.0.0
Grupos e agregados
59
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:
Manual v5.0.0
60
Pode haver muito espao vazio em algumas pginas, mas, sempre que possvel, o grupo
exibido de forma completa em uma pgina.
A propriedade "StartNewPage" do cabealho de grupo permite a exibi o de grupos em pginas
separadas. Isso pode levar a um desperdcio de papel, mas pode ser til em algumas
situaes.
3.3
Manual v5.0.0
Grupos e agregados
3.4
61
3.5
Numera o de linhas
Vamos usar nosso exemplo para mostrar como numerar as linhas em um grupo. Para fazer
isso, adicionamos um objeto "Texto" que contm uma varivel de sistema [Line] a ambas as
bandas (a maneira mais fcil de fazer isso ao arrastar e soltar da guia "Variveis" no painel
"rvore de Dados").
Ao visualizer o relatrio, podemos ver que ambos os nveis de dados agora possuem seus
Manual v5.0.0
62
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:
3.6
Funes de agrega o
Na maioria dos casos, relatrios de grupo precisam exibir algum resumo das informaes
(como: "total de um grupo", "nmero de elementos do grupo", etc.). FastReport fornece funes
de agrega o para calcular valores de agrega o em um intervalo de dados. As funes de
agrega o s o:
SUM
MIN
MAX
Manual v5.0.0
Grupos e agregados
AVG
COUNT
63
A sintaxe de todas as funes de agrega o (exceto COUNT) similar quela da fun o SUM:
SUM(express o, banda, sinalizadores)
SUM(express o, banda)
SUM(express o)
Os parmetros s o:
express o a express o a ser calculada
banda o nome da banda de dados na qual executado o clculo
sinalizadores um campo de bits com os valores
1 : incluir bandas invisveis no clculo
2 : acumular o agregado como uma soma acumulada
(n o redefinir o agregado quando o intervalo de dados atual for redefinido)
3 : (ambas as opes anteriores)
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.
A fun o de agrega o "COUNT" possui a seguinte sintaxe:
COUNT(banda, sinalizadores)
COUNT(banda)
na qual os parmetros tm o mesmo significado explicado acima.
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:
Manual v5.0.0
64
Manual v5.0.0
Grupos e agregados
3.7
65
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:
Manual v5.0.0
66
3.8
Manual v5.0.0
Grupos e agregados
67
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.
Manual v5.0.0
Chapter
IV
Formatar,
realar
Formatar, realar
4.1
69
Formatar valores
Um recurso de funes de agrega o que os valores numricos de retorno n o s o
formatados, como mostrado no primeiro exemplo, que usa "SUM":
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.
Manual v5.0.0
70
4.2
Formata o embutida
A formata o embutida permite configurar uma formata o diferente para cada express o
contida no objeto. Ela era usada em verses anteriores do FastReport e agora obsoleta.
Utilize a caixa de dilogo de formata o para configurar uma formata o diferente para cada
express o.
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)]
O total e o nmero de pedidos ser o exibidos no objeto.
Na visualiza o do relatrio, ambos os valores s o exibidos no formato monetrio que
configuramos anteriormente. Isso errado:
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:
Sum: [SUM(<Group."ItemsTotal">,MasterData1) #n%2,2m]
Number: [COUNT(MasterData1)]
Visualize o relatrio para certifica-se de que o objeto exibido corretamente:
Manual v5.0.0
Formatar, realar
71
[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:
#nformat_string formato numrico
#dformat_string formato data/hora
#bFalse,True formato booleano
Em todos os casos, Format_string o argumento da fun o usado para a formata o. Desta
maneira, a fun o Format usada na formata o numrica, e a fun o FormatDateTime
usada para data/hora. Abaixo s o mostrados diversos valores usados no FastReport:
para formata o numrica:
%g nmero com dgitos mnimos aps o ponto decimal
%2.2f nmero com um nmero fixo de dgitos aps o ponto decimal
%2.2n como o anterior, mas com separador de milhares
%2.2m formato monetrio, aceito pelo SO Windows, depende das configuraes regionais
no painel de controle
para formata o de data/hora:
dd.mm.yyyy data como '23.12.2003'
dd mmm yyyy data como '23 Nov 2003'
dd mmmm yyyy data como '23 Novembro 2003'
hh:mm hora como '23:12'
hh:mm:ss hora como '23:12:00'
dd mmmm yyyy, hh:mm data e hora como '23 Novembro 2003, 23:12'
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".
4.3
Realce condicional
H a possibilidade de alterar a aparncia do objeto "Texto" dependendo das condies
existentes. Por exemplo, um objeto pode ser realado com a cor vermelha se ele possuir um
valor negativo. Este recurso chamado de "realce condicional". Para configur-lo, selecione o
objeto "Texto" e clique no bot o
dilogo exibida:
Manual v5.0.0
72
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"]
Queremos deixar o objeto vermelho se a quantidade de produtos = 0. Para isso criaremos a
seguinte condi o:
Value = 0
Aten o: se voc selecionou C++Script como a linguagem de script (veja maiores
detalhes no captulo "Script"), voc deve escrever a condi o usando C++Script:
Value == 0
Manual v5.0.0
Formatar, realar
73
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
Se diversas condies tiverem sido indicadas, FastReport verifica todas as condies,
comeando pela primeira. Se uma condi o for cumprida, o FastReport aplica suas
configuraes de estilo ao objeto, e o processo concludo. importante colocar as condies
na ordem correta. A ordem que vimos neste exemplo est correta:
1. Value = 0
2. Value < 10
Se trocarmos as condies, o realce n o funcionar corretamente.
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
Manual v5.0.0
74
4.4
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
Observa o: se voc selecionou C++Script como a linguagem de script (veja maiores
detalhes no captulo "Script"), voc deve escrever a condi o usando C++Script:
<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:
Manual v5.0.0
Formatar, realar
75
Manual v5.0.0
Chapter
V
Relatrios
aninhados
(sub-relatrios)
5.1
77
5.2
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:
Manual v5.0.0
78
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.
5.3
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.
Manual v5.0.0
5.4
79
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.
Normalmente um sub-relatrio exibido como um conjunto de bandas na pgina de relatrio
bsica. Quando isso acontece, a altura da banda pai que contm o objeto "Sub-relatrio" n o
controlada pelas bandas no sub-relatrio, ou seja, ela n o pode ser estendida. Se a propriedade
"PrintOnParent" do sub-relatrio for configurada como True no inspetor de objetos ou no menu
de contexto, os objetos no sub-relatrio s o impressos fsicamente na banda que contm o
objeto "Sub-relatrio". Esta banda pode ser estendida e pode ter objetos estendidos colocados
nela:
Manual v5.0.0
Chapter
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.
Um script escrito em uma das linguagens suportadas pelo mecanismo de scripts
(FastScript). Estas s o as linguagens que s o suportadas atualmente:
- PascalScript
- C++Script
- BasicScript
- JScript
Os recursos a seguir s o suportados pelo mecanismo FastScript:
- conjunto padr o da linguagem: variveis, constantes, procedimentos, funes (que podem
ser aninhadas e podem possuir variveis, constantes, parmetros padr o), todos os
operadores padr o (incluindo case, try, finally, except, with), tipos (integral, fracional, lgico,
caractere, linha, arrays multidimensionais, variante), classes (com mtodos, eventos,
propriedades, ndices e propriedades padr o)
- verifica o de compatibilidade de tipos
- acesso a todos os objetos do relatrio
No entanto, o FastScript n o suporta o seguinte:
- declaraes deste tipo: registros, classes
- ponteiros, conjuntos (porm possvel usar o operador 'IN' em expresses como "a in
['a'..'c','d']")
- tipo shortstring
- saltos incondicionais (GOTO)
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".
6.1
Um gostinho de script
As ferramentas para trabalhar com os scripts est o localizadas na guia "Cdigo" do designer
do FastReport. Ao abrir esta guia, o IDE tem este aspecto:
Manual v5.0.0
82
guia "Cdigo"
painel do editor de scripts
lista suspensa para selecionar a linguagem na qual escrito o script
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)
Manual v5.0.0
Script
83
Significado
teclas de dire o
movem o cursor
PageUp, PageDown
Ctrl+PageUp
Ctrl+PageDown
Home
End
Enter
Delete
Backspace
Ctrl+Y
Ctrl+Z
Shift+teclas de dire o
Ctrl+A
Ctrl+U
Ctrl+I
Ctrl+C, Ctrl+Insert
Ctrl+V, Shift+Insert
Ctrl+X, Shift+Delete
Ctrl+Shift+<nmero>
Ctrl+<nmero>
Ctrl+F
Ctrl+R
F3
F4
Ctrl+F2
redefinir o script
Ctrl+F7
F9
Manual v5.0.0
84
6.2
F7 or F8
Ctrl + Espao
Ctrl+Shift+Delete
Ctrl+Shift+Backspace
Estrutura de um script
A estrutura de um script depende da linguagem utilizada. No entanto, h alguns elementos que
as linguagens tm em comum: o ttulo e o corpo do script, e o procedimento principal que
executado quando o relatrio executado. Abaixo h exemplos de scripts nas quatro
linguagens suportadas:
Estrutura de PascalScript:
#language PascalScript // opcional
program MyProgram;
// opcional
// o captulo "uses" deve estar localizado antes de qualquer outro captulo
uses 'unit1.pas', 'unit2.pas';
var
qualquer lugar
i, j: Integer;
const
pi = 3.14159;
// captulo "constants"
procedure p1;
var
i: Integer;
// procedimentos e funes
procedure p2;
begin
end;
// procedimento aninhado
begin
end;
begin
end.
// procedimento principal.
Estrutura de C++Script:
#language ++Script
// opcional
Manual v5.0.0
Script
85
int i, j = 0;
qualquer lugar
#DEFINE pi = 3.14159
// captulo "constants"
void p1()
{
}
// funes
// sem procedimentos aninhados
{
}
// procedimento principal.
Estrutura de JScript:
#language JScript
// opcional
function p1()
{
}
// funes
//
// procedimento principal.
p1();
for (i = 0; i < 10; i++) j++;
Estrutura de BasicScript:
#language BasicScript
' opcional
' o captulo "imports" deve ser colocado antes de qualquer outro captulo
imports "unit1.vb", "unit2.vb"
Dim i, j = 0
qualquer lugar
Function p1()
{
}
' funes
'
' procedimento principal.
For i = 0 To 10
p1()
Next
Mais adiante iremos dar uma olhada em scripts escritos na linguagem "PascalScript". Quando
um relatrio novo criado, esta linguagem selecionada por padr o.
Manual v5.0.0
86
6.3
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.
6.4
Manual v5.0.0
Script
87
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
}
6.5
C++ Script:
if (<minha varivel> == 10) { ... }
Manual v5.0.0
88
C++ Script:
if (Get("minha varivel") == 10) { ... }
C++ Script:
Set("minha varivel", 10);
Vale a pena observar que para atribuir um valor de string varivel, voc deve colocar o valor
entre aspas:
PascalScript:
Set('minha varivel', '''' + 'String' + '''');
C++ Script:
Set("minha varivel", "\"String\"");
Variveis de sistema, como "Page#", devem ser referenciadas exatamente da mesma maneira:
PascalScript:
if <Page#> = 1 then ...
C++ Script:
if (<Page#> == 1) { ... }
6.6
Referenciando os campos de BD
Assim como nas variveis, necessrio usar chevrons ao referenciar campos de BD em um
relatrio:
PascalScript:
if <Table1."Field1"> = Null then...
C++ Script:
if (<Table1."Field1"> == Null) { ... }
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
Manual v5.0.0
Script
89
chevrons).
6.7
6.8
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
Manual v5.0.0
90
Manual v5.0.0
Script
91
(ordem de chamada) de cada um de seus eventos. Isso tambm vlido para cada um dos
objetos contidos nas bandas.
6.10
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:
Manual v5.0.0
92
Tudo que precisamos fazer agora digitar o seguinte cgido no corpo do manipulador:
PascalScript:
if Copy(<Customers."Company">, 1, 1) = 'A' then
MasterData1.Visible := True
else
MasterData1.Visible := False;
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:
Manual v5.0.0
Script
93
6.11
Para exibir o total, usamos o objeto com a seta no design (em nosso exemplo ele chamado
de "Memo8").
Manual v5.0.0
94
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.
Ent o nosso script ter o seguinte aspecto:
PascalScript:
var
List: TStringList;
i: Integer;
procedure frReport1OnStartReport(Sender: TfrxComponent);
begin
List := TStringList.Create;
end;
procedure frReport1OnStopReport(Sender: TfrxComponent);
begin
List.Free;
end;
procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
i := 0;
end;
procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then
Memo8.Text := 'Sum: ' + List[i];
end;
procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
begin
if not Engine.FinalPass then
List.Add(FloatToStr(SUM(<Group."ItemsTotal">,MasterData1)));
Inc(i);
end;
begin
end.
C++ Script:
TStringList List;
int i;
void frReport1OnStartReport(TfrxComponent Sender)
Manual v5.0.0
Script
95
{
List = TStringList.Create();
}
void frReport1OnStopReport(TfrxComponent Sender)
{
List.Free();
}
void Page1OnBeforePrint(TfrxComponent Sender)
{
i = 0;
}
void GroupHeader1OnBeforePrint(TfrxComponent Sender)
{
if (Engine.FinalPass)
Memo8.Text = "Sum: " + List[i];
}
void GroupFooter1OnBeforePrint(TfrxComponent Sender)
{
List.Add(FloatToStr(SUM(<Group."ItemsTotal">,MasterData1)));
i++;
}
{
}
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
Manual v5.0.0
96
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:
procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then
Memo8.Text := 'Sum: ' + Get(<Group."CustNo">);
end;
procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
begin
Set(<Group."CustNo">,
FloatToStr(SUM(<Group."ItemsTotal">,MasterData1)));
end;
begin
end.
C++ Script:
void GroupHeader1OnBeforePrint(TfrxComponent Sender)
{
if (Engine.FinalPass)
Memo8.Text = "Sum:" + Get(<Group."CustNo">);
}
void GroupFooter1OnBeforePrint(TfrxComponent Sender)
{
Set(<Group."CustNo">,
Manual v5.0.0
Script
97
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".
6.12
Evento "OnAfterData"
Este evento disparado depois que um objeto do relatrio tenha sido preenchido com os dados
da fonte qual est conectado. Use este evento para acessar o valor de um campo de BD ou
uma express o contida no objeto. Este valor colocado na varivel de sistema "Value", que
disponibilizada somente neste evento. Ent o, se dois objetos "Textos" possuirem as
expresses [Table1."Field1"] e [<Table2."Field1"> + 10], os valores destas expresses podem
ser utilizados ao se referir varivel "Value" dos objetos:
PascalScript:
if Value > 3000 then
Memo1.Color := clRed
C++ Script:
if (Value > 3000)
Memo1.Color = clRed;
C++ Script:
if (<Table1."Field1"> > 3000)
Memo1.Color = clRed;
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]
Manual v5.0.0
98
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.
6.13
Objetos de servio
H outros objetos de sistema que podem ser utilizados em script, junto aos objetos de relatrio
normais como pginas, bandas, "Texto" e outros. Eles podem ser teis no gerenciamento da
constru o do relatrio. O objeto "Engine", usado no captulo anterior, um objeto deste tipo, e
todos s o listados aqui:
- Report : o objeto "Relatrio"
- Engine : o link ao "Mecanismo" do relatrio
- Outline : o link ao elemento "rvore do Rlatrio" em um relatrio visualizado
Vamos dar uma olhada em cada um destes objetos.
function GetDataSet
Descri o
retorna o valor de "Expr", que uma express o
por exemplo, Report.Calc('1+2') retorna "3"
qualquer express o vlida do FastReport pode ser
passada no parmetro
retorna o conjunto de dados que possuir o nome
Manual v5.0.0
Script
99
especificado
o conjunto de dados deve ser exibido na lista de
conjuntos de dados do relatrio
(caixa de dilogo "Relatrio > Dados...")
Tipo
Descri o
CurColumn
Integer
CurX
Extended
CurY
Extended
DoublePass
Boolean
FinalPass
Boolean
PageHeight
Extended
PageWidth
Extended
StartDate
Descri o
adiciona "Text" lista de ncoras
veja mais abaixo
cria uma nova coluna em um relatrio com vrias colunas
aps a ltima coluna, uma quebra de pgina inserida
automaticamente
Manual v5.0.0
100
procedure NewPage
procedure ShowBand
(Band: TfrxBand)
"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".
Estes s o os mtodos de "Outline":
Mtodo
procedure AddItem
(const Text: String)
Descri o
procedure LevelRoot
procedure LevelUp
Manual v5.0.0
Script
6.14
101
Manual v5.0.0
102
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:
C++ Script:
void MasterData1OnBeforePrint(TfrxComponent Sender)
{
Engine.CurX = Engine.CurX + 5;
}
Manual v5.0.0
Script
103
C++ Script:
void MasterData1OnBeforePrint(TfrxComponent Sender)
{
Engine.CurY = Engine.CurY - 15;
}
C++ Script:
void MasterData1OnAfterPrint(TfrxComponent Sender)
{
if (<Line> == 2)
Engine.NewPage();
}
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.
O mtodo "Engine.NewColumn" insere uma quebra de coluna em relatrios com diversas
colunas. Se n o houver mais colunas livres na pgina, uma nova pgina criada.
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
Manual v5.0.0
104
#[AnchorName]
No segundo caso o FastReport substitui um valor pela express o.
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.
A primeira pgina de design:
Coloque o seguinte texto na propriedade URL do objeto "Texto" contido na banda de dados
#[Customers."Company"]
e configure as propriedades da fonte como azul e sublinhado para simular o aspecto de um
hiperlink.
A segunda pgina de design:
Manual v5.0.0
Script
105
C++ Script:
void MasterData2OnBeforePrint(TfrxComponent Sender)
{
Engine.AddAnchor(<Customers."Company">);
}
Isso tudo que necessrio. Visualize o relatrio e certifique-se de que todos os "hiperlinks"
estejam funcionando.
O ltimo item a ser mencionado a fun o "Engine.GetAnchorPage". Esta fun o retorna o
nmero da pgina qual foi adicionada a ncora correspondente, e util ao criar a tabela
"Contedo". O relatrio deve ter dois passos ou a fun o n o pode ser utilizada.
6.16
Manual v5.0.0
106
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":
Manual v5.0.0
Script
107
PascalScript:
procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
begin
Outline.LevelRoot;
Outline.AddItem(<Group."Company">);
end;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
Outline.AddItem(<Group."OrderNo">);
Outline.LevelUp;
end;
begin
end.
C++ Script:
void GroupHeader1OnBeforePrint(TfrxComponent Sender)
{
Outline.LevelRoot;
Outline.AddItem(<Group."Company">);
}
void MasterData1OnBeforePrint(TfrxComponent Sender)
{
Outline.AddItem(<Group."OrderNo">);
Outline.LevelUp;
}
{
}
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.
O mtodo "Outline.AddItem" adiciona um n filho ao n da rvore atual e depois torna o n filho
o n atual. Ent o, se "AddItem" fosse chamada diversas vezes em sequncia, ela iria criar a
"escada" mostrada aqui:
Item1
Item2
Item3
...
Os mtodos de Outline "LevelUp" e "LevelRoot" s o usados para controlar qual elemento o
atual. O primeiro mtodo move o cursor para o elemento localizado um nvel acima. Ent o este
Manual v5.0.0
108
script:
Outline.AddItem('Item1');
Outline.AddItem('Item2');
Outline.AddItem('Item3');
Outline.LevelUp;
Outline.AddItem('Item4');
6.17
Manual v5.0.0
Script
109
O manipulador exibir estas bandas em ordem alternada (seis vezes para cada). Aps exibir
seis bandas, uma pequena lacuna ser inserida.
PascalScript:
procedure Page1OnManualBuild(Sender: TfrxComponent);
var
i: Integer;
begin
for i := 1 to 6 do
begin
{ exibir duas bandas }
Engine.ShowBand(MasterData1);
Engine.ShowBand(MasterData2);
{ criar uma lacuna }
if i = 3 then
Engine.CurY := Engine.CurY + 10;
end;
end;
C++ Script:
void Page1OnManualBuild(TfrxComponent Sender)
{
Manual v5.0.0
110
O exemplo a seguir exibe as mesmas bandas, com uma segunda cpia deslocada para a
direita.
PascalScript:
procedure Page1OnManualBuild(Sender: TfrxComponent);
var
i, j: Integer;
SaveY: Extended;
begin
SaveY := Engine.CurY;
for j := 1 to 2 do
begin
for i := 1 to 6 do
begin
Engine.ShowBand(MasterData1);
Engine.ShowBand(MasterData2);
if i = 3 then
Manual v5.0.0
Script
111
C++Script:
void Page1OnManualBuild(TfrxComponent Sender)
{
int i, j;
Extended SaveY;
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
Manual v5.0.0
112
resto das bandas (em nosso caso, o "Ttulo do Relatrio") foi exibido automaticamente.
Finalmente mostraremos como construir um relatrio com uma "Lista de clientes" (j
demonstramos diversas verses anteriormente) utilizando o evento "OnManualBuild". Desta
vez conecte a banda de dados fonte de dados.
C++Script:
void Page1OnManualBuild(TfrxComponent Sender)
{
TfrxDataSet DataSet;
DataSet = MasterData1.DataSet;
DataSet.First();
while (!DataSet.Eof)
{
Engine.ShowBand(MasterData1);
DataSet.Next();
Manual v5.0.0
Script
113
}
}
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');
6.18
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:
Manual v5.0.0
114
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.
Manual v5.0.0
Chapter
VII
Relatrios tipo
tabela de
referncia
cruzada
116
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.
Vamos dar uma olhada nos elementos da tabela:
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
a
a
a
b
b
b
b
1
2
3
4
1
2
3
4
a1
a2
a3
a4
b1
b2
b3
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.
Ttulos podem estar presentes em mais de um nvel, conforme ilustrado aqui:
Neste exemplo, o nmero (ou ndice) da coluna composto, ou seja, ele composto de dois
valores. Este relatrio gerado dos seguintes dados:
a
a
a
a
10
10
20
20
1
2
1
2
a10.1
a10.2
a20.1
a20.2
Manual v5.0.0
b
b
b
b
10
10
20
20
1
2
1
2
117
b10.1
b10.2
b20.1
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.
7.1
Salary
3300
2000
.
Crie um relatrio novo. Coloque um componente "Tabela ADO" na pgina e configure suas
propriedades:
Manual v5.0.0
118
Manual v5.0.0
4
5
6
7
119
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:
7.2
Modificar a aparncia
Vamos modificar a aparncia do objeto tabela de referncia cruzada. A primeira coisa que
queremos fazer mudar a cor dos ttulos e exibir "Total" em vez de "Grand Total". Isso muito
fcil: para alterar a cor do ttulo, clique nas clulas "Year", "Name" e "Grand Total" e selecione
cinza usando o bot o de plano de fundo na barra de ferramentas.
Manual v5.0.0
120
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...":
Manual v5.0.0
121
Selecione o formato necessrio e feche o editor de formato. Tudo isso produz o seguinte
relatrio:
7.3
Utiliza o de funes
Em nosso exemplo podemos ver a soma do salrio de cada funcionrio em um intervalo de
quatro anos na linha "Total". possvel usar qualquer uma das seguintes funes de
agrega o:
SUM soma de valores
MIN valor mnimo
MAX valor mximo
AVG valor mdio
COUNT nmero de valores
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.
Manual v5.0.0
122
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:
7.4
Classifica o de valores
Por padr o, linhas e colunas s o arranjadas em ordem ascendente, de maneira numrica ou
alfabtica dependendo do tipo de dados. possvel configurar modos de classifica o
independentes para linhas e colunas. Estes s o os modos de classifica o: "arranjar em
ordem crescente", "arranjar em ordem decrescente" e "n o classificar". Sem classifica o, as
linhas/colunas s o exibidas na ordem padr o do banco de dados.
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:
Manual v5.0.0
7.5
123
Month
2
1
Days Salary
3
1000
5
2000
Manual v5.0.0
124
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:
Total for [Value]
Na cria o do relatrio, a express o "[Value]" substituda pelo valor real do cabealho da
coluna na clula acima:
Manual v5.0.0
7.6
125
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:
Manual v5.0.0
126
Manual v5.0.0
127
7.7
Manual v5.0.0
128
Manual v5.0.0
129
7.8
Descri o
OnAfterPrint
OnBeforePrint
OnCalcHeight
OnCalcWidth
OnPrintCell
OnPrintColumnHeader
OnPrintRowHeader
Manual v5.0.0
130
Mtodo
Descri o
function IsGrandTotalColumn
(Index: Integer): Boolean
function IsGrandTotalRow
(Index: Integer): Boolean
function IsTotalColumn
(Index: Integer): Boolean
function IsTotalRow
(Index: Integer): Boolean
procedure AddValue
(const Rows, Columns, Cells
: array of Variant)
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:
procedure Cross1OnPrintCell(Memo: TfrxMemoView;
RowIndex, ColumnIndex, CellIndex: Integer;
RowValues, ColumnValues, Value: Variant);
begin
if ColumnIndex = 2 then
Memo.Color := clRed;
end;
C++ Script:
void Cross1OnPrintCell(
TfrxMemoView Memo,
int RowIndex,
int ColumnIndex,
int CellIndex,
Variant RowValues,
Variant ColumnValues,
Variant Value)
{
if (ColumnIndex == 2) { Memo.Color = clRed; }
}
Manual v5.0.0
131
C++ Script:
void Cross1OnPrintColumnHeader(
TfrxMemoView Memo,
Variant HeaderIndexes,
Variant HeaderValues,
Variant Value)
{
if ((VarToStr(HeaderValues[0]) == "1999") &&
(VarToStr(HeaderValues[1]) == "11"))
{
Memo.Color = clRed;
}
}
Manual v5.0.0
132
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;
}
}
Manual v5.0.0
133
Em nosso exemplo foi mais fcil usar o parmetro "HeaderValues", mas seria possvel usar o
seguinte manipulador em seu lugar:
Pascal script:
procedure Cross1OnPrintColumnHeader(Memo: TfrxMemoView;
HeaderIndexes, HeaderValues, Value: Variant);
begin
if (HeaderIndexes[0] = 0) and (HeaderIndexes[1] = 2) then
Memo.Color := clRed;
end;
C++ Script:
void Cross1OnPrintColumnHeader(
TfrxMemoView Memo,
Variant HeaderIndexes,
Variant HeaderValues,
Variant Value)
{
if ((HeaderIndexes[0] == 0) && (HeaderIndexes[1] == 2)) { Memo.Color =
clRed; }
}
Manual v5.0.0
134
7.9
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.
Manual v5.0.0
7.10
135
Manual v5.0.0
136
C++ Script:
void Cross1OnBeforePrint(TfrxComponent Sender)
{
Cross1.AddValue(["Ann"], [2001, 2], [1500]);
Cross1.AddValue(["Ann"], [2001, 3], [1600]);
Cross1.AddValue(["Ann"], [2002, 1], [1700]);
Cross1.AddValue(["Ben"], [2002, 1], [2000]);
Cross1.AddValue(["Den"], [2001, 1], [4000]);
Cross1.AddValue(["Den"], [2001, 2], [4100]);
}
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.
Manual v5.0.0
7.11
137
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:
Manual v5.0.0
138
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):
procedure DBCross1Cell0OnBeforePrint(Sender: TfrxComponent);
begin
// 'Value' o valor atual da clula atual
if Value < 100 then
begin
// primeiro objeto forma
DBCross1Object1.Color := clMaroon; // vermelho-escuro
// segundo objeto forma
DBCross1Object2.Color := clWhite;
// terceiro objeto forma
DBCross1Object3.Color := clWhite;
Manual v5.0.0
$00CCFF;
$00CCFF;
clWhite;
// amarelo
$00CC98;
$00CC98;
$00CC98;
// verde
139
Isso tudo. Visualize o relatrio, que ser parecido quele que foi mostrado no incio desta
se o.
7.12
Manual v5.0.0
140
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):
1) "Imprimir para baixo depois para os lados" est desabilitado:
Manual v5.0.0
141
Manual v5.0.0
Chapter
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.
Name
Argentina
Bolivia
.
Area
2 777 815
1 098 575
Population
32 300 003
7 300 000
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.
Manual v5.0.0
144
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:
Manual v5.0.0
Grficos
145
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
Manual v5.0.0
146
8.1
Manual v5.0.0
Grficos
8.2
147
8.3
Manual v5.0.0
148
O grfico resultante :
8.4
C++Script:
{
Chart1.SeriesData[0].XSource = "Jan;Feb;Mar;Apr";
Chart1.SeriesData[0].YSource = "31;28;31;30";
Manual v5.0.0
Grficos
149
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.
8.5
Manual v5.0.0
Chapter
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:
ao clicar no objeto do relatrio, um tipo de opera o executada. Por exemplo, possvel
executar um relatrio detalhado e exib-lo em uma janela separada;
a janela de visualiza o pode exibir a estrutura de tpicos do relatrio, que pode ser usada
para navegar o relatrio.
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.
9.2
Configura o de um hiperlink
Para configurar um hiperlink, selecione o objeto que deseja tornar interativo e clique nele com o
bot o direito do mouse. No menu de contexto, selecione o item "Hiperlink...". O editor de
hiperlinks ser aberto:
Manual v5.0.0
152
9.3
Manual v5.0.0
Relatrios interativos
9.4
153
9.5
9.6
Manual v5.0.0
154
for executado.
9.7
9.8
Link personalizado
Ao usar este tipo de link, possvel definir uma rea o personalizada ao clicar com o mouse.
Para isso, utilize o manipulador de evento "OnClick" do objeto.
Manual v5.0.0
Chapter
X
Relatrios
matriciais
156
Ao clicar em OK, exibida uma pgina de design vazia, marcada para uma fonte matricial:
Manual v5.0.0
Relatrios matriciais
157
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.
Manual v5.0.0
158
Manual v5.0.0
Relatrios matriciais
10.1
159
Manual v5.0.0
160
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:
Manual v5.0.0
Relatrios matriciais
10.2
161
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):
10.3
Objeto "Comando"
Conforme foi descrito antes, possvel configurar os seguintes atributos em objetos de
relatrios matriciais:
Manual v5.0.0
162
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:
Manual v5.0.0
Chapter
XI
Formulrios de
dilogo
164
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
Elemento
Nome
Descri o
TfrxLabelControl
TfrxEditControl
TfrxMemoControl
Manual v5.0.0
Formulrios de dilogo
165
TfrxButtonControl
TfrxCheckBoxControl
TfrxRadioButtonControl
TfrxListBoxControl
TfrxComboBoxControl
TfrxDateEditControl
TfrxGroupBoxControl
TfrxPanelControl
TfrxBitBtnControl
TfrxSpeedButtonControl
TfrxMaskEditControl
11.2
TfrxBevelControl
TfrxImageControl
Manual v5.0.0
166
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".
Manual v5.0.0
Formulrios de dilogo
11.3
167
Coloque um objeto "Texto" que contenha este texto na Pgina1 do relatrio, e configure
"AutoWidth" como True:
Voc inseriu: [Edit1.Text]
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.
11.4
Clique duas vezes no objeto "Caixa de Sele o" para criar um manipulador de evento
"OnClick", e insira o script a seguir:
PascalScript:
procedure CheckBox1OnClick(Sender: TfrxComponent);
begin
Button1.Enabled := not CheckBox1.Checked;
Manual v5.0.0
168
C++ Script:
void CheckBox1OnClick(TfrxComponent Sender)
{
Button1.Enabled = !CheckBox1.Checked;
}
11.5
Manual v5.0.0
Formulrios de dilogo
169
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.
11.6
C++Script:
void Button1OnClick(TfrxComponent Sender)
{
DialogPage2.Visible = CheckBox1.Checked;
}
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:
Manual v5.0.0
170
C++Script:
void frxReport1OnRunDialogs(bool &Result);
{
Result = DialogPage1.ShowModal == mrOk;
if (Result)
{
if (CheckBox1.Checked)
Result = DialogPage2.ShowModal == mrOk;
}
}
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.
Manual v5.0.0
Chapter
XII
Componentes
de acesso a
dados
172
Manual v5.0.0
12.1
173
Descries de componentes
Vamos ver como os componentes s o usados para o acesso de dados atravs de ADO. Eles
s o disponibilizados no FastReport ao adicionar o componente "TfrxADOComponents"
da
paleta Delphi do FastReport ao formulrio do projeto. Os seguintes objetos ser o ent o exibidos
na barra de ferramentas de objetos ao clicar na guia "Dados" no designer de relatrios:
"TfrxADOTable", "TfrxADOQuery" e "TfrxADODataBase". Estes componentes s o similares
aos componentes Delphi correspondentes ("TADOTable", "TADOQuery" e "TADOConnection")
em rela o sua funcionalidade. H tambm um controle "TfrxDBLookupComboBox" que pode
ser usado em formulrios de dilogo.
cone
Nome
Descri o
Usado em
TfrxADOQuery
TfrxADODataBase
guia "Dados"
12.1.1 TfrxDBLookupComboBox
Este componente usado para selecionar um valor de um conjunto de dados de consulta.
Descri o
fonte de dados qual o controle est conectado
nome do campo de BD exibido no controle
nome do campo-chave do BD que identifica o registro
selecionado
valor do campo-chave do BD que retornado pela sele o
da lista
valor do campo da lista do BD exibido na lista
Manual v5.0.0
174
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
FieldAliases
Manual v5.0.0
175
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
Manual v5.0.0
176
12.1.3 TfrxADOQuery
Este componente executa consultas SQL em um BD. Ele tem as seguintes propriedades:
Propriedade
Descri o
DatabaseName
FieldAliases
Manual v5.0.0
177
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).
Manual v5.0.0
178
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
Connected
DatabaseName
LoginPrompt
Descri o
se for True, a conex o ativada
a cadeia de conex o ADO
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.
12.2
Designer de relatrios
Vamos dar uma olhada no design de um relatrio simples usando componentes de acesso a
dados durante o tempo de execu o. Ele usar o banco de dados Demo.mdb, que fornecido
com o FastReport, como a fonte de dados - {FR}\Demos\Main\demo.mdb.
Crie um novo projeto Delphi e adicione um componente de cada ao formulrio: "TfrxReport",
"TfrxDesigner", "TfrxDialogControls", "TfrxADOComponents", "TADOConnection" e "TButton".
Manual v5.0.0
179
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.
Ao clicar no bot o "Design", o desiger de relatrios do FR aberto, contendo um relatrio em
branco. Vamos dar uma olhada no design de um relatrio simples neste ambiente.
12.3
Manual v5.0.0
180
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:
Manual v5.0.0
181
12.4
Manual v5.0.0
182
ModalResult = mrOk
Button2:
Caption = 'Cancel'
ModalResult = mrCancel
Abra o editor da propriedade "Params" do componente "Query" e configure o parmetro:
Depois disso v para a Pgina1 do design do relatrio e crie o relatrio conforme foi mostrado
no exemplo anterior:
Manual v5.0.0
12.5
183
Manual v5.0.0
Chapter
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.
13.1
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":
Manual v5.0.0
186
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":
Manual v5.0.0
Herana do relatrio
187
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:
13.2
Salve o relatrio. Agora abra o relatrio derivado e veja que o endereo de e-mail foi alterado
Manual v5.0.0
188
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'.
N o h nenhuma restri o em excluir objetos de um relatrio base ou mov-los.
13.3
Controle de herana
Seguimos a cria o de um relatrio derivado do zero. O que acontece se um relatrio existente
deve ser modificado para ter a herana de um relatrio diferente? Para fazer isso, abra o
relatrio e em "Relatrio > Opes..." escolha a guia "Herana":
Manual v5.0.0
Herana do relatrio
189
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.
Manual v5.0.0
Chapter
XIV
Assistentes
Assistentes
191
14.1
Manual v5.0.0
192
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 >>".
Na prxima guia selecione os campos a serem exibidos no relatrio:
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 >",
Manual v5.0.0
Assistentes
193
"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 >>".
Na prxima guia possvel criar um ou mais grupos. O FastReport adicionar o cabealho do
grupo e as bandas de rodap do grupo ao relatrio.
Manual v5.0.0
194
Manual v5.0.0
Assistentes
195
14.2
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.
Manual v5.0.0
196
14.3
apenas coloque um
Selecione o nome da tabela. Se necessrio, tambm possvel definir um filtro, por exemplo:
(CustNo > 2000) and (CustNo < 3000)
Observa o: possvel criar uma nova tabela manualmente ao colocar o componente
"TfrxADOTable" na guia Dados do relatrio.
Manual v5.0.0
Assistentes
14.4
197
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.
Observa o: possvel criar uma nova consulta manualmente ao colocar o componente
"TfrxADOQuery" na guia de Dados do relatrio.
14.5
Constru o da consulta
O FastQueryBuilder pode ser usado para criar consultas visualmente. FastQueryBuilder
includo nas edies FastReport Professional e Enterprise, e tambm pode ser comprado
como um produto independente. O construtor de consultas cria consultas visualmente na
linguagem SQL. O construtor ilustrado abaixo:
Manual v5.0.0
198
1
2
3
4
barra de ferramentas
espao de trabalho do construtor
lista de tabelas disponveis
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
O espao de trabalho e a lista de tabelas disponveis suportam arrastar e soltar, ou seja,
tabelas podem ser arrastadas para o espao de trabalho com o mouse. Tambm possvel
clicar duas vezes em uma tabela na lista de tabelas disponveis.
Manual v5.0.0
Assistentes
199
Manual v5.0.0
200
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:
Manual v5.0.0
Assistentes
201
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:
Manual v5.0.0
202
Manual v5.0.0
Assistentes
203
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:
Manual v5.0.0
204
Manual v5.0.0
Chapter
XV
Visualiza o,
impress o e
exporta o de
um relatrio
206
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
A barra de ferramentas possui os seguintes botes:
cone
Nome
Descri o
Imprimir relatrio
imprime o relatrio
Abrir relatrio
atalho: Ctrl+P
Manual v5.0.0
207
Salvar relatrio
Localizar texto
Aumentar Zoom
Zoom
Diminuir Zoom
Tela Cheia
atalho: Ctrl+F
15.1
Miniaturas
Propriedades da
Pgina
Editar Pgina
Primeira Pgina
Pgina Anterior
Nmero da Pgina
Prxima Pgina
ltima Pgina
Fechar janela
fecha a visualiza o
Teclas de controle
Teclas
Ctrl+S
Ctrl+P
Ctrl+F
F3
Arrows
PageUp, PageDown
Ctrl+PageUp, PageDown
Descri o
salvar relatrio em um arquivo *.fp3
imprimir relatrio
pesquisa de texto
pesquisar novamente
rolagem suave do relatrio
rolagem para cima/para baixo do
relatrio
rolagem para a prxima pgina/
Manual v5.0.0
208
Home
End
15.2
Controle do mouse
A o
Descri o
Bot o esquerdo clique no objeto selecionado (no relatrio interativo)
rolagem do relatrio no modo "m o" (mova o mouse com o bot o
apertado)
aumentar o zoom no modo "lupa"
Bot o direito
menu de contexto
diminuir o zoom no modo "lupa"
Dois cliques
retornar ao tamanho normal quando estiver no modo tela cheia
Roda do mouse rolagem do relatrio
15.3
Impress o do relatrio
Para imprimir um relatrio, clique no bot o
aberta.
Vamos dar uma olhada nas opes disponves nesta caixa de dilogo.
Manual v5.0.0
209
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.
Manual v5.0.0
210
- 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.
Manual v5.0.0
15.4
211
Para continuar a pesquisa, clique em F3. O prximo resultado (se houver) ser realado.
15.5
Exportar o relatrio
O FastReport pode exportar um relatrio visualizado para diversos formatos para permitir a
edi o adicional, arquivamento ou o envio por e-mail, etc. Para habilitar a exporta o, os
componentes de exporta o do FR apropriados devem ser adicionados ao formulrio Delphi.
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 email em qualquer um dos formatos listados.
Manual v5.0.0
212
Manual v5.0.0
213
arquivo de sada.
Configuraes de exporta o:
- Compactado: o arquivo de sada compactado; o tamanho do arquivo reduzido, porm o
tempo de exporta o aumenta
- Fontes embutidas: todas as fontes usadas no relatrio est o contidas no arquivo PDF de
sada, o que permite a renderiza o precisa em computadores nos quais as fontes est o
ausentes; o tamanho do arquivo de sada aumenta consideravelmente
- Plano de fundo: a imagem grfica configurada como plano de fundo exportada ao arquivo
PDF; o tamanho do arquivo de sada aumenta consideravelmente
- Impress o otimizada: imagens grficas s o exportadas em alta resolu o para obter uma
impress o precisa; esta op o somente necessria quando um documento possuir
grficos e precisar ser impresso; o tamanho do arquivo de sada aumenta
consideravelmente
- Estrutura de tpicos: esta op o somente habilitada se o relatrio conter uma estrutura de
tpicos; a estrutura de tpicos exportada ao arquivo PDF
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o
usando o visualizador de PDF padr o instalado no computador (por exemplo o Adobe
Reader).
Recurso da exporta o: objetos RichText s o exportados como grficos.
Manual v5.0.0
214
Configuraes de exporta o:
- Contnuo: exporta como um documento contnuo, sem quebras de pgina e sem
cabealhos/rodaps de pgina
- Quebra de pgina: habilita quebras de pgina no documento
- WYSIWYG: uma representa o precisa do relatrio visualizado; se esta op o for
desabilitada, a otimiza o habilitada, o que reduz o nmero de linhas e colunas no arquivo
de exporta o
- Plano de fundo: a imagem grfica configurada como o plano de fundo da pgina exportada
ao arquivo ODF; o tamanho do arquivo de sada aumenta consideravelmente
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o.
Recurso da exporta o: objetos RichText s o exportados como texto simples, e a exporta o
de imagens grficas suportada.
Manual v5.0.0
215
Configuraes de exporta o:
- Figuras: habilita a exporta o de imagens grficas ao arquivo
- Quebra de pgina: habilita quebras de pgina no documento
- WYSIWYG: uma representa o precisa do relatrio visualizado; se esta op o for
desabilitada, a otimiza o habilitada, o que reduz o nmero de linhas e colunas no arquivo
de exporta o
- Contnuo: exporta como um documento contnuo, sem quebras de pgina e sem
cabealhos/rodaps de pgina
- Cabealho/rodap da pgina: modo de exporta o do cabealho/rodap; os modos s o:
Texto (c/r exportados como texto normal), Cabealho/rodap (c/r s o exportados) e Nenhum
(c/r n o s o exportados).
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o
usando o visualizador de RTF padr o instalado no computador (por exemplo Microsoft
WordPad).
Recurso da exporta o: objetos RichText s o completamente integrados no formato RTF; a
precis o da renderiza o e do tamanho do arquivo depende do design do relatrio. Consulte o
captulo "Consideraes do design do relatrio".
Manual v5.0.0
216
Configuraes de exporta o:
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o.
Manual v5.0.0
217
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:
- WYSIWYG: uma representa o precisa do relatrio visualizado; se esta op o for
desabilitada, a otimiza o habilitada, o que reduz o nmero de linhas e colunas no arquivo
de exporta o
- Figuras: inclui imagens grficas exportadas na tabela de sada;
- Linhas da grade: ativa/desativa linhas de grade no Excel;
- Ajustar tamanho da pgina: ajusta o tamanho da clula ao contedo;
- Excluir fileiras vazias: exclui fileiras vazias da tabela de sada;
- Exportar frmulas: se o texto de uma clula comear com o smbolo "=", ele exportado
como uma frmula Excel;
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o.
Recursos da exporta o: objetos RichText s o transferidos como texto simples, e a
transferncia de imagens grficas suportada.
Manual v5.0.0
218
Parmetros de exporta o:
- Contnuo: gera um documento contnuo, sem quebras de pgina e sem cabealhos/rodaps
de pgina
- Quebra de pgina: habilita quebras de pgina no documento
- WYSIWYG: uma representa o precisa do relatrio visualizado; se esta op o for
desabilitada, a otimiza o habilitada, o que reduz o nmero de linhas e colunas no arquivo
de exporta o
- Plano de fundo: a cor de plano de fundo da pgina do relatrio exportada para a planilha
- Abrir o Excel depois de exportar: o arquivo exportado aberto imediatamente aps a
exporta o.
Recursos da exporta o: objetos RichText s o exportados como texto simples; imagens
grficas n o s o suportadas.
Manual v5.0.0
219
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:
- Contnuo: gera um documento contnuo, sem quebras de pgina e sem cabealhos/rodaps
de pgina
- Quebra de pgina: inclui quebras de pgina no documento resultante
- WYSIWYG: uma representa o precisa do relatrio visualizado; se esta op o for
desabilitada, a otimiza o habilitada, o que reduz o nmero de linhas e colunas no arquivo
de exporta o
- Abrir o Excel depois de exportar: o arquivo exportado aberto imediatamente aps a
Manual v5.0.0
220
exporta o
Recursos da exporta o: objetos RichText s o exportados como texto simples; imagens
grficas s o suportadas.
Configuraes de exporta o:
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o.
Manual v5.0.0
221
Configuraes de exporta o:
- Pgina de cdigo OEM: a codifica o OEM do arquivo exportado
- Separador: o separador usado entre as colunas
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o
usando o visualizador CSV padr o instalado no computador.
Recursos de exporta o: nenhuma informa o de layout (o design do relatrio) includa no
arquivo de exporta o; imagens grficas n o s o suportadas.
Manual v5.0.0
222
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".
Manual v5.0.0
223
Configuraes de exporta o:
- Quebra de pgina: exporta as quebras de pgina ao arquivo resultante
- Linhas vazias: habilita quebras de pgina no documento
- Bordas: habilita a exporta o de bordas do objeto texto
- Pgina de cdigo OEM: codifica o OEM do arquivo exportado
- Abrir depois de exportar: o arquivo exportado aberto imediatamente aps a exporta o
usando o visualizador de texto padr o instalado no computador.
Recursos da exporta o: nenhuma informa o de layout (o design do relatrio) includa no
arquivo de exporta o; imagens grficas n o s o suportadas; a largura da pgina configurada
automaticamente em dependncia ao tipo de objetos texto na pgina do relatrio.
Manual v5.0.0
224
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
Recursos da exporta o: se Arquivos separados for desabilitado, criado um arquivo muito
grande.
15.6
Manual v5.0.0
225
Manual v5.0.0
226
15.7
Manual v5.0.0
227
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.
Objetos no relatrio
Tenha isso em mente ao criar relatrios que devem ser exportados para qualquer um dos
formatos que usa o mtodo de sada de 'tabela'.
Manual v5.0.0
228
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.
Manual v5.0.0
229
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.
Abaixo seguem alguns exemplos de um arranjo bom e ruim de objetos.
Ruim
Os objetos s o deslocados horizontalmente
linha guia vertical.
Bom
eles n o est o alinhados horizontalmente com a
Ruim
Manual v5.0.0
230
Bom
Os objetos est o sobrepostos ao exportar para um formato de tabela/diagrama, ser o criadas
fileiras e colunas adicionais e desnecessrias, alm de trs clulas adicionais na rea de
sobreposi o.
Recomendamos o estudo dos relatrios de demonstra o includos na instala o do
FastReport para ajudar voc a dominar os princpios bsicos do bom design de relatrios.
Manual v5.0.0