Categorias
crystal reports relat??rio

Gerando relat??rios com o Crystal Reports

O Crystal Reports ?? um componente que permite a cria????o de relat??rios personalizados de alto n??vel. Em substituto de relat??rios em HTML puro, ele fornece uma assist??ncia inovadora desde a cria????o at?? exporta????o. Para quem utiliza Java, h?? tamb??m uma vers??o espec??fica para a linguagem. Mostraremos abaixo como gerar um simples relat??rio buscando dados de uma tabela em banco usando C#.

Abra/Crie um projeto do tipo Web Site no Visual Studio e no Solution Explorer clique com o direito no diret??rio onde deseja criar o relat??rio. Escolha Add New Item e opte pelo template Crystal Reports (note que a extens??o de relat??rio do Crystal ?? .rtp). Nessa primeira tela escolha a primeira op????o conforme a figura abaixo:

Clique em OK. Expanda o n?? do Create New Connection e novamente expanda o OLE DB (ADO) para configura????o de conex??o (essa ?? a primeira conex??o com o banco para in??cio, depois mostraremos como usar para outro banco). Na configura????o do ADO, escolha o tipo de provider a ser utilizado (no caso optei pelo SQL Server, ent??o SQL Native Client) e d?? Next.

Agora, em Connection Information, informe os dados de conex??o.

Clique em Next e na ??ltima tela revise os dados. Se estiver tudo certo, clique em Finish. Voc?? voltar?? ?? tela anterior j?? com a configura????o realizada e o banco estar?? apto a selecionar os objetos. Procure qual objeto ir?? ser manipulado e exibido seus dados, podendo ser: uma tabela, um schema, uma view ou stored procedure. Clique no objeto desejado e, em seguida, clique no bot??o com a seta para direita conforme figura abaixo:

Clique em Next. Agora informe quais campos ir??o ser exibidos e escolha Next.

Na pr??xima tela, se precisar agrupar alguns campos, informe quais s??o. Se n??o precisar d?? apenas Next. Se o Crystal identificar que est?? trabalhando com n??meros, ele cria um passo adicional que ?? a op????o de inserir gr??ficos. Outra tela que ?? exibida ?? a de Filtros. Se for ter filtros, informe-os. Caso contr??rio d?? apenas Next. Ou seja, as duas ??ltimas telas s??o par??metros opcionais logo, se n??o desejar configur??-los, d?? Next duas vezes. O ??ltimo passo ?? escolher o estilo. Opte pelo mais parecido que quer e d?? Finish.

Basicamente seu relat??rio est?? pronto, bastando ajustes da posi????o dos campos, design, cabe??alho, etc. Em Field Explorer, cont??m as principais funcionalidades para f??rmulas e c??lculos avan??ados bem como a adi????o de novos campos. Como estamos elaborando um relat??rio simples, vamos parar por a??. Para ver um preview de como estar?? seu relat??rio com os dados, clique em Main Report Preview. Agora vamos ver como chamar pelo ASP.NET (C#).
Adicione uma p??gina Impressao.aspx e nele adicione um objeto CrystalReportViewer que automaticamente ir?? ser registrado o assembly na p??gina (puxando do ToolBox ele insere automaticamente). Se prefer??vel configure alguns atributos do objeto como remo????o da logo da BO, tema, etc. No code-behind, adicione os seguintes namespaces:

using CrystalDecisions.ReportSource;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
 
E para exibir os dados do relat??rio utilize o seguinte c??digo:
 
DataSet ds = new DataSet();
// Antes, fa??o uma consulta no banco e jogo no DataSet para ser usado logo abaixo
ReportDocument relatorio = new ReportDocument();
relatorio.Load(Server.MapPath(“Relatorio.rpt”));
relatorio.Database.Tables[0].SetDataSource(ds.Tables[0]);
// Esse ?? Viewer que puxamos antes
CrystalReportViewerRelatorio.ReportSource = relatorio;
CrystalReportViewerRelatorio.DataBind();
 
Pronto! Seu relat??rio ser?? exibido…
 

 
Agora vamos aos problemas:
 
1) Fiz todo o processo mas ao exibir o relat??rio est?? pedindo login e senha do SQL Server
 
Se estiver usando DataSet, veja que s?? pude passar uma tabela por vez usando ds.Tables[0] e n??o apenas ds. Se quiser passar v??rias tabelas crie um DataSet tipado no App_Code ou informe uma a uma no atributo Database.
 
