28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 1/43
www.devmedia.com.br [versão para impressão]Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=29700
Crystal Reports: Criando
relatórios com SAP
Este artigo é útil para os desenvolvedores de software
iniciantes e avançados que desejam apreender e aprimorar
suas habilidades e conhecimentos na geração de relatórios
sofisticados, de forma rápida e fácil.
Fique por dentro
Este artigo é útil para os desenvolvedores de software iniciantes e avançados que
desejam apreender e aprimorar suas habilidades e conhecimentos na geração de
relatórios sofisticados, de forma rápida e fácil, com a ferramenta geradora de
relatórios SAP Crystal Reports e plataforma .NET. Este artigo faz uma abordagem
introdutória em cima dos principais recursos da ferramenta SAP Crystal Reports,
através dos recursos de seu IDE. Também será mostrado como criar relatório de
listagem simples, campos calculados, subtotais, agrupamentos de campos, formatação
de um relatório, relatório com parâmetro e por fim será criado um gerenciador de
relatórios onde será feito uso da biblioteca de classes do SAP Crystal Reports
disponível para o Visual Studio e a plataforma .NET.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 2/43
Neste artigo falaremos de uma ferramenta muito produtiva e poderosa, o SAP Crystal
Reports, que está no mercado há bastante tempo e desde sempre teve suporte para
interagir com os principais kits de desenvolvimento de software da Microsoft. Esta
ferramenta pode ser integrada facilmente ao Visual Studio, disponibilizando um template
que permite a criação de relatório sintético e analítico dentro do próprio ambiente do
Visual Studio, podendo ser atrelado às principias aplicações desenvolvidas com Windows
Forms, WPF e websites com ASP.NET.
A ferramenta SAP Crystal Reports pode conectar-se a diversas fontes dados com uso de
providers como SQL OLE DB, ODBC e outros. A partir de diversos SGBDs como o SQL
Server, MySQL, DB2, Oracle e PostgreSQL, podemos gerar relatórios simples e
complexos com recursos para exportação em PDF, Excel, CSV, dentre outros formatos.
Durante este artigo você terá uma base teórica e prática sobre as funcionalidades da
ferramenta e posteriormente, no decorrer do assunto, faremos download do pacote SAP
Crystal Reports para o Visual Studio 2012. Também veremos exemplos práticos de como
listar dados em um relatório, agrupar campos, criar totalizadores, campos calculados,
passagem de parâmetros para filtrar dados no relatório, formatação do relatório e outras
funções importantes da ferramenta.
A parte prática conta com exemplos criados via interface gráfica do próprio SAP Crystal
Reports, onde será feito o uso da biblioteca de classes do SAP Crystal Reports disponível
para o Visual Studio e a plataforma .NET. Dessa forma temos a disponibilidade de chamar
alguns recursos do relatório via código programação com a linguagem C#, o que nos dá
mais flexibilidade para o desenvolvimento do relatório e torna a interação com o usuário
mais rica e agradável.
Para tornar mais produtivos os exemplos deste artigo, criaremos um gerenciador de
relatórios, para que à medida que formos criando os relatórios, possamos disponibilizar
os mesmos de forma fácil e prática em uma aplicação Windows Forms. Através do
gerenciador de relatórios, poderemos selecionar um dos relatórios criados e gerar o
mesmo para visualização e navegação, podendo optar por exportar em diversos
formatos através do Crystal Report Viewer.
Introdução a dados e relatório
Com o avanço da tecnologia, principalmente com novos recursos em hardware e software
que possibilita a captura e armazenamento de dados de forma rápida e dinâmica,
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 3/43
independentemente da posição geográfica em que os dados forem transmitidos e
armazenados, o ato de transformar dados em informação para gerar conhecimento
tornou-se cada vez mais necessário, pois as empresas e organizações necessitam
guardar acontecimentos e fatos ocorridos ao longo de sua existência em repositórios de
dados, como um sistema gerenciador de banco de dados. Não necessariamente os dados
devem ser armazenados apenas em banco de dados, pois há situações em que não
haverá recursos suficientes ou disponíveis para gravar os dados de forma mais precisa
em uma base de dados. Desta forma, se faz uso de outros meios para gravar e
armazenar estes dados, como em arquivos texto e XML, levando em consideração que
em muitas situações é realmente necessário gravar dados em arquivos de deste tipo com
um layout de gravação pré-defino, para que depois possa ser feita a transmissão destes
dados via webservice ou serviços WCF (BOX 1) para uma base de dados na nuvem.
BOX 1. WCF
WCF ou Windows Communication Foundation é uma tecnologia de disponibilização
de serviço inserida na plataforma .NET a partir do framework 3.0. Trata-se de uma
solução que a Microsoft encontrou para unificar antigas tecnologias de serviços e
troca mensagens, possibilitando trabalhar com protocolos diferentes. Com o WCF
podemos construir de forma fácil e rápida aplicações distribuídas orientadas a
serviço.
A demanda por relatórios em cima da área TI, por parte dos gestores em mais diversos
níveis da hierarquia de uma empresa ou organização, está cada vez mais frequente e
crescente. Dessa forma, é preciso ter profissionais especialistas em análise de dados e
desenvolvimento de relatórios, para que se possa transmitir informação em forma de
relatório aos mais diversos setores e níveis de uma empresa.
Para criar um relatório com informação de qualidade, ou seja, informação correta, precisa
e organizada, não basta apenas jogar dados em forma de uma lista ou planilha, é
necessário seguir algumas diretrizes para preparar a informação dentro de um relatório.
Vejamos algumas boas práticas para se preparar um relatório:
· Um relatório sempre deve ser composto por um cabeçalho, corpo e rodapé.
Dependendo do relatório, o mesmo pode ter cabeçalho e rodapé de página, estas
divisões no relatório são chamadas de sessões do relatório;
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 4/43
· No cabeçalho podemos colocar algumas informações importantes para o mesmo, como
as seguintes:
o Título e subtítulo do relatório, caso seja necessário. Como exemplo, temos como título
de um relatório: Relatório de Vendas; e subtítulo: Vendas por Cidade;
o Logomarca da empresa e nome da filial ou matriz;
o Data e hora em que o relatório foi gerado. Caso os dados sejam oriundos de base de
dados com o objetivo de BI, pode ser importante colocar a data do último sincronismo
da base de dados de BI com o banco de dados em produção;
o Login do usuário que gerou o relatório;
o Nome e versão do relatório. Neste caso seria a versão disponível na tela que se gera o
relatório, geralmente a versão é exibida em aplicações de médio e grande porte, que
seguem uma metodologia de desenvolvimento de software bem documentada, o que
torna mais fácil o controle de versões. A medida que uma aplicação cresce, surgem novas
necessidades para o software e principalmente para o desenvolvimento de novos
relatórios, dessa forma, é uma ótima ideia realizar o controle de versões para os
relatórios;
o Lista dos parâmetros informados pelo usuário no momento que gerou o relatório,
principalmente intervalos de datas, filtros e agrupamentos;
o O cabeçalho de um relatório geralmente aparece apenas na primeira página do relatório.
Caso o relatório tenha um cabeçalho de página, que é repetido em todas as páginas do
relatório, o mesmo deve conter a numeração da página;
· O corpo de um relatório é a parte mais importante do mesmo, pois é onde os dados
serão apresentados. Aqui, torna-se importante ressaltar os seguintes detalhes:
o O título de cada coluna representada no relatório deve ser compreensível. Devido ao
espaço entre as colunas ser mínimo, é recomendável fazer abreviação de palavras, porém
é de extrema importância realizar a abreviação das palavras de forma correta para que
fique claro do que se trata.
o Geralmente os títulos das colunas do relatório devem ser diferenciados, de forma a
chamar atenção de quem for analisá-lo, assim, pode ser importante colocar em negrito,
por exemplo.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 5/43
o Os campos que representam dados em formatos distintos, como data e moeda, devem
receber a formatação correta. Por exemplo, valores monetários devem ter duas casas
decimais (em casos em que a quantidade exata não é especificada para a situação) e a
data deve respeitar o formato dia/mês/ano (que é o formato mais comum no Brasil, a
menos que um formato específico seja solicitado).
o Os dados em um relatório podem ser analíticos e sintéticos, dessa forma, podemos
optar por realizar agrupamento de dados. Por exemplo, um relatório de vendas pode
conter dois agrupamentos, o primeiro por vendedor e segundo por área ou região em
que o mesmo realiza as vendas.
o Quando um relatório mostra valores numéricos e de moeda, é importante colocar totais
no final do relatório e subtotais para o agrupamento de uma determinada categoria.
o Relatório com agrupamento pode conter totais de contagem, ou seja, um campo que
conta a quantidade de registros em um determinado agrupamento.
o Para melhorar a visualização e a estética de um relatório, podemos colocar uma linha
para dividir partes do relatório.
o Colocar dados em formato de tabela pode ser ideal em algumas situações. O relatório
zebrado também é uma opção de destaque, ou seja, uma linha com cor de fundo e outra
sem, para poder diferenciar uma linha da outra.
· No rodapé do relatório podem ser repetidas algumas informações do cabeçalho, como a
numeração de página. Também podemos colocar algumas observações ou mensagens
para o usuário que irá analisar o relatório. É interessante colocar as informações de
contato da software house que é proprietária ou que desenvolveu o produto de software
em questão.
Conhecendo o SAP Crystal Reports
SAP Crystal Reports é uma ferramenta especializada em gerar relatórios simples ou
complexos, podendo conectar-se a diversos bancos de dados populares disponíveis no
mercado. O mesmo apresenta um IDE que facilita o desenvolvimento (valoriza o padrão
de desenvolvimento RAD – BOX 2) e o designer do relatório, para que o usuário possa
criar relatórios de forma simplificada, arrastando e soltando os componentes na área de
designer do aplicativo, podendo formatar o relatório de acordo com a necessidade.
Ao criar um novo relatório no SAP Crystal Reports, temos as seguintes possibilidades de
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 6/43
seleção de recursos:
· Conexão com o banco ou fonte de dados;
· Seleção das tabelas que serão usadas no relatório;
· Escolha dos campos que serão usados para compor o relatório;
· Criação dos relacionamentos entre os campos das tabelas selecionadas;
· Organização das ordens dos vínculos entre as tabelas;
· Escolha de estilos predefinidos para dar uma boa apresentação no designer do
relatório;
· Seleção dos campos que devem ser agrupados no relatório;
· Ordenação crescente ou decrescente na exibição das informações por agrupamento o
sub agrupamento;
· Seleção de campos que geram resumo como somatória, média, contagem, valor
máximo, valor mínimo, dentre outras escolhas disponíveis;
· Classificação dos agrupamentos;
· Opção de inserção de gráfico no relatório com escolha do tipo de gráfico, podendo ser
em barras, linhas e setores;
· Filtro em campos com opção de seleção do valor menor, maior, igualdade, dentre outras
escolhas para filtragem de dados.
O SAP Crystal Reports também conta com um ótimo visualizador de relatório, rico em
funcionalidades, onde podemos destacar algumas das principais funções, conforme
descrito logo seguir:
· Exportação do relatório para os formatos PDF, DOC, CSV, XML, XLS, dentre outras
extensões disponíveis;
· Gerenciador de impressão e ajuste do layout do relatório;
· Barra de navegação para a seleção entre as páginas do relatório;
· Localizador de palavras;
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 7/43
· Lupa de aumento;
· Função de visualização individual de registros.
BOX 2. RAD
Vários pacotes de aplicações para desenvolvimento de software disponíveis no
mercado podem ser classificados como ferramentas que tem características do
padrão de desenvolvimento RAD (do inglês Rapid Application Development), por
terem uma interface de desenvolvimento simplificado, ou seja, aplicações que
permitem criar um software rapidamente, muitas das vezes sem ser preciso digitar
uma única linha de código. O Visual Studio é um ótimo exemplo de kit de
desenvolvimento que tem um IDE que garante bastante produtividade para o
desenvolvedor, onde podemos clicar e arrastar os componentes da Toolbox e soltar
na área de designer da aplicação.
História do Crystal Reports
O Crystal Reports foi desenvolvido inicialmente em 1991 pela Crystal Services, com
objetivo de ser uma ferramenta de Business Intelligence usada para gerar e projetar
relatórios, sendo comercializada na época com nome de Quick Reports.
A Crystal Services produziu as versões 1.0 até 3.0 do Crystal Reports, depois disso foi
adquirida em 1994 pela empresa Seagate Techonology, sendo batizada com o nome de
Crystal Decisions, que produziu as versões 4.0 até 9.0. A Crystal Decisions foi adquirida
em 2003 pela Business Objects, que produziu as versões 10, 11 e 12 do Crystal
Reports. Com esta trajetória da ferramenta, a SAP adquiriu a Business Objects em 2007,
lançando posteriormente, em maio de 2011, o Crystal Reports 2011, versão 14. Há
pouco tempo atrás a SAP mudou novamente o nome da ferramenta de relatório para SAP
Cystal Reports.
Em 1993 a Microsoft fechou uma parceria com a Crystal Services e incorporou o Crystal
Reports no Visual Basic, porém, o desenvolvimento e a criação de relatório eram
permitidos apenas via interface gráfica de designer. Posteriormente, com surgimento do
kit de desenvolvimento Visual Studio e a popularidade do lançamento da plataforma .NET,
a Crystal Decisions reformulou o Crystal Reports para plataforma .NET, incorporando o
mesmo no Visual Studio 2003, possibilitando assim o desenvolvimento de relatórios
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 8/43
programaticamente via linha de código. Com o lançamento do Visual Studio 2005, a
Microsoft lançou sua própria ferramenta para distribuição de relatório como
ReportViewer. Com o lançamento do Visual Studio 2008, o Crystal Reports para a
plataforma .NET teve melhorias significativas e permanece como a principal ferramenta
para geração de relatórios. Atualmente a SAP disponibilizou o SAP Crystal Reports para
integração com o Visual Studio como add-on (BOX 3).
Hoje, a SAP disponibiliza sua solução em relatório com o SAP Crystal Reports que oferece
suporte para a plataforma de desenvolvimento com o Visual Studio .NET e Eclipse.
BOX 3. Add-on
Add-ons podem ser definidos como módulos ou funções complementares que
alteram ou aumentam as funcionalidades de uma determinada ferramenta, podendo
também ser caracterizados como plug-ins, extensões, snap-ins, etc. As empresas
que disponibilizam estes pacotes geralmente cobram uma licença de uso para
aquisição do pacote componente de software.
Opções para criar um relatório com o SAPCrystal Reports
Em 14 de janeiro de 2013 a SAP disponibilizou a versão de desenvolvimento de relatório
com o SAP Crystal Reports para plataforma .NET, sendo possível a integração com o
Visual Studio 2012. Essa versão possibilita ao desenvolvedor criar relatórios para
aplicações desktop, com uso de templates como Windows Forms e WPF, podendo
também optar por aplicações Web com ASP.NET.
Para criar relatórios com SAP Crystal Reports pode-se optar por duas formas, conforme
descrito a seguir:
Assistente de relatório do SAP Crystal Reports
Este assistente permite criar um relatório de forma simples e rápida. O mesmo conta com
uma tela de apresentação, que auxilia na escolha para criar um novo relatório em branco.
Pode-se criar o relatório “do zero”, ou optando pela a escolha da utilização de um
assistente que auxilia a criação do relatório em um passo a passo, isto é, o assistente
apresenta ao usuário os templates disponíveis para criar um novo relatório.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 9/43
Esta primeira opção é ideal e aconselhável para quem está iniciando a criação de relatório
e ainda não tem o domínio da ferramenta, ou mesmo para quem busca ser objetivo,
tendo a possibilidade de criar um relatório rapidamente sem a necessidade da utilização
de algumas configurações no IDE. Com esta escolha não é preciso fazer inclusão de
código no relatório para desempenhar atividades mais complexas.
IDE de desenvolvimento de relatório do SAP
Crystal Reports
A segunda opção para criar relatório com o SAP Crystal Reports é pelo ambiente gráfico
de desenvolvimento, onde é possível construir toda a estrutura de um relatório. Esta
ferramenta oferece uma janela chamada Main Report, que é a área de criação do relatório
e mostra uma pré-visualização deste em desenvolvimento. Com o Main Report fica fácil
criar a estrutura do relatório, pois o mesmo já vem com o relatório dividido em sessões
e, com o auxílio da janela Field Explorer, podemos clicar e arrastar alguns componentes
para a área de desenvolvimento do relatório.
A janela Field Explorer oferece recursos com vários componentes e ferramentas que irão
auxiliar no desenvolvimento e configuração do relatório. É através da Field Explorer que
temos a opção de conectar a uma fonte de dados como, por exemplo, o Microsoft SQL
Server, e assim selecionar tabelas, views, e por fim os campos que irão compor o
relatório.
Além da janela Field Explorer, temos a opção de desenvolver várias funções para nosso
relatório de forma programática, ou seja, com uso de uma linguagem de programação
como C#, é possível chamar um documento de relatório via código e fazer uso do mesmo
de forma mais flexível. No código podemos recuperar parâmetros inseridos pelo usuário
via interface gráfica e passar estes parâmetros para realizar filtros no relatório antes do
mesmo ser exibido, assim teremos um relatório mais limpo e com informações
resumidas.
Um ponto importante para o desenvolvimento do relatório é a janela Main Report
Preview, que mostra a visão final do relatório. É a forma como o usuário vai visualizar e
navegar no relatório em produção.
Estrutura de um relatório SAP Crystal Reports
Após a escolha do template e a finalização do assistente para criação de relatório, é
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 10/43
criado o arquivo do relatório, que pode ser visualizado no Solution Explorer. O relatório é
o arquivo com extensão rpt que fica junto aos outros arquivos que compõem projeto no
Visual Studio.
No arquivo rpt consta toda a estrutura do relatório, podendo este ser utilizado em
outros projetos, já que possui todas as configurações necessárias para conectar a fonte
de dados do relatório. Expandindo o arquivo rpt no Solution Explorer podemos observar
o arquivo com extensão cs, caso seja uma aplicação desenvolvida com a linguagem de
programação C#, ou extensão vb, caso use a linguagem VB .NET.
No arquivo cs consta o código C# para definir a estrutura do relatório, com a definição
para criar um novo documento através da classe ReportDocument, que faz parte do
namespace CrystalDecisions.CrystalReports.Engine da biblioteca Crystal Reports para
plataforma .NET. Neste arquivo também temos a definição das sessões do relatório,
como o cabeçalho do relatório, cabeçalho da página, detalhes do relatório, rodapé do
relatório e rodapé da página. As sessões são definidas através da classe Section do
namespace do ReportDocument.
Biblioteca de classes SAP Crystal Reports paraa plataforma .NET
Antes de iniciar o desenvolvimento de um relatório, é de extrema importância conhecer a
estrutura de namespace do SAP Crystal Reports para a plataforma .NET. Na sequência
serão descritos os principais namespaces importantes para o entendimento e para o
desenvolvimento de recursos para o relatório via programação.
· CrystalDecisions.CrystalReports.Engine: este namespace é o pilar para estrutura de um
relatório com Crystal Reports. Nele estão as principais classes para dar o suporte
necessário ao desenvolvimento de um relatório, destacando-se a classe
ReportDocument, que tem propriedades e métodos para compor o novo documento de
relatório.
· CrystalDecisions.CrystalReports.ViewerObjectModel: aqui temos as classes e interfaces
para dar suporte ao objeto CrystalReportViewer. É através do CrystalReportViewer que
expomos o documento de relatório ReportDocument para visualização e navegação.
· CrystalDecisions.ReportSource: este namespace fornece classes que compõem uma
camada entre o controle CrystalReportViewer e o modelo de objeto ReportDocument.
Essas classes servem para lidar com as solicitações dos controles CrystalReportViewer.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 11/43
· CrystalDecisions.Shared: o namespace CrystalDecisions.Shared fornece classes,
interfaces e enumerações que são compartilhados pelo controle CrystalReportViewer e o
modelo de objeto ReportDocument.
· CrystalDecisions.Windows.Forms: fornece suporte para os controles
CrystalReportViewer e classes associadas com Windows Forms.
· CrystalDecisions.Web: fornece suporte para o controle CrystalReportViewer, controle
CrystalReportPartsViewer e suas classes associadas com ASP.NET.
· CrystalDecisions.Web.Services: fornece apoio para expor um relatório Crystal Reports
através de webservice.
· CrystalDecisions.Web.HtmlReportRender: oferece recursos para os eventos de
renderização no controle CrystalReportViewer e no controle CrystalReportPartsViewer.
Download e instalação SAP Crystal Reportspara Visual Studio 2012
Antes de iniciarmos a criação de um relatório, devemos obter o pacote de
desenvolvimento de relatório SAP Crystal Reports para o Visual Studio 2012. Através do
próprio site da SAP Community Network podemos realizar o download (veja a sessão
Links).
Uma observação importante a respeito do download é a escolha do pacote completo, ou
seja, podemos optar por baixar o arquivo CRforVS executável que realiza a instalação do
SAP Crystal Reports e faz a integração automática com o Visual Studio 2012. Caso seja
realizada apenas a instalação do pacote MSI, não ficará disponível o template do Crystal
Reports do Visual Studio 2012.
Após o download do pacote CRforVS executável, devemos realizar a instalação de SAP
Crystal Reports de forma simples pelo seu assistente de instalação, com uma interface
gráfica fácil e prática, onde podemos ir avançando e a instalação será realizada e
finalizada rapidamente.
Criando um projeto com Visual Studio 2012
Para iniciarmos a exploração da ferramenta SAP Crystal Reports, iremos criar um novo
projeto do tipo Windows Forms com o Visual Studio 2012. Devemos selecionar a
linguagem de programação C# e o framework 4.5 da plataforma .NET. Chamaremos este
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 12/43
projeto de CrystalExemplos, conforme podemos observar o Solution Explorer exibido na
Figura 1.
Iremos trabalhar com SAP Crystal Reports em uma aplicação do tipo Windows Forms,
mas nada impede da utilização de outra tecnologia como WPF e ASP.NET, pois após a
criação do relatório, é gerado um arquivo com extensão rpt, que depois do
desenvolvimento e configuração do relatório, pode ser usado em diferentes tipos de
projeto, bastando inserir o arquivo de relatório do novo projeto e fazer algumas
referências aos namespace do SAP Crystal Reports necessários para aplicação.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 13/43
Figura 1. Estrutura inicial do projeto criado
Vejamos a seguir a lista dos namespaces necessários em uma aplicação com relatório
SAP Crystal Reports.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 14/43
· CrystalDecisions.CrystalReports.Engine;
· CrystalDecisions.ReportSource;
· CrystalDecisions.Shared;
· CrystalDecisions.Web;
· CrystalDecisions.Windows.Forms
Criando um relatório com o assistente do SAPCrystal Reports
A partir de agora iremos desenvolver exemplos práticos para demonstrar as
funcionalidades da ferramenta SAP Crystal Reports. Para tanto, precisaremos de uma
fonte de dados, e neste caso utilizaremos o banco de dados muito popular para
exercícios, o banco Northwind, com uso do SGBD Microsoft SQL Server 2008. O
Northwind pode ser adquirido através do site da Microsoft (veja a sessão Links). Após
realizar o download do Nortwind, devemos instalar o pacote que será extraído na pasta
SQL Server 2000 Sample Databases, dentro da unidade C da máquina local, depois é só
executar a função Attach Database no SQL Server 2008 e selecionar o arquivo
Northwind.mdf referente ao banco de dados.
Agora que já temos uma fonte de dados Nortwind e o SAP Crystal Reports devidamente
instalados, então iremos adicionar ao nosso projeto no Visual Studio 2012 um novo item
do tipo Crystal Reports, que será um novo documento de relatório. Após aberta a tela de
inserção de itens ao projeto, iremos à sessão Reporting e selecionaremos o template
Crystal Reports, nomeando para CrystalReportRelatorio1.rpt.
Após a inserção do novo documento de relatório ao projeto, é aberta automaticamente a
galeria de relatórios do Crystal Reports, conforme mostra a Figura 2.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 15/43
Figura 2. Tela galeria do SAP Crystal Reports
A Figura 2 mostra a tela inicial para criar um novo documento de relatório SAP Crystal
Reports, que por sinal não tem mudanças muito significativa na interface gráfica em
relação às versões anteriores. Nesta tela temos algumas opções de como será criado o
novo documento de relatório. A seguir são descritas as possíveis alternativas:
· Utilizando o assistente para relatório: com a escolha desta opção, temos três tipos de
assistentes para criar um novo relatório. Temos a opção padrão, tabela de referência
cruzada e rótulo de correio. A opção mais utilizada é a primeira, a padrão, com esta
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 16/43
opção selecionada um assistente irá auxiliar na criação de um novo relatório em um
passo a passo, desde a conexão com banco de dados, seleção de tabelas, campos para
compor o relatório, definição das relações entre as tabelas, criação de filtros para o
relatório, agrupamento de campos, ordenação de dados, inserção de gráficos
sofisticados, dentre outros recursos que podemos acrescentar ao relatório. Podemos
incluir todos estes recursos de forma fácil e prática no relatório com ajuda do assistente
de criação de relatório.
· Como um relatório em branco: esta opção cria apenas o arquivo para um novo
documento de relatório em branco, o arquivo rpt. Através do arquivo de relatório em
branco, devemos construir todo o relatório desde o início. Neste ponto criaremos o
relatório via designer com auxílio da janela Field Explorer, inserindo e arrastando os
componentes para a área de desenvolvimento do relatório. Os componentes inseridos na
área de desenvolvimento do relatório podem ser facilmente configurados através de suas
propriedades, para assim que possam compor a estrutura necessária para o novo
relatório.
· De um relatório existente: através desta opção podemos selecionar manualmente um
arquivo de relatório rpt já existente e realizar a inserção do mesmo dentro do projeto
atual.
Vale ressaltar que caso a opção selecionada para criar um novo relatório seja através do
“Assistente para Relatório”, poderemos escolher um determinado tipo de assistente de
acordo com o objetivo e necessidade do relatório. Assim sendo, se precisamos de uma
informação resumida, uma boa escolha é selecionar o assistente de tabela de referência
cruzada. Este modelo é parecido com uma tabela dinâmica do Excel, onde podemos
selecionar os campos que representarão as colunas e linhas, e os campos para
demonstrar valores de uma forma reduzida ou detalhada, conforme escolha dos campos
que representam as linhas e colunas da tabela.
Para explorarmos boa parte dos recursos do assistente de relatório SAP Crystal Reports,
optaremos pela utilização da primeira opção, a padrão, conforme seleção mostrada na
Figura 2.
Avançando no assistente de relatório, o próximo passo a ser realizado é a escolha dos
dados nos quais nosso relatório irá se basear. Um detalhe importante neste ponto é a
possibilidade de escolha entre diversas fontes de dados para o relatório. Observe a
Figura 3, nela são exibidos os tipos de origem de dados disponíveis para gerar um novo
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 17/43
relatório, conforme descrito a seguir.
· Dados do projeto: caso tenhamos uma fonte de dados disponível dentro do projeto
atual, podemos usá-la para criar o novo relatório. Uma boa escolha seria utilizar como
fonte de dados para o relatório um DataSet existente.
· Minhas conexões: esta opção nada mais é que a lista conexões existentes, através dela
podemos gerenciar as conexões e fazer alterações quando for necessário.
· Criar nova conexão: esta é a opção mais importante em relação à gama de fonte de
dados com a qual podemos criar uma nova conexão. É possível conectar a fontes de
dados como Access, Excel, arquivo XML, conectar através ODBC, OLE DB e a vários
outros SGBDs existentes no mercado.
Figura 3. Tela para escolha da fonte de dados
O próximo passo para dar continuidade ao assistente é criar uma nova conexão com o
SQL Server e utilizar o banco de dados Nortwind como fonte de dados para o relatório.
Para isso, devemos expandir a estrutura de pastas da opção Criar Nova Conexão, neste
momento teremos acesso ao item OLE DB (ADO). Selecionando o mesmo, irá abrir uma
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 18/43
nova janela em que devemos selecionar o provedor de dados, que neste caso é o
Microsoft OLE DB Provider for SQL Server. Após este passo devemos avançar. Agora irá
aparecer mais uma janela para informar o nome do servidor e instância do SQL Server
instalado na máquina. Caso a mesma tenha sido nomeada, ou tenhamos o SQL EXPRESS
instalado na máquina, o nome do servidor ficaria da seguinte forma: .\SQLEXPRESS. O
próximo campo a ser preenchido é o nome de usuário e senha. Se não tivermos um
usuário ativo no SQL Server, devemos marcar a opção Segurança Integrada, que irá usar
as credenciais de login do Windows para fazer a conexão à base de dados. Por fim, basta
selecionar o banco de dados Nortwind, avançar e finalizar esta etapa.
A próxima tela do assistente (Figura 4) mostra as tabelas disponíveis do banco de
dados selecionado. Aqui devemos selecionar todas as tabelas que contenham os campos
que pretendemos usar para compor o relatório. Em nosso exemplo iremos selecionar
apenas as tabelas Order_Details, Orders e Products.
Uma observação importante na seleção de dados para compor o relatório é possibilidade
de selecionar views, pois podemos criar views no banco de dados com restrições em
determinados campos que não devem ser exibidos para terceiros. Isso também serve
para diminuir o tráfego de dados entre a aplicação e a base de dados. No momento de
criar uma nova view, devemos incluir na mesma apenas os campos que serão utilizados
no relatório.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 19/43
Figura 4. Seleção de tabelas do banco de dados
Na próxima tela do assistente, tela de vínculo entre tabelas, podemos criar referências
entre registro de tabelas distintas, ou seja, é possível fazer um vínculo entre duas
tabelas automaticamente por campo de mesmo nome, ou chave, caso não tenhamos um
modelo de dados normalizado. Neste ponto ficaremos com a escolha do vínculo
automático por chave, e avançaremos para próxima tela do assistente.
Com as tabelas do banco de dados selecionadas para a composição do relatório e os
vínculos entre os mesmos definidos, devemos agora avançar e na tela que surge
devemos selecionar os campos que serão exibidos no relatório. Neste caso iremos
selecionar os campos ProductID e ProductName da tabela Products, e na tabela
Order_Details selecionaremos os campos UnitPrice, Quantity e Discunt. Ao final
avançaremos para próxima tela do assistente de relatório.
Uma observação importante na tela de seleção de campos das tabelas é que podemos
selecionar a ordem que os campos serão dispostos dentro do layout do relatório, ou
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 20/43
seja, devemos ir selecionando os campos a serem exibidos no relatório na ordem da
esquerda para direita.
A próxima tela do assistente, mostrada na Figura 5, exibe os campos disponíveis que
podem agrupar determinadas informações no relatório. Em nosso exemplo iremos fazer
dois agrupamentos, um pelo campo ShipRegion da tabela Orders e outro agrupamento
pelo campo OrdersID da tabela Orders.
Quando é selecionado mais de um campo para agrupar as informações, podemos definir
a ordem dos agrupamentos, podendo ter um agrupamento dentro do outro e também
classificar a informação em ordem crescente ou decrescente. Neste caso é necessária a
seleção de um campo para que seja exibido na parte inferior desta tela um combo com a
opção de classificação. Após avançar será mostrada outra tela para selecionar os campos
para resumo de informação, como contagem, soma, máximo, mínimo, dentre outras
opções, lembrando que esta segunda tela de campos com resumo só será apresentada
caso você tenha algum campo selecionado para agrupar as informações. Como na tela
anterior realizamos alguns agrupamentos, a tela de resumo de relatório já vem com
alguns resumos criados automaticamente pelo assistente; iremos retirar estes resumos e
avançar.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 21/43
Figura 5. Seleção de campos para agupar informações
Após avançar no assistente, será apresenta uma tela para realizar filtros em campos do
relatório, com objetivo de filtrar a informação de acordo com a necessidade da
visualização de dados. Vejamos na Figura 6 a opção de realizar vários filtros nos dados
para que a informação seja apresentada de forma resumida e obedecendo alguns
critérios, conforme descritos na combobox de opções de filtros.
Em nosso exemplo não iremos realizar filtros neste momento, estão iremos deixar o
assistente sem filtros e avançar para próxima tela.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 22/43
abrir imagem em nova janela
Figura 6. Filtro em campos
Na próxima tela, e última, temos escolha do estilo do relatório. Temos a opção de aplicar
ao relatório um layout predefinido, conforme estilos disponíveis. Note que ao ir
selecionando as opções de layout podemos visualizar uma prévia de como fica o modelo
do relatório. Para finalizar o assistente, selecionaremos o estilo padrão.
Após finalizar o assistente, voltamos ao Visual Studio com o arquivo
CrystalReportRelatorio1.rpt aberto e Main Report selecionado, ou seja, estamos com o
ambiente de desenvolvimento do relatório ativo. Agora precisamos visualizar como ficou
o relatório que criamos com a ajuda do assistente, assim sendo, temos a opção Main
Report Preview na parte inferior, ao lado do Main Report, que ao ser selecionado mostra
a visualização final do relatório, conforme Figura 7.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 23/43
abrir imagem em nova janela
Figura 7. Visualização do relatóio criado pelo assistente do SAP Crystal Reports
Na Figura 7 temos nosso relatório com dois agrupamentos, por ShipRegion e por
OrderID. Note que o mesmo mostra o detalhe de cada ordem, conforme configuramos no
assistente, ou seja, a lista de produtos de cada ordem. Outra observação importante é
que nas primeiras páginas do relatório não conta a região, mas isso não é um erro no
relatório, pois neste caso existem registros de ordens na base de dados sem região.
Então fica a dica para não realizar agrupamentos em campos que possam conter valores
nulos ou então, neste caso, fazer a ordenação em ordem decrescente.
O relatório ainda está bem simples em termos de formatação, também não tem cabeçalho
de relatório e nem totalizadores. No decorrer do artigo irmos aplicar algumas
formatações e alguns recursos importantes para tornar o relatório rico e apresentável.
Conhecendo a área de designer do SAP CrysltalReports no Visual Studio
Precisamos conhecer o ambiente de designer do SAP Crystal Reports. Na Figura 8 temos
a tela do Visual Studio com o arquivo CrystalReportRelatorio1.rpt selecionado, note que
a figura tem alguns destaques numerados em vermelho que correspondem aos principais
recursos para criar e formatar o relatório, conforme descrito abaixo:
1. Área de designer do relatório, com exibição de uma régua na parte superior e à
esquerda, para que possa auxiliar no alinhamento dos componentes do relatório. Logo
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 24/43
ao centro existem sessões separando as partes fundamentais do relatório, como o
cabeçalho de relatório, cabeçalho da página, cabeçalho do primeiro agrupamento,
cabeçalho do segundo agrupamento, detalhes do relatório, rodapé do segundo
agrupamento, rodapé do primeiro agrupamento, rodapé do relatório e por fim rodapé da
página.
2. Field Explorer, contendo a maior parte dos recursos para auxiliar na geração do
relatório, como a inserção de grupos, campos calculados, passagem de parâmetro,
campos especiais, totalizadores e também o Database Fields, que mostra as tabelas
selecionadas para ajudar a compor o relatório com todos os seus campos. Caso você
precise adicionar um novo campo ao relatório, é só clicar e arrastar para alguma seção do
relatório na área de designer.
3. Na parte inferior da imagem temos duas abas para trabalhar no relatório. A primeira é
Main Reports, que mostra a área de edição para criar a estrutura do relatório, e a
segunda é Main Report Preview, que mostra a visualização do relatório final em execução,
esta aba é bastante importante, pois não precisamos ficar executando a aplicação o
tempo inteiro para ver resultado das modificações realizadas durante a criação do
relatório.
4. Toolbox com a guia Crystal Reports, que disponibiliza três componentes importantes
para auxiliar de forma rápida a inserir alguns recursos no relatório, como um objeto
texto, linha e caixa para destacar algo no relatório.
5. Barra de ferramentas, que mostra os atalhos para importantes recursos do SAP
Crystal Reports. Através desta barra podemos formatar os objetos do relatório de forma
rápida e fácil, aplicando formatação na fonte, como tamanho e alinhamento. Também é
possível inserir o objeto chart para gráficos no relatório, inserir imagens, agrupamentos,
acessar as propriedades dos objetos dispostos no relatório, exibir e ocultar a Field
Explorer para dar mais espaço para a área de formatação do relatório, dentre outros
recursos.
6. Menu do Crystal Reports: este menu exibe atalhos para recursos já comentados
anteriormente. Nele também podemos gerenciar a conexão com a base de dados,
verificar update do SAP Crystal Reports, pré-visualizar o relatório, inserir arquivo CSS
para aplicar formatação diferenciada em sessões especificas do relatório. Aqui também
está disponível o submenu Design, onde podemos exibir e ocultar e régua, definir o tipo
de papel e orientação da página do relatório.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 25/43
7. Janela de propriedades: tem um papel fundamental para visualizar e alterar qualquer
propriedade dos objetos do relatório, bastando apenas selecionar o objeto e pressionar
a tecla F4.
abrir imagem em nova janela
Figura 8. Tela de Designer para o SAP Crystal Reports
Criando campo calculado com Formula Field
O SAP Crystal Reports tem um recurso muito interessante, o Formula Field, que está
disponível no Field Explorer. Com ele podemos criar campos calculados para utilizar em
diversas situações no decorrer da criação de um relatório.
Um campo calculado depois de criado é bem simples de ser inserido dentro do relatório,
basta apenas arrastar do Formula Field para qualquer sessão do relatório.
Nosso relatório CrystalReportRelatorio1 tem um campo com o preço unitário de cada
produto (UnitPrice) e outro campo que tem a quantidade de venda de cada produto
(Quantity). Para complementar nosso relatório precisamos de um novo campo para
calcular o valor total de venda de cada produto dentro de uma ordem.
Para inserimos o novo campo no relatório iremos clicar com botão direito do mouse em
Formula Field na Field Explorer e assim inserir um novo item chamado de “VtItem”, na
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 26/43
sequência irá abrir uma nova janela chamada Editor de formulas. A Figura 9 mostra o
código necessário para calcular o valor total por produto.
Com a janela editor de fórmulas podemos criar campos calculados, campos de expressão
SQL, Fórmulas de seleção e fórmulas de formatação, para criar novos campos com
fórmulas têm disponível a sintaxe Crystal e Base.
Figura 9. Editor de fórmulas
É importante notar que na janela de editor de fórmulas temos à disposição para criar
novas fórmulas todos os campos referentes às tabelas selecionadas da base de dados,
os novos campos calculados criados, funções e operadores.
Dando sequência à alteração no relatório, agora iremos arrastar o novo campo criado
“VtItem” para dentro da sessão detalhes do relatório, ao lado direito do campo
“Discount”.
Se clicarmos na guia Main Report Priview para visualizar o relatório, notaremos que agora
temos o valor total dos itens vendidos por produto, porém não está sendo possível ver
as casas decimais, assim sendo, devemos acomodar os campos dentro da sessão
detalhes para que possa caber tudo dentro do relatório.
Inserindo totalizadores por grupo e geral norelatório
Agora vamos agregar mais valor ao relatório inserindo totais nos agrupamentos do
relatório e inserindo um total geral no final do relatório.
Para realizar a análise de um relatório é necessário que o mesmo contenha campos para
representar valores acumulados e totais, podendo também ter campos para fazer a
contagem do total de registros do relatório geral ou por agrupamento.
Para iniciarmos as alterações no relatório vamos fazer uma cópia do arquivo
CrystalReportRelatorio1 e renomear a cópia para CrystalReportTotais. O segundo passo
é criar os novos campos que irão somar os valores totais, para isso usaremos o recurso
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 27/43
Running Total Fields, disponível na Field Explorer.
O primeiro campo que iremos inserir é o total para o agrupamento de ordens, que soma
a quantidade de itens dos produtos representados pela coluna “Quantity” do relatório.
Devemos então clicar com o botão direito do mouse no Running Total Fields localizado na
Field Explorer e depois clicar em new para inserir um novo item. Agora temos na tela uma
nova janela chamada “Cria Campo de Total acumulativo”, conforme apresentado na
Figura 10. Se analisarmos esta tela, temos à esquerda todos os campos do nosso
relatório e todos os campos que selecionamos na base de dados, ou seja, temos todos
os campos das tabelas selecionadas no assistente de relatório. Neste momento podemos
colocar um total no relatório de um determinado campo da base de dados que ainda não
se encontra no layout do relatório. Agora iremos seguir os passos abaixo para configurar
o primeiro campo, conforme sequência descrita na Figura 10.
Figura 10. Tela de configuração campo acumulativo
1. Seguindo os passos descritos na Figura 10, a primeira coisa que devemos fazer é
definir um nome para o primeiro campo total, que neste caso chamaremos de
“TotQteGrupo2”. O nome para o campo deve dar a ideia de que mesmo está somando,
sendo assim, temos “Tot” de total, “Qte” de quantidade e “Grupo2” para informar que o
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 28/43
mesmo pertence ao GroupFooterSession2.
2. No segundo passo devemos selecionar um dos campos do relatório, campo fórmula
ou campo de algumas das tabelas selecionada da base de dados. Para este exemplo
iremos selecionar o campo “OrderDetails.Quantity” e definir como campo a ser
resumido.
3. No passo de número três devemos informar o tipo de resumo que queremos obter.
Temos diversas opções como soma, média, máximo, mínimo, contagem e outras
possibilidades de resumo; para o nosso relatório devemos selecionar a opção
soma.
4. Neste passo devemos definir o tipo de avaliação para realizar a soma. Aqui iremos
selecionar a opção para cada registro. A observação importante a respeito do tipo
de avaliação é que temos quatro opções para selecionar, são elas;
· Para cada registro: irá somar registro a registro do relatório
· Na alteração do campo: esta opção irá avaliar apenas quando tiver alteração no valor do
registro, ou seja, se o valor exibido não se repetir, o mesmo não irá realizar a soma,
contagem ou outra forma de avaliação selecionada.
· Na alteração do grupo: esta opção é mesma da anterior, porém aplica-se no nível de
grupo.
· Utilizar uma fórmula: esta opção é bem interessante, pois temos a possibilidade de criar
uma fórmula personalizada para ser avaliada de acordo com a necessidade.
5. No quinto passo devemos selecionar uma opção para reconfigurar a avaliação. Neste
caso do iremos zerar a soma ao final de cada grupo.
6. O sexto e último passo é definir ao final de qual campo, grupo ou fórmula o
avaliador será reconfigurado, aqui iremos selecionar o Grupo2.
Agora temos um novo campo para totalizar a quantidade da coluna “Quantity” do
relatório, devemos arrastar o novo campo “TotQteGrupo2” do Running Total Fields para
a sessão GroupFooterSection2, abaixo do campo “Quantity”, dentro da sessão do grupo
de ordens.
Vejamos que na guia Main Reports Preview temos a visualização do nosso relatório com o
totalizador funcionado de forma correta. Devemos agora repetir este passos e criar dois
novos totalizadores para as colunas “Discount” e “VtItem”, lembrando que total da
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 29/43
coluna “VtItem” é criado com a própria fórmula criada para este campo calculado.
A Figura 11 mostra como fica o relatório como a inserção dos três totalizadores no
nosso relatório de exemplo.
abrir imagem em nova janela
Figura 11. Relatórios com totalizadores
Formatando o relatório
Agora é hora de formatar o relatório para ficar mais apresentável, pois um bom relatório
para o usuário final nem sempre é aquele que expõe quantidades enormes de dados, ele
também deve ter um layout agradável para o usuário que irá analisá-lo. Neste ponto é
importante definir a formatação dos campos e separar parte do relatório com linhas e
tabelas entre as sessões do mesmo.
Para formatar nosso relatório iremos usar vários recursos do nosso SAP Crystal Reports,
devemos então seguir alguns os passos descritos a seguir:
1. Primeiramente iremos fazer uma cópia do arquivo de relatório CrystalReportTotais e
definir um nome da cópia de CrystalReportFormat, na qual passaremos a trabalhar.
2. Agora iremos inserir um título em nosso relatório. Devemos selecionar um
componente Text Object da guia Crystal Reports da Toolbox e arrastá-lo para Section1,
que define o cabeçalho do relatório. Com o componente já na área do relatório, iremos
dar dois cliques e definir um título do relatório para “RELATÓRIO DE VENDAS”. Na barra
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 30/43
de ferramentas definimos a fonte para tamanho 16, bold (negrito) e com a opção Center
da barra de ferramentas definimos que o texto do título deve ficar alinhado ao centro.
Percebemos que o tamanho do texto não coube no Text Object e nem na Section1,
assim sendo, devemos selecionar a Section2 e passar o mouse até aparecer duas setas
(para cima e para baixo) com uma linha no meio, esta opção nos possibilitará
redimensionar o tamanho da Section1, a Section2 um pouco para baixo. Feito isso, agora
precisamos acomodar o texto dentro o objeto Text Object, selecionando o mesmo e
arrastando os pontos que aparecem em suas extremidades, de forma que o texto
dentro dele fique totalmente visível.
3. Temos um título definido para nosso relatório, porém o mesmo é exibido apenas na
primeira página do relatório, pois está dentro da sessão cabeçalho. Para descrever que
tipo de relatório de vendas consta em nosso relatório, iremos criar um subtítulo para o
relatório com o nome de “VENDAS POR REGIÃO”, para isso iremos inserir outro Text
Object dentro da Section2, posicionando abaixo do título e ao lado do campo data. Com
o subtítulo dentro do cabeçalho da página, o mesmo será exibido em todas as páginas
do relatório. Depois iremos aplicar a mesma formatação descrita no passo 2 no segundo
Text Object e modificar somente o nome para o subtítulo do relatório.
4. Agora precisamos aplicar algumas formatações nos campos estáticos da Section2, que
representam o cabeçalho da página para cada coluna do relatório. Então devemos
selecionar todos os campos estáticos segurando a tecla Ctrl e clicando em todos os
campos para ficarem selecionados, depois clicar com o botão direito do mouse em um
dos campos estáticos e clicar na opção Format Multeple Objects, que será exibida no
menu de contexto. Agora temos a tela de Formatação do Editor SAP Crystal Reports, na
tela temos algumas guias para auxiliar na formatação. A Figura 12 mostra duas guias
que iremos utilizar para formatar os campos de cabeçalho do relatório. Na primeira guia
“moldura” iremos alterar as propriedades estilo de linha, cor da moldura e cor de fundo.
Já na segunda guia “fonte” iremos alterar apenas o estilo para negrito. Todas as
formações estão destacadas em vermelho na Figura 12. Devemos observar que a
medida que alteramos as propriedades de formatação, temos na parte inferior a
demonstração de como vai ficar o resultado com a aplicação da formatação.
5. No cabeçalho do segundo agrupamento (GroupHeaderSection2) não temos campos
estáticos para mostrar o nome de cada coluna com dados, assim, a medida que se
visualiza os dados mais na parte inferior do relatório, não é possível saber de qual campo
se trata a informação, devido os campos estáticos das colunas serem exibidos apenas no
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 31/43
cabeçalho da página. Assim sendo, vamos recortar os cabeçalhos de ShipRegion até
VtItem e colar dentro da sessão GroupHeaderSection2, pois os cabeçalhos de coluna
serão exibidos para cada grupo no agrupamento de ordens. Temos que selecionar todos,
recortar e clicar no canto direto antes de colar, este procedimento irá fazer o alinhamento
correto de todos os campos. Uma observação importante é que antes de colar você deve
deletar o único campo do cabeçalho do segundo agrupamento, pois este campo mostra o
número da ordem e esta informação já consta nos detalhes do relatório.
6. Nosso relatório está ficando com uma nova aparência, então agora iremos aplicar a
mesma formatação para os campos da sessão detalhes e rodapé do segundo
agrupamento. É importante nos campos que representam os dados da sessão detalhes
não colocar negrito, cor de fundo e que os mesmos tenham apenas molduras com linhas
simples. Para ganhar tempo em repetir uma formatação para demais campos, podemos
selecionar um campo já formatado e usar a ferramenta Format Painter, disponível na
barra de ferramentas. Assim é só clicar em outros campos nos quais se deseja aplicar os
mesmos formatos, mas esta técnica só se aplica em campos de mesmo tipo.
Agora que o relatório já está formatado, devemos visualizar o mesmo na guia Main
Report Preview, conforme mostra a Figura 13.
abrir imagem em nova janela
Figura 12. Configuração de formatação de campos
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 32/43
abrir imagem em nova janela
Figura 13. Relatório formatado
Criando um gerenciador de relatórios com C#
Até o momento criamos alguns relatórios e visualizamos o resultado no Main Report
Preview, então agora temos que disponibilizar estes relatórios para o usuário de forma
amigável, através de uma interface gráfica como o Windows Forms, WPF ou em uma
página ASPNET. Em nosso exemplo faremos um gerenciador para o usuário selecionar
um dos relatórios que criamos e poder visualizar e navegar no mesmo através do
componente CrystalReportViewer, disponível na Toolbox.
O primeiro passo é selecionar o Form1 criado automaticamente pelo Visual Studio no
momento em que foi criado um projeto do tipo Windows Forms, e com o mesmo
selecionado alterar seu título através da propriedade Text, inserindo “Gerenciador de
Relatórios”. Em seguida definimos a propriedade Size para 1124; 720, para alterar a
altura e largura.
Para que seja possível visualizar os relatórios no formulário, iremos arrastar o
componente CrystalReportViewer da Toolbox para dentro do Form1. Neste momento
ainda não será possível visualizar nenhum relatório no CrystalReportViewer, pois ainda
precisamos vincular um relatório ao mesmo, o que é possível através da propriedade
ReportSource, porém em nosso exemplo não iremos vincular o relatório desta maneira.
A Listagem 1 mostra o código inserido no evento Load do Form1 que trata de definir a
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 33/43
propriedade Dock do objeto crystalReportViewer1 para None, para que o objeto não
preencha toda a área do Form1. A segunda linha de código altera posição Y do objeto
crystalReportViewer1 dentro do From1, e por fim, na última linha do evento Load,
definimos a altura e largura do objeto crystalReportViewer1.
Com estas configurações teremos um espaço na parte superior do formulário para inserir
novos componentes para selecionar e executar os relatórios.
As mesmas configurações realizadas na Listagem 1 em tempo de execução também
podem ser feitas via IDE através das propriedades do objeto crystalReportViewer1,
porém, poderá haver situações quando se manipula relatórios dinamicamente em que
teremos de fazer isso via código.
Listagem 1. Configurando objeto crystalReportViewer1
private void Form1_Load(object sender, EventArgs e)
{
this.crystalReportViewer1.Dock = System.Windows.Forms.DockStyle.None;
this.crystalReportViewer1.Location =
new System.Drawing.Point(0, 90);
this.crystalReportViewer1.Size =
new System.Drawing.Size(1108, 626);
}
Com o visualizador de relatório pronto, agora é hora de inserirmos alguns componentes
da Toolbox dentro do Form1 para fazer o gerenciamento dos relatórios disponíveis na
aplicação, de forma que estes possam ser selecionados de forma interativa pelo usuário e
então visualizados.
Iremos adicionar um componente GroupBox dentro do formulário e configurar algumas
propriedades, conforme descrito a seguir.
· Name: gpbRelatorios;
· Text: Lista de relatórios;
· Location: 0;0;
· Size: 253; 84.
Agora iremos adicionar dentro do GroupBox três RadioButtons para representar os três
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 34/43
relatórios que criamos anteriormente, dessa forma o usuário terá a opção de selecionar
qualquer um dos relatórios para visualizar no CrystalReportViewer, porém, poderá
visualizar apenas um de cada vez conforme a seleção.
Os três RadioButtons devem ser inseridos no GroupBox um abaixo do outro, e iremos
aplicar as seguintes configurações em suas propriedades:
· RadioButton 1
o Name: rdbCrystalReportFormat;
o Text: Relatório CrystalReportFormat.
· RadioButton 2
o Name: rdbCrystalReportRelatorio1;
o Text: Relatório CrystalReportRelatorio1.
· RadioButton 3
o Name: rdbCrystalReportTotais;
o Text: Relatório CrystalReportTotais.
Para gerar a visualização do relatório iremos inserir um Button no Form1 e depois
codificar o evento click do botão. O Button deve ser configurado da seguinte forma:
· Name: btnGerarRelatorio;
· Text: Visualizar Relatório;
· Location: 260; 60;
· Size: 114; 23.
É hora de codificar o evento click do botão para que possamos exibir o relatório de
acordo com a seleção feita no GroupBox pelo o usuário. Na Listagem 2 temos o código
necessário para mostrar o relatório na tela.
Listagem 2. Código para gerar o relatório
01 private void btnGerarRelatorio_Click(object sender, EventArgs e)
02 {
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 35/43
03 ReportDocument objCrystalDoc = new ReportDocument();
04
05 string relSelecionado;
06
07 if (rdbCrystalReportFormat.Checked == true)
08 {
09 relSelecionado = "\\CrystalReportFormat.rpt";
10 }
11 else if (rdbCrystalReportRelatorio1.Checked == true)
12 {
13 relSelecionado = "\\CrystalReportRelatorio1.rpt";
14 }
15 else
16 {
17 relSelecionado = "\\CrystalReportTotais.rpt";
18 }
19
20 objCrystalDoc.Load(Application.StartupPath + relSelecionado);
21 this.crystalReportViewer1.ReportSource = objCrystalDoc;
22 this.crystalReportViewer1.Refresh();
23 }
O código da Listagem 2 mostra a criação de uma instância da classe ReportDocument
para carregar os relatórios .rpt. Na sequência é criada uma variável para armazenar o
nome do arquivo do relatório; depois tem um bloco if-else para verificar qual relatório foi
selecionado e atribuir o nome do deste à variável relSelecionado; em seguida é carregado
o relatório através do objeto ReportDocument; e por fim é informada a fonte de dados
para o visualizador de relatório crystalReportViewer1, dando um refresh para atualizar o
visualizador de relatório e mostrar o mesmo na tela.
Na Listagem 2 é importante ressaltar o comando Application.StartupPath, pois o mesmo
recupera o diretório atual do executável da aplicação, e para que os relatórios sejam
carregados de forma correta, os arquivos correspondentes a eles (os .rpt) devem estar
no mesmo diretório do executável.
Criando um relatório com parâmetros
Uma boa opção durante a criação de um relatório é possibilitar que o usuário possa
interagir com o ele no momento em que irá gerá-lo, ou seja, nem sempre um relatório irá
suprir as necessidades da busca por informação, pois há momentos em que se deseja
obter informações detalhadas ou resumidas, seja em um intervalo de data, uma
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 36/43
determinada venda ou em uma busca das informações de um cliente. Para facilitar a vida
do usuário, temos que disponibilizar meios para que ele possa parametrizar o relatório
antes da geração do mesmo, informando parâmetros como datas para filtrar uma
informação em um intervalo de tempo, um código para obter informação de produto em
uma só página e realizar uma impressão rápida, dentre diversos tipos de parâmetros que
possam permitir ao usuário interagir com o relatório e obter a informação que precisa.
Um relatório bem elaborado com boas opções de parâmetros às vezes evita a
necessidade de criar novos relatórios futuramente, porém, um relatório com uma grande
quantidade de parâmetros pode levar ao não uso do mesmo, devido ao usuário sentir
dificuldade para realizar o preenchimento de todos os parâmetros (que pode acabar não
sendo o relatório que se esperava devido ter marcado algum parâmetro errado).
Quanto maior for a quantidade de parâmetros em um relatório, maior será o filtro para se
obter uma determinada informação, por consequência, também será maior o tempo para
gerar e carregar o relatório. Neste ponto devem ser avaliadas e verificadas as condições
de hardware para processar os relatórios solicitados e devem ser analisadas a
possibilidades de um servidor independente para relatórios, isso depende muito da
necessidade e quantidade de usuários gerando relatórios ao mesmo tempo no sistema.
Para exemplificar a criação de um relatório com parâmetros iremos copiar o arquivo do
relatório CrystalReportFormat e nomear o novo como CrystalReportParametro, então
passaremos a trabalhar nessa nova cópia.
Com SAP Crystal Reports podemos trabalhar com parâmetros para relatório de forma
muito fácil através do Parameter Fields, opção com a qual podemos inserir parâmetros
estáticos e dinâmicos no relatório.
Para mostrar o uso de parâmetros, iremos adicionar dois parâmetros estáticos ao
relatório, onde o usuário terá a opção de selecionar apenas uma determinada Order para
o segundo agrupamento de dados, ou selecionar apenas um determinado produto para
que possam ser exibidas todas as ordens em que mesmo consta, de acordo com o
agrupamento do relatório.
Primeiramente criaremos os dois parâmetros para o relatório através do Field Explorer >
Parameter Fields e os chamaremos de parametroGrupoOrder e
parametroRegistroProduto. Observe como deve ficar a configuração do primeiro
parâmetro na Figura 14, o segundo deve seguir a mesma configuração, modificando
apenas o nome para parametroRegistroProduto.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 37/43
abrir imagem em nova janela
Figura 14. Configuração de parâmetro para relatório
Na tela de configuração de parâmetro exibida na Figura 14 foi primeiramente definido o
nome do parâmetro, e depois o tipo de dado, que deve ser do mesmo tipo da coluna na
tabela da base de dados. Em nosso caso, OrderID e ProductId são do tipo int, estão
devemos configurar o parâmetro do relatório para receber um valor numérico.
Um parâmetro em um relatório no SAP Crystal Reports pode receber dados de vários
tipos, como booleano, data, data hora, hora, moeda, número e sequência de caracteres.
Após ter definido os parâmetros do relatório, é hora de definir como o relatório irá usar
esses valores para filtrar os dados.
O SAP Crystal Reports nos possibilita definir fórmulas no nível de grupo e registro, e
como nosso relatório possui um grupo, e dentro do grupo temos os registros a serem
exibidos, então iremos definir uma fórmula para filtrar uma determinada ordem pelo
campo OrderID a nível de grupo, e outra fórmula a nível de registro para filtrar um
produto pelo campo ProductID. Dessa forma iremos recuperar o código da ordem ou do
produto passado via parâmetro e utilizar os valores dentro das fórmulas para filtrar dos
dados e gerar o relatório, sendo que o usuário só irá poder filtrar uma ordem ou um
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 38/43
produto por vez.
Para inserir a primeira fórmula no nível de grupo iremos ao menu Crystal Reports >
Report > Selection Formula > Group e logo irá abrir a janela do editor de fórmula com a
seleção de grupo já previamente feita. Devemos expandir a opção de campos do relatório
e selecionar o campo Orders.OrderId para compor a fórmula. Na sequência, dentro da
janela operadores, iremos inserir o operador de comparação igual e por último selecionar
parâmetro parametroGrupoOrder que encontra-se na janela campos do relatório, para
finalizar a fórmula a nível de grupo.
Com a janela do editor de fórmula ainda aberta, iremos inserir a fórmula para filtrar o
produto no nível de registro. Devemos apenas selecionar a opção Seleção de Registro,
localizada à esquerda do editor de fórmula. Caso não tenhamos a janela aberta, podemos
ir ao menu Crystal Reports > Report > Selection Formula > Record e logo irá abrir
novamente o editor com a seleção de registro já pronta para receber a fórmula. A
fórmula para selecionar um determinado produto deve seguir o mesmo molde da seleção
de grupo, onde iremos alterar apenas Orders.OrderID para Products.ProductID e
parametroGrupoOrder para parametroRegistroProduto.
Com as fórmulas previamente definidas, precisamos colocar em cada fórmula criada uma
estrutura de controle if-else disponível nos operadores para fórmulas. Esta estrutura de
if-else irá verificar se o usuário está gerando um relatório com filtro para uma ordem ou
para um produto.
As Listagens 3 e 4 mostra como devem ficar as fórmulas para seleção de grupo e
registro do relatório, respectivamente. As fórmulas verificam se o valor de cada
parâmetro é diferente de zero, se for, realizam o filtro, caso contrário, listam todos os
registros válidos (OrderID > 0 e ProductID > 0).
Listagem 3. Fórmula para seleção do grupo
if((?parametroGrupoOrder) <> 0)
then
((Orders.OrderID) = (?parametroGrupoOrder))
else
((Orders.OrderID) > 0)
Listagem 4. Fórmula para seleção do registro
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 39/43
if((?parametroRegistroProduto) <> 0)
then
((Products.ProductID) = (?parametroRegistroProduto))
else
((Products.ProductID) > 0)
Agora precisamos inserir alguns objetos no Form1 para que o usuário possa passar
como parâmetro para o relatório o número de uma ordem, ou um código de um produto
especifico. Para isso, iremos colocar alguns componentes no Form1, conforme segue;
· GroupBox
o Name: gpbParametro;
o Text: Selecione o Parâmetro;
o Location: 379; 0;
o Size: 261; 83;
Em seguida adicionaremos dentro do GroupBox dois RadioButton para que o usuário
possa selecionar o tipo de filtro que deseja no relatório, por ordem ou produto, como
descrito a seguir;
· RadioButton 1
o Name: rdbOrdem;
o Text: Por ordem.
· RadioButton 2
o Name: rdbProduto;
o Text: Por produto
Também iremos adicionar dentro do GroupBox um Textbox para recuperar o valor
digitado pelo o usuário, neste TextBox o usuário tanto pode informar o número da
ordem como o código do produto, de acordo com o RadioButton selecionado;
· Textbox 1
o Name: txtParametro.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 40/43
Ainda precisamos adicionar dentro do GroupBox gpbRelatorios um RadioButton para
representar o último relatório criado, o CrystalReportParametro. Vejamos na sequência a
configuração do último RadioButton:
· RadioButton 4
o Name: rdbCrystalReportParametro;
o Text: Relatório CrystalReportParametro.
Com todos os componentes necessários no Form1, se executarmos o gerenciador de
relatório, ele deve ficar semelhante à Figura 15.
abrir imagem em nova janela
Figura 15. Tela do gerenciador de relatórios
Agora que temos a parte visual do gerenciador de relatório pronta, precisamos fazer
algumas modificações no código do evento click do botão que gera o relatório
selecionado no gerenciador de relatórios.
A Listagem 5 mostra como deve ficar a nova implementação de código do evento click
do botão do gerenciador de relatório. Temos duas regions que devem ser destacadas, a
primeira é a “seleção do relatório”, onde foi modificada a estrutura do if-else para a
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 41/43
inserção do novo relatório CrystalReportParametro. A segunda region “verificar relatório
com parâmetro” verifica se foi selecionado o relatório CrystalReportParametro, em caso
positivo, é verificado qual foi o tipo de parâmetro selecionado, ordem ou produto, e
então é setado o parâmetro na instância do ReportDocument, através do método
SetParameterValue, que recebe dois valores como parâmetro, o primeiro é o nome do
parâmetro no relatório e o segundo é o valor a ser repassado.
Listagem 5. Código para geração do relatório
01 private void btnGerarRelatorio_Click(object sender, EventArgs e)
02 {
03 ReportDocument objCrystalDoc = new ReportDocument();
04
05 string relSelecionado;
06
07 #region Seleção do relatório
08 if (rdbCrystalReportFormat.Checked == true)
09 {
10 relSelecionado = "\\CrystalReportFormat.rpt";
11 }
12 else if (rdbCrystalReportRelatorio1.Checked == true)
13 {
14 relSelecionado = "\\CrystalReportRelatorio1.rpt";
15 }
16 else if (rdbrdbCrystalReportTotais.Checked == true)
17 {
18 relSelecionado = "\\CrystalReportTotais.rpt";
19 }
20 else
21 {
22 relSelecionado = "\\CrystalReportParametro.rpt";
23 }
24 #endregion
25
26 objCrystalDoc.Load(Application.StartupPath + relSelecionado);
27
28 #region Verificar relatório com parâmetro
29 if (relSelecionado == "\\CrystalReportParametro.rpt")
30 {
31 if (rdbOrdem.Checked == true)
32 {
33 objCrystalDoc.SetParameterValue
("parametroGrupoOrder",
int.Parse(txtParametro.Text));
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 42/43
34 objCrystalDoc.SetParameterValue
("parametroRegistroProduto", 0);
35 }
36 else
37 {
38 objCrystalDoc.SetParameterValue
("parametroRegistroProduto",
int.Parse(txtParametro.Text));
39 objCrystalDoc.SetParameterValue
("parametroGrupoOrder", 0);
40 }
41 }
42 #endregion
43
44 this.crystalReportViewer1.ReportSource = objCrystalDoc;
45 this.crystalReportViewer1.Refresh();
46 }
Novamente já é possível executar o gerenciador e testar a visualização dos relatórios.
Conclusão
Este artigo tratou de mostrar o conceito introdutório para criação de relatórios com SAP
Crystal Reports, mostrando uma das diversas formas de criar relatórios e disponibilizar
em um sistema através de um gerenciador de relatório simples. Porém, é importante
frisar que esta poderosa ferramenta geradora de relatório vai muito além dos exemplos
aqui mostrados, existem muitos recursos que devem ser explorados, possibilitando a
criação de relatórios de forma rápida, fácil e integrada a uma solução desenvolvida com a
plataforma .NET e linguagem de programação C#.
É importante destacar que podemos criar relatórios com gráficos de diversos tipos, como
de linhas, pizza e ainda podemos criar um relatório com SAP Crystal Reports em cima um
DataSet disponível em uma aplicação .NET. Com este recurso é possível criar relatórios
dinamicamente direto na programação com as bibliotecas do Crystal disponível para a
plataforma .NET.
O conhecimento adquirido neste artigo serve como base para você iniciar uma exploração
mais detalhada dos recursos do SAP Crystal Reports, podendo disponibilizar seus
relatórios em aplicações WPF, ASP.NET e até mesmo disponibilizar através de um serviço
WebService.
28/03/14 Crystal Reports: Criando relatórios com SAP
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29700 43/43
Trabalhar na criação de relatórios não é uma tarefa fácil inicialmente, mas à medida que
se vai ganhando novos conhecimentos e praticando bastante, conseguimos ter um
domínio maior e é neste ponto que desperta a criatividade para resolução de problemas e
criação de relatórios robustos, que atendam a necessidades do usuário. Isso sem
sombra de dúvida é a parte mais gratificante para um desenvolvedor.
Links
Download Crystal Reports
http://scn.sap.com/docs/DOC-35074
Download Nortwind
http://www.microsoft.com/en-us/download/details.aspx?id=23654
Site SAP Crystal Reports para desenvolvedores
http://global.sap.com/brazil/solutions/sap-crystal-
solutions/developers/index.epx
Madson Aguiar Rodrigues
Formação acadêmica em Análise e Desenvolvimento de Sistemas e Pós-Graduação em Engenharia de
Software cursando atualmente Especialização de Tecnologias para aplicações Web. Trabalha com
desenvolvimento de software há cinco anos co [...]