Professional Documents
Culture Documents
com/tag/crystal-reports/
Crystal Reports
Eu preenchi esta tabela com registros de Janeiro a Junho.Segue o script para a criao deste banco: create database CrystalFormulas go use CrystalFormulas go create table [dbo].SalesHeader ( SalesHeaderID int identity(10,1) not null, SalesDate datetime not null, Total money not null, constraint PK_SALES_HD primary key clustered(SalesHeaderID) )
go INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009D2C00000000 AS DateTime), 632.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009D1000000000 AS DateTime), 45.6500) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009CF100000000 AS DateTime), 65.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009D2C00000000 AS DateTime), 231.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009D1000000000 AS DateTime), 76.8900) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 235.7400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 874.3600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009D1000000000 AS DateTime), 98.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 234.8400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 121.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 738.8900) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 376.1000) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 473.9800) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 46.9800) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 87.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 234.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 334.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 908.7000) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 23.6700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 45.8900) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 23.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 93.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 363.9800) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 63.2300) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES
( CAST(0x00009D2C00000000 AS DateTime), 574.0000) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 34.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 897.4600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 232.4300) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 121.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 88.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 34.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 87.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 22.4200) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 234.6600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 44.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 99.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 235.6500) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 34.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 232.6300) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D2C00000000 AS DateTime), 78.6700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D1000000000 AS DateTime), 46.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009CF100000000 AS DateTime), 34.8800) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 454.6500) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 452.6500) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 651.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 23.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 767.8900) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 25.7400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 84.3600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES
( CAST(0x00009D6900000000 AS DateTime), 985.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 24.8400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 21.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 78.8900) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 36.1000) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 73.9800) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 465.9800) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 873.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 23.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009D6900000000 AS DateTime), 34.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 808.7000) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 234.6700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 453.8900) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES (CAST(0x00009D4B00000000 AS DateTime), 232.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 937.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 36.9800) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 633.2300) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 57.0000) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 345.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 89.4600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 22.4300) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 21.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 885.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 343.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 879.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES
( CAST(0x00009D4B00000000 AS DateTime), 222.4200) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 24.6600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 404.7600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 996.5600) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 23.6500) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 344.5400) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 23.6300) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D8800000000 AS DateTime), 783.6700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D6900000000 AS DateTime), 462.8700) INSERT [SalesHeader] ( [SalesDate], [Total]) VALUES ( CAST(0x00009D4B00000000 AS DateTime), 348.8800) Voc pode rodar esse script no SQL Management Studio pra criar a tabela e inserir os registros. Voc pode usar Integrated Security quando for conectar ao banco ou criar um SQL Login.De qualquer forma voc precisa se lembrar qual mtodo voc escolheu quando estiver pronto pra se conectar ao banco,como definido nos passos abaixo.
11. Voc deve ver o banco listado abaixo do n OLE DB(ADO).Clique no sinal de expanso do banco para ver o schemas.Clique no sinal de expanso do dbo para ver as tabelas. 12. Clique na tabela SalesHeader e depois clique no boto > pra mover esta tabela para a lista de tabelas selecionadas para esse relatrio.
3. Agora iremos criar um formula field pra mostrar o trimeste de SalesDate.Clique com o direito no n Formula fields no Field Explorer e escolha New.Coloque quarter para o nome do formula field e clique no boto Use Editor.
1. O CR tem inumeras funes j prontas que voc pode usar nas suas prprias formulas.As funes esto listadas na seo de Functions do formula editor.Clique no sinal de expanso de Functions e depois clique no n de Date and time.Isso ir mostrar a lista de funes disponiveis para manipular datas.A que estamos procurando se chama DatePart.Se voc descer a barra de rolagem do Date and Time voc deve encontrar essa funo.Observe que as funes no esto em ordem alfabtica ento voc deve ir at o final da lista. 2. A funo DatePart tem 3 diferentes assinaturas.Clique-duplo na primeira assinatura e essa ir aparecer no corpo da frmula.
1. O primeiro parmetro para a funo DataPart o Intervalo.O intervalo pode ser year(yyyy),quarter(q),month(m),day(d),hour(h),minute(n),second( s),day of week (w) e week (ww).Coloque (q) ento o trimeste recuperado das datas. 2. O segundo parmetro a expresso de data que deve ser analisada.Esse o campo SalesData na tabela SalesHeader.O texto da formula deve se parecer com o seguinte: DatePart (q, {SalesHeader.SalesDate}) 1. Clique no boto Save and Close.A formula Quarter,ir agora aparecer no n de Formula fields no Field Explorer. 2. Arraste o campo para a Details Section.Clique no boto Main Report Preview pra mostrar o relatrio .Voc deve ver ou 1 ou 2 para o trimestre.
else quarter1 := quarter1 Isso cria uma variavel global chamada quarter1.O cdigo depois ento checa se a data est no primeiro trimestre.Se estiver ento adicionada para a variavel quarter1. 1. Clique no boto Save and Close 2. Clique no boto Main Report Preview pra mostrar o relatrio
1. Clique para voltar em Main report. 2. Crie um segundo formula field chamado Quarter2 e entre com o seguinte cdigo: Global NumberVar quarter2; if DatePart(q, {SalesHeader.SalesDate}) = 2 then quarter2 := quarter2 + ToNumber({SalesHeader.Total}) else quarter2 := quarter2 Salve a formula e arraste para a Details Section proximo do formula Quarter1 e clique no boto preview:
Note que o cdigo no est mostrando o total.Isso porque a variavel foi declara num escopo local e no global. 1. Clique para voltar para o design. 2. Clique com o direito no campo Quarter2 na Details Section e selecion Edit .Retire a palavra local antes da declarao da variavel.Por padro esta agora ser global.Clique em Save and close.De um preview no relatrio novamente.Desta vez voc ver o total para o 2 trimestre. 3. Clique para voltar para o design.Arraste os fields Quarter1 e Quarter2 para a seo Report footer do relatrio nas suas repectivas colunas. 4. Delete os fields Quarter1 e Quarter2 da Details Section. 5. Clique com o direito na Details Section e escolha Suppress (NoDrill-down) 6. Agora se voc rever o relatrio voc ver somente os totais.
Concluso
Formula Fields no crystal reports permitem voc manipular seus dados de vrias maneiras quando um simples SELECT no suficiente.A sintaxe bem simples de usar se voc j conhece C# ou VB.CR tambm tem inumeras funes j prontas que voc pode usar nas frmulas.Voc tambm pode usar loopings,como FOR e WHILE.Voc tambm pode achar o prximo valor ou o valor anterior de um field.O poder das formulas e a linguagem de script tremendo e permite a voc cobrir qualquer requerimento dos usuarios mais exigentes.
Criando o rodap
O ltimo passo no desenvolvimento do relatrio diconar o nmero da pgina na seo Page Footer: 1. Clique com o direito na seo Page Footer e selecione Insert Special Field Page N of M. 2. Arraste o campo para a seo Page Footer. 3. Deixe o campo da largura da pgina. 4. Clique com o direito no campo e selecione Format Object. 5. Na aba Common,mude o alinhamento horizontal para centered e clique OK. Se voc ver o relatrio agora,vai notar que o nmero da pgina reseta para 1 cada vez que o SalesOrderNumber muda.
1. Abra a pgina Default.aspx no VS.Adicione a seguinte declarao logo abaixo da tag Page,ou simplesmente arraste o controle Crystal Reports Viewer para a pgina: <%@ Register assembly=CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304 namespace=CrystalDecisions.Web tagprefix=CR %> Isso permite voc usar o controle Crystal Reports Viewer que vem com o VS. Adicione o seguinte cdigo entre as tags DIV:
Select a customer:<asp:DropDownList ID="ddlCustomer" runat="server"> </asp:DropDownList>
Isso adiciona um DropDownList que ser preenchido com a lista de Customers (clientes) no Page_Load da pgina.O boto preview ir buscar todos os dados do cliente selecionado e dar uma bind no relatrio. 1. Adicione os seguintes namespaces no code behind: using System.Data.SqlClient; using System.Configuration; using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; Adicione o seguinte cdigo no evento Page_Load: if (!IsPostBack) { SqlConnection cn = new SqlConnection( ConfigurationManager.ConnectionStrings["AdventureWorks"].Connection String); cn.Open();
SqlCommand cmd = new SqlCommand(SELECT DISTINCT LastName + , + FirstName AS Name, Person.Contact.ContactID + FROM Sales.SalesOrderHeader + INNER JOIN Person.Contact + ON Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID + ORDER BY LastName + , + FirstName, cn); SqlDataReader dr = cmd.ExecuteReader(); ddlCustomer.DataSource = dr; ddlCustomer.DataTextField = Name; ddlCustomer.DataValueField = ContactId; ddlCustomer.DataBind(); CrystalReportViewer1.Visible = false; } else { if (CrystalReportViewer1.Visible == true) { BindReport(); } } Esse cdigo carrega o DropDownList com os customers do banco.Voc precisa adicionar a ConnectionString do seu banco no Web.Config pra esse cdigo funcionar.Na seo AppSettings voc deve adicionar o seguinte: <connectionStrings>
<add name="AdventureWorks" connectionString="Data Source=YOURSERVER;User ID=aspalliance;Password=aspalliance;Initial Catalog=AdventureWorks;"/> </connectionStrings>
Esse cdigo assume que voc tenha um Login aspalliance com a senha aspalliance e as devidas permisses no banco.Seu SQL precisa estar configurado para o modo Mixed Authentication pros logins serem permitidos. Adicione o seguinte cdigo no evento de click do boto preview:
protected void btnPreview_Click(object sender, EventArgs e) { BindReport(); CrystalReportViewer1.Visible = true; } Esse cdigo chama o mtodo BindReport() e depois mostra o controle Report Viewer. Agora adicione os seguintes mtodos: private void BindReport() { ReportDocument report = new ReportDocument(); report.Load(Server.MapPath(Invoice.rpt)); SetTableLocation(report.Database.Tables); CrystalReportViewer1.ReportSource = report; report.DataDefinition.RecordSelectionFormula = {SalesOrderHeader.ContactID} = + ddlCustomer.SelectedItem.Value; } private void SetTableLocation(Tables tables) { ConnectionInfo connectionInfo = new ConnectionInfo(); connectionInfo.ServerName = @LTMTI30\SQL2008; connectionInfo.DatabaseName = AdventureWorks; connectionInfo.UserID = aspalliance; connectionInfo.Password = aspalliance; foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables) { TableLogOnInfo tableLogOnInfo = table.LogOnInfo; tableLogOnInfo.ConnectionInfo = connectionInfo; table.ApplyLogOnInfo(tableLogOnInfo); } } O primeiro mtodo cria a instncia da classe ReportDocument.Ela representa o relatrio que voc criou anteriormente e permite manipulalo em tempon de execuo.O mtodo SetTableLocation seta a table location de cada tabela do relatrio.De novo,isso assume que voc criado o Login aspalliance no SQL e tenha dado acesso a ele.A fonte (source) do Crystal Reports Viewer depois setada para o objeto do relatrio.Voc cria uma string simples como uma clausula where de comando SQL.Voc tem que usar {} em volta de campos referenciados do relatrio.
Voc pode rodar o relatrio agora.Se voc selecionar Abel,Catherine no DropDownList e clicar no boto preview,voc deve ver a seguinte pgina:
isso!Elaboramos nosso relatrio,nas Partes 1,2 e 3 e nesta ltima parte vimos como visualiza-lo na pgina .aspx. Espero que essa srie de posts tenha sido til pra quem est comeando com relatrios ,e que percebam que no nenhum bicho de 7 cabeas. Mais sobre o Crystal Reports com ASP.NET. At a prxima!
Publicado emmaro 22, 2010MarcadoASP.NETCrystal ReportsRelatrioComentriosNenhum Comentrio
depois da seo Group Footer.Quando voc adiciona um grupo no Crystal Reports,voc automaticamente tem uma seo Group Header e Group Footer Section.Voc pode formatar essas sees dinamicamente pra quebra de pgina,resetar o nmero da pgina,e muitas outras coisas.Para o nosso relatrio ns queremos quebrar a pgina,depois da sesso Group Footer,ento a prxima fatura comea na prxima pgina e ns queremos resetar o nmero da pgina,ento voc pode imprimir as faturas em grande quantidades mas envia-las individualmente: 1. Clique com o direito em qualquer espao em branco do relatrio e selecione Insert Group 2. Selecione o campo SalesOrderHeader.SalesOrderNumber no DropDownList e clique em OK.
1. Voc vai notar que duas novas sees foram adicionadas ao relatrio:Group Header#1 e Group Footer #1.Por padro,o Crystal adiciona o Special Field chamado Group #1.Esse ir mostrar o valor pra qualquer campo que voc estaja agrupando.Para este relatrio voc no vai precisar do nome do grupo,porque este o campo SalesOrderNumber e imprimido no cabealho do relatrio.Voc pode remover este campo clicando nele e pressionando delete. 2. Ns no precisamos da seo Group Header #1,ento voc pode esconde-la,clicando com o boto direito no seu titulo e selecionando Suppress(No-Drill-Down) no pop-up.
3. O prximo passo dizer ao Crystal para quebrar a pgina depois da seo Group Footer e resetar o nmero da pgina.Clique com o direito no titulo Group Footer #1 e selecione Section Expert no menu popUp. 4. Marque as checkboxs NewPageAfter,Reset Page Number After e clique em OK. 5. O prximo passo adicionar os itens para a fatura.A seo Details ir se repetir,para cada registro na tabela SalesOrderDetail.Expanda a tabela Products no FieldExplorer.Arraste o campo ProductNumber para a seo Details.Note que quando fizer isso,o Crystal automaticamente adiciona um campo Column Header na seo Page Header.O Column Header simplesmente um Text Object,que voc pode editar para um nome mais amigavel.Mude o nome para Nmero do produto. 6. Arraste o campo Product.Name para a seo Details.Ajuste sua largura. 7. Arraste o campo SalesOrderDetail.OrderQty para a seo Details.Mude a column header para Qtd. 8. Arraste o campo SalesOrderDetail.UnitPrice para a seo Details.Mude a column header para Preo. 9. Arraste o campo SalesOrderDetail.UnitPriceDiscount para a seo Details.Ajuste sua largura.Mude a column header para Desc. 10. Arraste o campo SalesOrderDetail.LineTotal para a seo Details.Mude a column header para Total Itens. 11. O prximo passo adicionar um Box,assim os Columns Header e os detalhes,ficam contornados e destacados no relatrio.Clique com o direito em um espao em branco no relatrio e selecione Insert Box.Arraste a caixa em volta dos Column Headers e abaixo da seo Group Footer
1. De um preview no relatrio. O ltimo passo criar os totais na seoo Group Footer.A soma dos campos LineTotal (Total de cada item) corresponde ao subTotal da fatura.Tem um campo na tabela SalesOrderHeader chamado Subtotal,mas por algum motivo ele no corresponde a soma dos detalhes.Para contornar isso ns iremos criar nosso prprio Subtotal no relatrio.Ns iremos depois adicionar o Freight(Frete) e Tax(taxa) para calcular a fatura total. 1. Clique com o direiro no campo Line Total na seo Details.Selecione Insert Summary. 2. O dropdown Field to Summarize deve estar por padro setado para SalesOrderDetail.LineTotal e o Calculate this summary deve estar em Sum.Mude o dropdown Summary Location para Group #1:SalesOrderHeader.SalesOrderNumber A.Clique em OK.
1. Isso ir automaticamente criar o Summary field na seo Group Footer abaixo do campo LineTotal.Voc pode precisar aumentar a altura da seo Group Footer pra que os dados apaream corretamente. 2. Clique com o direito no campo e selecione Formar Object.Clique na aba Font e mude o Style para regular.Clique na aba Number e marque o checkbox Display Currency Symbol.Clique em Ok. 3. Clique nos campos Summary Field e Line Total enquanto pressiona a tecla CTRL.Deixe-os do mesmo tamanho e os alinhe a direita. 4. Clique em um espao em branco no Summary Field e selecione Insert Text Object.Mude o texto para SubTotal:.Essa a label para o SummaryField. 5. Agora adicione o campo Tax.Expanda o DataBase Fields no Field Explorer.Expanda a tabela SalesOrderHeader.Arraste o campo Tax para a seo Group Footer logo abaixo do Summary Field Line Total. 6. Clique em um espao e em branco e selecione Insert Text object.Mude o texto para Taxa:.E coloque como label do campo Tax. 1. Agora arraste o campo Freight abaixo do campo Tax. 2. Clique em um espao e em branco e selecione Insert Text object.Mude o texto para Frete:.E coloque como label do campo Freight. 3. Clique nos campos Tax e Freight enquanto pressiona a tecla CTRL.Deixe-os do mesmo tamanho e os alinhe a direita.
4. Agora voc tem que criar uma formula para o total da fatura.Clique no Formula Fields no Field Explorer e selecione New.De o nome de InvoiceTotal e clique em Use Editor. 5. Entre com o seguinte cdigo. Sum ({SalesOrderDetail.LineTotal}, {SalesOrderHeader.SalesOrderNumber}) + {SalesOrderHeader.TaxAmt} + {SalesOrderHeader.Freight} 1. Clique no boto Save and Close. 2. Arraste o Formula Field InvoiceTotal para a seo Group Footer logo abaixo do campo freight.Deixe esses campos do mesmo tamanho e alinhe-os a direita. 3. Como esse um campo de Total ns iremos adicionar uma linha acima do campo e duas abaixo.Pra fazer isso clique com o direito no campo InvoiceTotal e selecione Formar Object. 4. Clique na aba Border,e selecione a linha superior (top) como Single,e a inferior (Bottom) como double. 5. Agora insira um label a esquerda do campo InvoiceTotal.Clique com o direito em um espao em branco campo e selecione Insert text object.Mude o texto para Fatura Total:.
As Sees Report Header e Report Footer no so usadas nesse relatrio e podem ser escondidas.Clique no titulo delas e selecione Supress(No-Drill-Down). Nosso relatrio est praticamente pronto,agora precisamos criar o rodap,e depois mostra-lo na pgina ASP.NET,coisas que estarei mostrando nos prximos posts desta srie. At l!
Publicado emmaro 19, 2010MarcadoCrystal ReportsFormula FieldComentrios1 Comentrio
customerName; 1. Clique no boto Save and Close no canto superior esquerdo do editor. 2. Expanda o Formula Field no field explorer,e arraste o campo CustomerFullName,prximo ao label do nome do cliente.Voc pode deixar o campo maior clicando no campo e arrastando suas extremidades. 3. Clique no boto Main Report Preview e voc deve ver o nome do cliente aparecer.Use os botes de rolagem de pginas pra ver que alguns nomes tem Title e middle name.
O prximo passo criar o formula field bill to address.Ele tem um problema parecido com o do nome,porque nem todos os clientes tem o campo AddressLine 2 preenchido.Ns s podemos incluir esse campo se ele no for nulo.Ns poderiamos somente arrastar todos os campos para o relatorio em linhas separadas,mas se algum registro no campo AddressLine 2 estivesse nulo ns teramos um buraco no relatrio.O Formula Field,nos ajuda a resolver este problema: 1. Insira um Text Object embaixo do Formula Field CustomerFullName,e coloque Cobrana para:.Formate o Text object deixando seu texto em negrito. 2. Clique com o direito no Formula Fields no field explorer e selecione New,no pop-up. 3. Sete BillToAddress para o nome da formula e clique em Use editor. 4. Insira o seguinte cdigo: local StringVar billTo := {addressbillto.AddressLine1} + chr(13); if isnull({addressbillto.AddressLine2}) = false then billTo := billTo + {addressbillto.AddressLine2} + chr(13); billTo := billTo + {addressbillto.City} + , + {stateprovincebillto.StateProvinceCode} + + {addressbillto.PostalCode} Esse cdigo cria uma variavel local e a inicializa com o campo AddressLine1 e adiciona uma quebra de linha.O chr(13) cria uma quebra de linha na formula.Depois checamos se o AddressLine2 nulo e concatenamos na variavel se este tiver valor.Depois concatenamos os campos,City,State/Province, e PostalCode.
1. Clique no boto Save and close. 2. Arraste o Formula Field BillToAddress abaixo do Text object Cobrana para:.Aumente a largura do campo. 3. Como voc no sabe qual a altura necessria porque vai depender se o cliente tem endereo no campo AddressLine2,voc pode deixar a altura do campo como est.Porm,voc poder fazer com que o campo ajuste sua altura automaticamente clicando com o boto direito no campo e selecionando Format Object. 4. Marque a checkbox Can grow.Isso permite que o campo cresa verticalmente. 5. Ns tambm queremos contornar o campo com uma borda.Clique na aba border,na caixa de dilogo Format Editor. 6. Selecione Single para os combos left,Right e Top e Bottom.Clique em OK. 7. Clique em Main Report Preview.
1. Agora voc pode criar o campo Ship to da mesma maneira.Primeiro insira um Text Object e digite Entrega para:.Deixe o texto em negrito.Coloque-o no meio do relatrio. 2. Clique com o boto direito em Formula Field no field explorer e selecione New 3. Coloque o nome ShipToAddress e clique em Use editor. 4. Coloque o seguinte cdigo: local StringVar shipTo := {addressshipto.AddressLine1} + chr(13); if isnull({addressshipto.AddressLine2}) = false then shipTo := shipTo + {addressshipto.AddressLine2} + chr(13); shipTo := shipTo + {addressshipto.City} + , + {stateprovinceshipto.StateProvinceCode} + + {addressshipto.PostalCode} 1. Clique no boto Save and close. 2. Arraste o Formula Field ShipToAddress abaixo do Text object Entrega para:.Aumente a largura do campo. 3. Clique com o boto direito no Formula Field e selecione Format Object. 4. Marque a checkbox Can grow.Isso permite que o campo cresa verticalmente.Coloque as bordas da mesma forma que fez anteriormente.
Aqui terminamos o cabealho de nosso relatrio.Em breve publicarei a Parte 3,com a continuao da criao deste relatrio. At la!
Publicado emmaro 18, 2010MarcadoAdventure WorksCrystal ReportsTutorialVisual StudioComentrios4 Comentrios
1. Clique com direito no Solution Explorer 2. Escolha Add new item 3. Clique no template do Crystal Reports 4. Mude o nome do arquivo para Invoice.rpt Ir aparecer a caixa de dilogo,do Crystal Reports.Selecione As a blank report e clique em OK:
1. Clique no sinal de expanso do banco AdventureWorks e voc ver a lista de schemas do banco.Se voc clicar no n de um esquema voc ver mais dois ns,um para tabelas e outro para as views. 2. Vamos selecionar as tabelas e views apropriadas para o relatrio e manda-las para a lista de Tabelas selecionadas na caixa de dilogo.Expanda o schema Person e expanda Tables.Clique na tabela Contacts e depois clique no boto >pra move-la pra lista de tabelas selecionadas.Faa o mesmo para as tabelas:Production.Product,Sales.SalesOrderDetail e Sales.SalesOrderHeader. 3. A tabela Sales.SalesOrderHeader tem dois campos de endereo (Address),uma para o endereo de cobrana (BillAddress) e outro para o endereo de entrega (ShipAddress).Cada um desses campos tem uma chave estrangeira com a tabela Person.Address.Ns teremos que adicionar duas cpias da tabela Address,para cada chave estrangeira.Mas ns podemos apelidar (alias) a tabela pra depois sabermos qual qual.Adicione a tabela Person.Address para a lista de tabelas selecionadas usando o boto >. 4. Clique com o direito na tabela Address na lista de tabelas selecionadas e renomei a atravs do menu pop-up.Mude o nome para AddressBillTo e pressione enter.O Crystal vai dar um lowerCase no nome automaticamente.
5. Agora a adicione a tabela Person.Address para a lista de tabelas selecionadas novamente.Dessa vez renomeie-a para AddressShipTo.
1. A tabela Person.Address tem uma chave estrangeira com a tabela Person.StateProvince ento voc tambm vai precisar adicionar a tabela Person.StateProvince duas vezes para a lista de tabelas selecionadas.Renomeie a tabela para StateProvinceBillTo e StateProvinceShipTo.
1. Agora que voc selecionou as tabelas,voc precisa definir as relaes entre essas tabelas.O Crystal faz um bom trabalho descobrindo essas relaes,mas ele no pode descobrir tudo automaticamente.Para configurar manualmente as relaes clique na aba Links na caixa de dilogo do Database experts 2. Aparecer uma representao grfica das tabelas.Voc pode tornar a caixa de dilogo maior,arrastando o canto inferior direito .Eu gosto de fazer isso pra poder ver o mximo de tabelas possiveis. 3. A tabela SalesOrderHeader a tabela principal que tem os dados que ns estamos procurando.Crystal deve ter encontrado as relaes entre as tabelas SalesOrderHeader.SalesOrderId e SalesOrderDetail.SalesOrderId, e SalesOrderHeader.ContactId e Contact.Contact.Id,e SalesOrderHeader.BillToAddressId e AddressBillTo.AddressId,e AddressBillTo.StateProvinceId e StateProvinceBillTo.StateProvinceId.Voc deve ver uma linha entre as chaves primrias e as chaves estrangeiras destas tabelas.Seno,voc pode cria essas relaes facilmente clicando na chave estrangeira e arrastando para a primary key desejavel. 4. Voc precisa adicionar as relaes entre,SalesOrderDetail.ProductId e Product.ProductId.Clique no campo SalesOrderDetail.ProductId e arraste-o para o campo Product.ProductId.Voc deve ver uma linha azul aparecer entre estas duas tabelas representando a relao.Na verdade o que isso
est fazendo criando joins pra voc, na query que seleciona os dados. parecido com Access Query Designer.Se voc precisar fazer um outer join s dar um clique-duplo,na linha entre as tabelas e selecionar entre Left,Right ou Full join. 5. Crie o resto das relaes da mesma maneira,arrastando a chave estrangeira sobre a chave primria.O restante das relaes so:SalesOrderHeader.ShipToAddressId = AddressShipTo.AddressID, e AddressShipTo.StateProvinceId = StateProvinceShipTo.StateProvinceId.Clique no boto OK.
1. Voc agora pode ver o relatrio no VS 2008 de novo.Cique no sinal de expanso prximo a Database Fields no Field Explorer.Voc ver todas as suas tabelas listadas.Clique no sinal de expanso de uma tabela e voc ver os campos daquela tabela.Essas so as tabelas disponiveis para serem usadas no relatrio agora.
2. Clique com o boto direito em um espao em branco na Page Header Section e selecione Insert Picture,no pop-up.Escolha a imagem e clique em Abrir.Arraste a figura para o topo esquerda,na Page Header Section. 3. Use a janela de propriedades para mudar a altura e largura da imagem.
1. Agora voc precisa adicionar o Nome da empresa.Clique com o boto direito em um espao em branco e selecione Insert Text Object no menu Pop-Up.Deixe o objeto de texto ao lado do logo. 2. Insira o texto.Para parar de editar clique em algum outro lugar do relatrio. 3. Clique com o boto direito no objeto de texto,e selecione Format Object no pop-up.Esse menu lhe d mais opes do que a janela de propriedades. 4. Clique na aba Font.Altere a fonte como desejar. 5. Clique na aba Paragraph.Altere o alinhamento para horizontal.
1. O prximo passo arrastar os campos do banco para o relatrio.Comece com o campo SalesOrderHeader.SalesOrderNumber.Mesmo que esse no seja o nmero da fatura,iremos trata-lo como se fosse.Expanda o n de DataBase fields no field explorer.Expanda a tabela SalesOrderHeader.Arraste o campo SalesOrderNumber,para a direita no cabealho. 2. Diminua a largura do campo. 3. Insira um Text Object a esquerda do campo SalesOrderNumber,clicando com o boto direito em um espao vazio e escolhendo Insert text object.Mude o texto para Fatura#:.Alinhe o texto para a direita. 4. Ajuste o objeto de texto para no cobrir o campo SalesOrderNumber.
1. Adicione os campos PurchaseOrderNumber,Orderdate,ShipDate,e Due Date da mesma maneira.Adicione um Text Object para cada um desses campos,para que sirva como label. 2. De uma olhada no seu relatrio clicando no boto Main Report Preview,no rodap do relatrio.
1. Note que os trs campos de data tem hora,includa neles.Para remove-las clique de volta no Main Report View.Segure a tecla CTRL,e clique em cada campo de data.Clique com o direito e selecione Format Multiple Objects no pop-up. 2. Clique na aba Date And time e escolha 03/01/1999 na lista de estilos.Clique ok. 3. Clique em preview de novo,e desta vez a hora deve ter sumido. Por enquanto isso,em breve publicarei a parte 2,continuando com a criao deste relatrio.
At l!