2) As imagens dos bot??es do relat??rio n??o est??o aparecendo e ao clicar n??o funciona nada
 
Ao ser colocado em produ????o, verifique se o Crystal Reports est?? instalado corretamente na m??quina. Veja se a pasta wwwrootaspnet_clientsystem_web cont??m a pasta CrystalReportWebFormViewer (depois da pasta system_web vem a vers??o do framework – exemplo 2_0_50727 – e em seguida vem ela). Copie a pasta aspnet_client e adicione na raiz de sua aplica????o.
 
3) Ao exibir o relat??rio est?? aparecendo o erro: N??o foi poss??vel carregar arquivo ou assembly ‘System.Web.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ ou uma de suas depend??ncias. A defini????o do manifesto do assembly localizado n??o corresponde ?? refer??ncia do assembly. (Exce????o de HRESULT: 0x80131040)
 
Fa??a os procedimentos informados nesse post.
 
4) Depois que ?? exibido o relat??rio, ao clicar no bot??o de imprimir ou exportar ou qualquer outro bot??o, n??o executa nenhum dos processos que deveria fazer
 
Se estiver usando ASP.NET AJAX e o CrystalReportViewer estiver dentro de um UpdatePanel, remova-o. Pois, ao clicar em desses bot??es, ?? feito um PostBack na p??gina (al??m de tentar abrir uma janela pop-up) e o Crystal n??o funciona adequadamente quando utiliza o AJAX.
 
5) Ao tentar exibir o relat??rio, ocorre o seguinte erro: O inicializador de tipo de ‘CrystalDecisions.CrystalReports.Engine.ReportDocument’ acionou uma exce????o
 
Reinstale o Crystal Reports ou tente as solu????es sugeridas nesse post.
 
6) Minhas imagens e/ou gr??ficos n??o est??o aparendo ao exibir o relat??rio (fica aquele X de imagem n??o carregada) ou ficam distorcidas/baixa resolu????o
 
Se for uma imagem que est?? sendo inserida do disco (que voc?? tem no computador e est?? inserindo atrav??s de Insert > Picture) verifique o formato dessa imagem (prefer??vel JPG ou BMP) e as cores utilizadas bem como efeitos (fundo transparente, camadas). Quanto mais simples a imagem for, melhor ser?? sua visualiza????o. Se apesar de tudo ainda n??o estiver aparecendo, verifique no web.config se h?? as seguintes entradas:

  1. Em system.web > httpHandlers:

    <add verb=”GET” path=”CrystalImageHandler.aspx” type=”CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304″/>
    <add verb=”*” path=”GenerateImage.ashx” type=”GenerateDynamicImage”/>
     

  2. E em system.webServer > handlers:

    <add name=”CrystalImageHandler.aspx_GET” verb=”GET” path=”CrystalImageHandler.aspx” type=”CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304″ preCondition=”integratedMode”/>

7) Meu relat??rio tem mais de 2 p??ginas mas s?? fica exibindo 2/2+ quando clico em avan??ar

Coloque todo o processo de gera????o do relat??rio dentro de Page_Init ou inv??s de Page_Load.

8) Meu relat??rio n??o exibe, a princ??pio, a quantidade total de p??ginas. Fica exibindo 1/1+…

O Crystal faz isso para n??o ter de renderizar todo o relat??rio e sobrecarregar, ent??o fa??a o seguinte artif??cio depois de dar o Bind():

CrystalReportViewerRelatorio.ShowLastPage();
CrystalReportViewerRelatorio.ShowFirstPage();

Ou seja, vou rapidamente para a ??ltima p??gina e volto apenas para o Crystal renderizar a ??ltima p??gina e saber quantas temos ao todo.

5 respostas em “Gerando relat??rios com o Crystal Reports”

7) Meu relat??rio tem mais de 2 p??ginas mas s?? fica exibindo 2/2+ quando clico em avan??ar

Coloque todo o processo de gera????o do relat??rio dentro de Page_Init ou inv??s de Page_Load.

Fiz o descrito, porem ele pede pra Inserir Valores, e depois Pede dados da conex??o,
informando a senha, como n??o fazer aparecer isso?

An??nimo, use DataTable ao inv??s de DataSet e quanto ?? p??gina, ap??s o Load do relat??rio, avance para a ??ltima p??gina e volte ?? primeira para ser contabilizado a quantidade total. ?? um bug do Crystal Report, mas funciona.

Deixe um comentário para Unknown Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *