Você está na página 1de 9

Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

Mais Criar blog Login

Delphi Curitiba
QUINTA-FEIRA, 29 DE NOVEMBRO DE 2007

Soma Condicional no Rave Reports

Nesse artigo vou demonstrar como se faz uma soma condicional no


Rave Reports. Na verdade, podemos fazer qualquer cálculo, mas o mais
comum em um relatório é realmente o somatório de um campo.

ARQUIVO DO BLOG Nesse caso, vou fazer o somatório de um campo, baseado no valor de
outro campo. Por exemplo, quero fazer o somatório dos valores que já
▼ 2007 (5)
foram pagos e dos valores que ainda não foram pagos, onde terei uma
► Dezembro (2)
coluna chamada “PAID” que terá valor “y” (pagos) ou “n” (não pagos).
▼ Novembro (3)
Palestras da BorCon 2007 Outro exemplo prático para esse artigo, poderia ser o somatório de
Soma Condicional no Rave faturas baixadas, faturas em aberto e faturas em atraso. Bom, na
Reports verdade, temos vários exemplos práticos para esse modelo de relatório.
Inédito e Gratuito - Delphi
Day em Português Infelizmente não podemos fazer isso diretamente usando componentes
do Rave, de uma maneira simples.

QUEM SOU EU Inicialmente, preciso de um banco de dados para fazer meu relatório.

G I O R DA N O K O S T CO S K I
Eu vou utilizar o banco de dados “EMPLOYEE.GDB” que acompanha o
Delphi há algum tempo. Ele está localizado em “C:\Arquivos de
Borland Instructor Certified
programas\Arquivos comuns\Borland Shared\Data” para o Delphi
VI SU A L I ZA R M EU P E R F I L
C OM P L E T O
2006, 2005 ou 7, ou no caso do RAD Studio 2007 está localizado em
“C:\Arquivos de programas\Arquivos comuns\CodeGear Shared\Data”.

Na minha aplicação eu vou utilizar o dbExpress, e farei um relatório


mestre-detalhe, usando a prática de Nested DataSets (DataSets
aninhados) para fazer esse relacionamento. Não vou entrar em detalhes
de como será feito o relacionamento, pois o foco do artigo é no Rave
Reports.

Vamos à aplicação em si. Crie um novo projeto através do menu File |


New | VCL Forms Application.

Defina o nome do formulário principal como “frmPrincipal” e salve a


unit do como “uPrincipal.pas” e o projeto como
“ProjetoRaveSomaCondicional.dpr”.

Insera um componente TSQLConnection, o renomeie para “conexao” e o


aponte para o banco EMPLOYEE.GDB.

Coloque os seguintes componentes, nessa ordem e configure as


seguintes propriedades:

1 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

Após a configuração do cdsClientes, adicionaremos todos os campos


nele, clicando duas vezes no componente e abrindo o Fields Editor, após
isso, acionamos o menu de contexto com o botão direito, e selecionamos
“Add all fields” ou Ctrl + F. Repare na lista de campos, que o último
campo deve ser do tipo TDataSetField, ou seja, um campo que contém
um dataset, com o nome “sqlDsVendas”. Se ele não aparecer, repita o
processo.

Na seqüência vamos configurar mais alguns componentes.

A tela deverá estar configurada semelhante a da figura abaixo.

Vamos partir para o relatório agora. Com um duplo-clique no RvProject


abriremos o Rave Reports Designer.

2 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

Selecione o menu File | New para criar um novo relatório, salvaremos o


arquivo gerado como “RelatorioCondicional.rav”, salvando-o no mesmo
diretório da aplicação.
Devemos agora criar os Data Views dentro do relatório importando os
campos dos ClientDataSets configurados na nossa aplicação através dos
RvDataSetConnections, para isso, selecione o menu File | New Data
Object e selecione a opção Direct Data View, e selecione primeiro o
RvDataSetClientes. Repita o processo para a criação do Data View e
selecione depois o RvDataSetVendas.

Foram criados dois DataViews no Project Tree, vamos renomeá-los para


dvClientes e dvVendas, respectivamente, como na figura abaixo.

A parte inicial do relatório, nós faremos com o Wizard, pois não é tema
do artigo, como gerar um relatório desde o início. Para isso acesse o
menu Tools | Report Wizards | Master/Detail Report.

O assistente irá nos guiar para a criação básica do relatório. Na primeira


tela, ele pergunta qual o DataView Mestre, selecione dvClientes. Na
segunta tela, pergunta qual o DataView Detalhe, seleciona dvVendas.
Na seqüência, quais os campos do dvClientes que queremos no
relatório, selecione CUSTOMER e CITY. Na tela seguinte, ele especifica
a ordem de impressão das colunas, deixe o padrão. Ele também
pergunta, quais os campos do dvVendas que queremos no relatório,
selecione PO_NUMBER, PAID e TOTAL_VALUE. E também deixe os
campos na ordem padrão. Após isso, ele pede qual o relacionamento
entre os dois DataViews, selecione CUST_NO nos dois DataViews e
pressione Next. Na penúltima tela, informe o título do relatório como:
“Relatório de Vendas por Cliente”, e finalmente na última tela, somente
diminua um pouco os fontes para que o relatório não fique encavalado.
Repare na figura abaixo, que mesmo diminuindo a fonte, o relatório fica
um pouco encavalado nos campos PAID e TOTAL_VALUE. Dê uma
ajustada para que o relatório fique mais apresentável.

Se pressionarmos F9, ou no menu File | Execute Report, poderemos


testar a pré-visualização do nosso relatório.

Vamos colocar uma formatação no campo TOTAL_VALUE, para isso, vá

3 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

no Project Tree, expanda Data View Dictionary e expanda dvVendas.


Agora em dvVendasTOTAL_VALUE, configure a propriedade
DisplayFormat como “R$ #,##0.00”.

Bem, agora vamos para a parte principal do nosso artigo, montar o


rodapé de cada cliente, mostrando o total de vendas pagas e de vendas
não pagas. Para isso, vamos incluir uma Band no nosso relatório dentro
da Region.
Vamos configurar a propriedade ControllerBand para
dvVendasDataBand e em BandStyles vamos deixar ela como rodapé,
marcando a opção “Body Footer”. Vamos aumentar um pouco a Band
deixando a propriedade Height com “0,700”.

Dentro dessa Band, vamos inserir um componente CalcText, para fazer


o somatório de todas as vendas, não importando se as vendas estão
pagas ou não, configurando-o da seguinte forma: DataView=dvVendas,
DataField=TOTAL_VALUE, Controller=dvVendasDataBand,
DisplayFormat=R$ #,##0.00

Colocaremos também um Text antes do CalcText, para indicar a


totalização com a propriedade Text sendo “TOTAL DE VENDAS:”. O
relatório deve se parecer com o da figura abaixo.

Como não temos uma maneira simples de fazer um somatório


condicional através de um componente, como fizemos com o CalcText,
vamos fazê-lo utilizando o recurso de parâmetros e Rave Language, que
é a linguagem de programação do Rave.

Vamos mudar o nome do nosso relatório no Project Tree, expandindo a


opção Report Tree e mudando no Report2 a propriedade Name para
“rptVendasPorCliente” e FullName para “Relatório de Vendas por
Cliente”.

Com o relatório selecionado no Project Tree, vamos criar dois novos


parâmetros para esse relatório, na propriedade Parameters, configure-a
como na figura abaixo.

4 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

A cada impressão de um novo cliente devemos zerar VENDAS_PAGAS e


VENDAS_NAO_PAGAS. Para isso usaremos Rave Language,
selecionando a dvClientesDataBand e clicando na aba Event Editor, ao
lado da aba Page Designer, como mostrado no círculo vermelho na
figura abaixo.

Após termos entrado no editor de eventos, vamos selecionar no


combobox “Available Events” o evento “OnAfterPrint”. Criando logo
abaixo um cabeçalho para que possamos digitar o nosso código para o
evento.

Após o begin, vamos digitar o seguinte código:

Esse código faz com que passamos o valor “0” (zero) para cada
parâmetro.

5 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

Após isso, devemos clicar no botão Compile para compilarmos o evento.


Sempre após a criação de um evento, compile-o para correta utilização.
Se a compilação estiver correta ele irá mostrar uma mensagem “Compile
finished”, na mesma barra do botão Compile, no canto direito, senão, no
mesmo lugar, mostrará uma mensagem em vermelho, indicando o erro.

Agora, voltamos ao Page Designer, clicando na aba de mesmo nome, ao


lado da aba Event Editor.

Selecionaremos o componente dvVendasDataBand, e voltaremos ao


Event Editor, selecionando o evento “OnAfterPrint” e inserindo o
seguinte código:

Repare que a codificação por mais que seja parecida com Pascal, tem
algumas diferenças, por exemplo, antes do elseif, temos “;” (ponto-
e-vírgula). Também o “end” para fechar o “if” não é um simples “end” e
sim é um “end if”. Tome cuidado com esse tipo de sintaxe.

Após a codificação, compile o código.

Pronto, os parâmetros foram definidos, os valores corretos foram


