Variáveis com formulas fields no Crystal Reports

Introdução

Formula fields do Crystal reports permitem a você injetar blocos de código em um relatório quando um simples comando  SELECT,não é suficiente.Você pode declarar variáveis,criar blocos if/then,criar arrays,executar loops,ou chamar funções já prontas do Crystal Reports.Esse artigo vai criar um relatório num web site ASP.NET e mostrar como criar um formula field,manipular datas na formula assim como criar uma variavel e lhe atribuir um valor, e tambem usar a lógica if/then pra criar campos de resumo para o trimestre no relatório.

Antes de começar você precisa ter o VS2008 instalado com o crystal reports.Os exemplos foram escritos no VS2008 mas funcionam também no VS2005.Eu criei um banco de dados simples com uma tabela,pra usar como exemplo no relatório:

Passo 1:Criar o banco

  1. Abra o Sql Management Studio 2005/2008 e conecte se ao seu servidor.
  2. Crie um novo banco e lhe de o nome de CrystalFormulas
  3. Esse banco só vai conter uma tabela chamada SalesHeader.Crie a tabela conforme a seguir:
Nome do campo Tipo Permite nulo
SalesHeaderID Int (Identity) Não
SalesDate Datetime Não
Total Money Não

Eu preenchi esta tabela com registros de Janeiro a Junho.Segue o script para a criação 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 método você escolheu quando estiver pronto pra se conectar ao banco,como definido nos passos abaixo.

Passo 2:Criar o web site,Add o relatório, e conectar ao banco

1. Rode o VS2008 e escolha File>New WebSite
2. Selecione o template de ASP.NET Web Site.Escolha o local que deseja salvar o projeto.Escolha a linguagem C# e clique em OK.
3. Clique com o direito no nome do projeto no Solution Explorer e escolha “Add New Item…”
4. Selecione o template Crystal Reports e mude o nome para QuartelySales.rpt.Clique no botão adicionar.
5. Irá aparecer uma caixa de dialogo do CR.Selecione “As Blank Report” e clique no botão OK.Isso irá add o arquivo do CR ao seu projeto e vai abrir o CR Design.
6. Agora você precisa se conectar ao banco.Clique com o direito em “Database Fields” no Field Explorer e selecione “Database Expert”.
7. A caixa de dialogo “Database Expert” irá aparecer.Clique no sinal de expansão de “Create New Connection”.Clique no sinal de expansão de OLE DB(ADO).A caixa de dialogo do OLE DB(ADO) deve aparecer.
8. Selecione SQL Native Client na lista de provedores e clique em NEXT.
9. Coloque o nome do seu servidor.Você tem então a opção de escolher usar SQL LOGIN ou Integrated Security.Para esse exemplo nós vamos usar Integrated Security,clicando no checkbox “Integrated Security”.
10. Coloque o nome do banco que foi criado no Passo 1,CrystalFormulas.Clique no botão finish.
11. Você deve ver o banco listado abaixo do nó OLE DB(ADO).Clique no sinal de expansão do banco para ver o schemas.Clique no sinal de expansão do dbo para ver as tabelas.
12. Clique na tabela SalesHeader e depois clique no botão > pra mover esta tabela para a lista de tabelas selecionadas para esse relatório.

Clique no botão OK.

Passo 3:Adicionando fields e formulas para o relatorio

Agora que você está conectado ao banco você pode adicionar os campos para o seu relatório.Qualquer campo que você queira mostrar em linha no relatório,deve ser posto na “Details Section”.

  1. No field explorer clique no sinal de expansão  de DatabaseFields.Clique no sinal de expansão de SalesHeader para ver os campos desta tabela.
  2. Arraste os campos SalesDate e Total para a Details Section no relatório.O CR irá automaticamente add o cabeçalho da coluna na seção Page Header quando você arrastar os campos na Details Section.


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 botão “Use Editor”.

  1. O CR tem inumeras funções já prontas que você pode usar nas suas próprias formulas.As funções estão listadas na seção de ‘Functions” do formula editor.Clique no sinal de expansão de Functions e depois clique no nó de Date and time.Isso irá mostrar a lista de funções 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 função.Observe que as funções não estão em ordem alfabética então você deve ir até o final da lista.
  2. A função DatePart tem 3 diferentes assinaturas.Clique-duplo na primeira assinatura e essa irá aparecer no corpo da fórmula.

  1. O primeiro parâmetro para a função 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) então o  trimeste é recuperado das datas.
  2. O segundo parâmetro é a expressão 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 botão “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 botão “Main Report Preview” pra mostrar o relatório .Você deve ver ou 1 ou 2 para o trimestre.

Passo 4:Criar formulas com variáveis

O próximo passo será adicionar duas formulas para o relatório.Esse relatório deve mostrar a soma para o 1 trimestre e 2 trimestre.

  1. Clique para voltar em “Main report”.
  2. Clique com o direito  em Formula Fields e escolha “New…”.
  3. Nomeie para “Quarter1” e clique no botão “Use editor”

Essa fórmula vai criar uma variável para armazenar o total  de qualquer venda que ocorreu no 1 trimestre.Variaveis tem 3 opções de escopo:Local,Global,ou Shared.Local significa que a variável é usada na função especifica e seu valor é perdido quando a formula acaba.Global significa que a variavel mantém o valor mesmo depois do final da função e poder ser usada em outras formulas no relatorio.Shared significa que você pode usar essa variável em outras fórmulas ou mesmo em sub-relatórios.Por padrão se você omitir o escopo a variável será Global.Entre com o seguinte código no corpo da formula:

