Esse artigo faz parte da revista Clube Delphi Edição 65. Clique aqui para ler todos os artigos desta edição

10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt"> 

Figura 1. Formulário para aplicação de filtros antes da visualização/impressão do relatório de fluxo de caixa

 

Utilizaremos os componentes Label adicionados abaixo de cada campo data, para trazer o dia da semana equivalente à data informada pelo usuário. Para isso, adicione uma nova unit na aplicação e salve-a como “untFuncoes.pas”. Dentro dessa unit declare o código, conforme a Listagem 1. Utilizaremos retornaDia para trazer o dia da semana a partir da data informada.

 

Listagem 1. Função que retorna o dia da semana

function retornaDia(dt: TDate): string;

var

  i: Integer;

begin

  Result := '()';

  i := DayOfTheWeek(dt);

  case i of

    1: Result := '(Segunda-feira)';

    2: Result := '(Terça-feira)';

    3: Result := '(Quarta-feira)';

    4: Result := '(Quinta-feira)';

    5: Result := '(Sexta-feira)';

    6: Result := '(Sábado)';

    7: Result := '(Domingo)';

  end;

end;

 

Nota: Para utilizar a função DayOfTheWeek, declare a unit DateUtils na seção uses da unit. Declare também a unit Controls.

 

Antes de implementarmos o botão Visualizar, devemos criar o relatório no Rave Reports. Selecione o DMPrincipal e adicione os componentes RvProject e RvSystem, ambos da paleta Rave. Altere o nome do RvProject para “rvSysCash” e aponte sua propriedade Engine para o RvSystem1. Selecione a opção Rave Visual Designer através do menu de contexto do RvProject para abrir o Rave Designer.

Crie um novo arquivo de relatório Rave (File|New) e salve-o como “SysCash.rav” (File|Save). Feche o Rave Designer e volte a aplicação Delphi. Aponte a propriedade ProjectFile do RvProject para o arquivo recém criado. Adicione também ao DMPrincipal os componentes RvRenderHTML, RvRenderPDF, RvRenderRTF e RvRenderText para que possamos salvar os relatórios nesses formatos de arquivo.

Para armazenar os DataSets que serão utilizados pelos relatórios da aplicação, vamos criar um novo Data Module. Adicione, através do menu File|New>Other>Delphi Files>Data Module, altere seu nome para “DMRelatorio” e salve a unit como “untDMRelatorio.pas”.

Adicione ao DMRelatorio os componentes SQLDataSet (dbExpress), DataSetProvider e ClientDataSet (Data Access). Altere o nome dos componentes para “datasetFluxo”, “dspFluxo” e “cdsFluxo”, respectivamente.

Ligue os componentes através de suas propriedades (não esqueça da adicionar a unit do DMPrincipal e ligar a propriedade SQLConnection do datasetFluxo para o conSysCash) e para a propriedade CommandText do datasetFluxo digite a seguinte instrução SQL:

 

select CODIGO, CF_TIPO, NOME_CLIFOR, DESCRICAO,

  EMISSAO, VENCIMENTO, VALOR, CREDEB

from VW_PREVISOES

order by VENCIMENTO

 

Para que possamos enviar novas instruções SQL através do cdsFluxo, precisamos alterar a propriedade Options|poAllowCommandText do dspFluxo para True. Para disponibilizar as informações obtidas no cdsFluxo para o relatório no Rave, precisamos adicionar um RvDataSetConnection (Rave).

Altere seu nome para “RvDataSetFluxo” e aponte sua propriedade DataSet para cdsFluxo. Agora sim, vamos para o desenvolvimento do relatório propriamente dito. Entre no Rave Designer através do rvSysCash no DMPrincipal e altere o nome do relatório para “rptFluxo” (selecione o relatório no item Report Library no painel direito).

Para trazer os campos disponibilizados pelo RvDataSetFluxo, vamos criar um DataView dentro do projeto. Selecione o menu File|New Data Object e escolha o item Direct Data View na lista. Clique no botão Next e na seção Active Data Connections selecione o rvDataSetFluxo. Clique no botão Finish para criar o DataView contendo os campos que serão utilizados no relatório. O relatório rptFluxo possuirá duas páginas, onde na primeira adicionaremos o layout do relatório e na segunda armazenaremos os componentes Section que serão utilizados de acordo com os filtros informados pelo usuário no sistema.

 

Dica: Para que possamos imprimir diferentes informações em cada banda do relatório de fluxo de caixa, utilizaremos a técnica de Section presente no Rave.

 

Para adicionar uma nova página ao relatório, selecione a opção File|New Report Page. Na página 1, adicione alguns componentes visuais e configure-os de acordo com a Figura 2. Com exceção da banda bndVencimento, adicione nas demais bandas um DataMirrorSection (Report) para que possamos manipular as seções que criaremos na página 2 do relatório.

 

Figura 2. Layout do relatório de fluxo de caixa do sistema SysCash

 

Nota: A configuração completa de todos os componentes presentes no relatório está no arquivo SysCash.rav disponível para download junto com o código fonte do aplicativo.

 

A segunda página do relatório será utilizada apenas para armazenar os Sections que serão manipulados no relatório. Adicione os componentes Section, Text (Standard) e DataText (Report) e configure-os de acordo com a Figura 3. Cada grupo de Section está vinculado a um DataMirrorSection para mostrar as informações dentro das bandas de acordo com as opções e filtros informados pelo usuário.

 

Figura 3. Section utilizados pelos componentes DataMirrorSection presentes nas bandas do relatório

 

Feche o Rave Visual Designer e volte para a aplicação. Selecione o FrmFluxo e adicione o código da Listagem 2 no evento OnClick do botão Visualizar. Dependendo das opções selecionadas na tela, montamos a instrução SQL que será utilizada para fazer o filtro na view Vw_Previsoes. Para a passagem dos campos do tipo data na instrução SQL, utilizamos a função formataData para fazer a troca da posição do dia e do mês. Você pode incluir a função formataData na unit untFuncoes, digitando o seguinte código:

 

function formataData(const dt: TDate): string;

begin

  Result := FormatDateTime('mm/dd/yyyy', Dt);

end;

 

Selecione o FrmPrincipal e adicione um menu com o Caption de “Relatórios” e com os sub-menus Fluxo de Caixa, Movimentação Diária, por Período e Histórico. Para o evento OnClick do menu Fluxo de Caixa faça a chamada ao formulário FrmFluxo utilizando o método CriarForm (criado na edição anterior). Veja o relatório em execução na Figura 4.

 

Figura 4. Relatório de Fluxo de Caixa em tempo de execução

 

Listagem 2. Código do botão Visualizar

procedure TFrmFluxo.btnVisualizarClick(Sender: TObject);

begin

  with DMRelatorio.cdsFluxo, DMPrincipal do

  begin

    Close;

    CommandText := 'select CODIGO, CF_TIPO, '+

...

Quer ler esse conteúdo completo? Tenha acesso completo