assinalados para os parâmetros, agora falta somente imprimir os
parâmetros. Para isso, vamos incluir dois DataTexts na banda de
rodapé, e na propriedade DataField deles, ao invés de selecionarmos um
campo de um DataView, vamos imprimir o valor de um parâmetro,
clicando no botão “...” ao invés de abrir o combobox para mostrar todos
os campos disponíveis. Ao clicar no botão “...”, irá abrir o Data Text
Editor. Selecione o parâmetro, como na figura abaixo e clique no botão
“Insert Parameter”, ao fazer isso, será colocado no campo “Data Text” o
valor “Param.VENDAS_PAGAS”, clique em OK. Repita o processo para
o parâmetro VENDAS_NAO_PAGAS.

6 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

Para finalizar coloque dois componentes Texts antes dos DataTexts para
descrever os totais. O relatório se parecerá como o da figura abaixo.

Podemos perceber que faltou a formatação do valor na impressão das


vendas pagas e não pagas. Porém, o nosso componente DataText não
tem a propriedade DisplayFormat, faremos isso através de Rave
Language, selecionamos o DataText de Vendas Pagas, e vamos adicionar
código ao evento “OnGetText”, pois é a última chance de
transformarmos o texto antes de ser impresso. Usaremos o parâmetro
por referência “Value” que nos traz o texto a ser impresso, e se
atribuirmos um novo valor a “Value” podemos modificar o texto. Então
adicionaremos o seguinte código:

Não esqueça de compiler o evento. Faça a mesma coisa para o DataText


de Vendas Não Pagas.

7 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

Nosso relatório está pronto, agora salve o relatório e feche o Rave


Reports Designer. Para finalizar basta adicionarmos código ao botão
Imprimir do nosso projeto, e adicionarmos referência ao nosso projeto
de relatórios .rav.

No evento OnCreate do nosso formulário vamos adicionar o código:

No evento OnClick do botão IMPRIMIR vamos adicionar:

Pronto, está terminado nosso relatório com soma condicional por


grupos.

Se quisermos adicionar um somatório total do relatório, basta seguir


basicamente os mesmos passos, criando mais dois parâmetros, porém,
não o zeramos a cada cliente.

Espero que vocês tenham gostado desse artigo. Para fazer o download
do exemplo, basta clicar aqui.

Abraços

Giordano Kostcoski - Borland Instructor Certified


(giordano@tdstecnologia.com.br / giordanocwb@yahoo.com.br)
Instrutor TDS Tecnologia - Curitiba/PR

P O ST A DO P O R G I ORD A NO K O S TC O SK I À S 1 2 : 45

4 COMENTÁRIOS:

Edimar disse...
Olá, boa tarde.

Seguí o seu tutorial para desenvolver os totais de acordo com


os parâmetros, mas quando crio as variáveis está
apresentando erro de memória. Estou usando Delphi 7 e
Rave 5.01.

Sabe o q pode tá acontecendo?


8 de janeiro de 2008 09:52

Eu sou maluco por bombas disse...


kra nao consigo ligar as tabelas
pois trabalho com data view.. e so uma tabela

8 of 9 10/05/2021 13:22
Delphi Curitiba: Soma Condicional no Rave Reports http://delphicuritiba.blogspot.com/2007/11/soma-condicional-no-rave-...

peciso urgente q vc me ajude


meu relatorio e assim .
NºORC NUMFAB TOTLIQ FROM_PGn_FOPGTO
001 0002 12.300 005 ESPECIE
___________________________________
NºORC NUMFAB TOTLIQ FROM_PGn_FOPGTO
002 0003 1.300 005 ESPECIE
___________________________________
NºORC NUMFAB TOTLIQ FROM_PGn_FOPGTO
003 0004 12.300 006 CARTAO
___________________________________
NºORC NUMFAB TOTLIQ FROM_PGn_FOPGTO
004 0005 300.00 007 CARTAO
___________________________________
NºORC NUMFAB TOTLIQ FROM_PGn_FOPGTO
005 0006 1.000 008 CHEQUE

QUERO SOMAR SO OS CARTOES SO OS EM ESPECIE SO


OS EM CHEQUE ... COLUNAS ESPECIFICAS SEPARADAS
...
AJUDA SE PUDER MUITO BOM SEU TOPICO MAIS NAO
CONSEGUI DESENVOLVER....
12 de janeiro de 2010 15:20

Magno disse...
Cara muito bom o tópico... deu certinho...

Só um comentário pro povo ai... verifica com calma que


podem ter feito o mesmo erro que eu fiz... é pra adicionar
parametros e nao variaveis.. derrepente colocou vairiaveis
sem perceber...
15 de dezembro de 2010 05:50

Marcelo disse...
O único problema quando muda de pagina ele zera os
parâmetros, fiz um relatório Mestre / Detalhe, que zera os
parâmetros quando é impresso o Mestre e totaliza o detalhe
em uma band abaixo.
2 de dezembro de 2014 03:42

Postar um comentário

Postagem mais recente Página inicial Postagem mais antiga

Assinar: Postar comentários (Atom)

9 of 9 10/05/2021 13:22

Você também pode gostar