Global NumberVar quarter1;

if DatePart(‘q’, {SalesHeader.SalesDate}) = 1 then
quarter1 := quarter1 + ToNumber({SalesHeader.Total})
else
quarter1 := quarter1

Isso cria uma variavel global chamada  quarter1.O código depois então checa se a data está no primeiro trimestre.Se estiver então é adicionada para a variavel quarter1.

  1. Clique no botão Save and Close
  2. Clique no botão “Main Report Preview” pra mostrar o relatório

  1. Clique para voltar em “Main report”.
  2. Crie um segundo formula field chamado Quarter2  e entre com o seguinte código:

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 botão preview:

Note que o código não está mostrando o total.Isso é porque a variavel foi declara num escopo local e não 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 declaração da variavel.Por padrão esta agora será global.Clique em Save and close.De um preview no relatório 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 seção “Report footer” do relatório 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 (No-Drill-down)”
  6. Agora se você rever o relatório você verá somente os totais.

Conclusão

Formula Fields no crystal reports permitem você manipular seus dados de várias maneiras quando um simples SELECT não é suficiente.A sintaxe é bem simples de usar se você já conhece C# ou VB.CR também tem inumeras funções já prontas que você pode usar nas fórmulas.Você também pode usar loopings,como FOR e WHILE.Você também pode achar o próximo 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.

Anúncios

Criando relatórios com Crystal Reports e ASP.NET – Parte 2

Nesse post vou continuar com a criação do relatório que comecei em Criando relatórios com Crystal Reports e ASP.NET – Parte 1,se você ainda não viu,de uma olhada.

O próximo passo é adicionar o nome do cliente (CustomerName),e os campos de endereço,”bill to” (Cobrança para) e “ship to” (Entrega para).Nós iremos usar os “Formula Fields” do Crystal Reports para fazer isso.Formula Fields são poderosos,eles permitem você usar lógica de programação para criar campos.Você pode usar If/Then,loops,do loops,while loops,criar variaveis locais e globais,manipular arrays e muitas outras coisas.Os Formula Fields permitem você fazer quase tudo num relatório.Vamos começar adicionando o “Text Object” ,como label para o Nome do cliente,e o formula field para mostrar o campo “Customer Name”:

1. Insira um “Text Object” abaixo do logo e mude o texto para:”Nome do cliente:”.Redimensione o obejto de texto para ficar somente do tamanho do texto.
2. Clique com o direito no “Formula Fields” no field explorer e selecione “New…”,no pop-up.
3. Sete “CustomerFullName” para o nome da formula e clique em “Use editor”.
4. Nem todos os “Customers” (Clientes) tem um Title,middle name e suffix.Nós iremos criar uma variavel local na formula e uma lógica pra concatenar os campos de nome se eles existirem.Coloque o seguinte código na fórmula:

local stringVar customerName := “”;

if isnull({Contact.Title}) = false then
customerName := customerName + {Contact.Title} + ” “;
customerName := customerName + {Contact.FirstName} + ” ” + {Contact.LastName};

if isnull({Contact.Suffix}) = false then
customerName := customerName + ” ” + {Contact.Suffix};

customerName;

  1. Clique no botão Save and Close no canto superior esquerdo do editor.
  2. Expanda o “Formula Field” no field explorer,e arraste o campo “CustomerFullName”,próximo ao label do nome do cliente.Você pode deixar o campo maior clicando no campo e arrastando suas extremidades.
  3. Clique no botão “Main Report Preview” e você deve ver o nome do cliente aparecer.Use os botões de rolagem de páginas pra ver que alguns nomes tem “Title” e “middle name”.

O próximo 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.Nós só podemos incluir esse campo se ele não for nulo.Nós poderiamos somente arrastar todos os campos para o relatorio em linhas separadas,mas se algum registro no campo AddressLine 2 estivesse nulo nós teríamos um “buraco” no relatório.O Formula Field,nos ajuda a resolver este problema:

  1. Insira um “Text Object” embaixo do Formula Field “CustomerFullName”,e coloque “Cobrança 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 código:

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 código 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 botão Save and close.
  2. Arraste o “Formula Field” “BillToAddress” abaixo do “Text object” “Cobrança para:”.Aumente a largura do campo.
  3. Como você não sabe qual a altura necessária porque vai depender se o cliente tem endereço no campo AddressLine2,você pode deixar a altura do campo como está.Porém,você poder fazer com que o campo ajuste sua altura automaticamente clicando com o botão direito no campo e selecionando “Format Object”.
  4. Marque a checkbox “Can grow”.Isso permite que o campo cresça verticalmente.
  5. Nós também queremos contornar o campo com uma borda.Clique na aba border,na caixa de diálogo “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 relatório.
  2. Clique com o botão direito em “Formula Field” no field explorer e selecione “New…”
  3. Coloque o nome “ShipToAddress” e clique em Use editor.
  4. Coloque o seguinte código:

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 botão Save and close.
  2. Arraste o “Formula Field” “ShipToAddress” abaixo do “Text object” “Entrega para:”.Aumente a largura do campo.
  3. Clique com o botão direito no “Formula Field” e selecione “Format Object”.
  4. Marque a checkbox “Can grow”.Isso permite que o campo cresça verticalmente.Coloque as bordas da mesma forma que fez anteriormente.

Aqui terminamos o cabeçalho de nosso relatório.Em breve publicarei a Parte 3,com a continuação da criação deste relatório.

Até la!