Relatório para Web

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

WebBroker te dá uma mãozinha, neste artigo de Emerson Facunte. Acesso exclusivo para Assinantes.

WebBroker te dá uma mãozinha

 

Criar relatórios não é uma tarefa simples, muito menos prazerosa! Mas seus “pobremas se acabaram-se”, porque chegou o método revolucionário WebBroker Report Enrolator!

Sim, aprenda a criar relatórios de todos os tipos para Web, utilizando o bom e velho WebBroker.

Muitos tentaram o Rave, outros brigam com o Report Builder, mas como sempre digo, persistência e geração de arquivos na Web não é bom negócio.

Neste pequeno exemplo, teremos uma idéia prática (isto existe?) da criação de relatórios com WebBroker, onde uma velha e respeitada técnica é utilizada. Quem já programou em Clipper vai vibrar, e quem gosta de “descer” o dedo no código, vai pular de alegria. Aos amigos designers (aqueles que adoram desenhar relatórios), aceitem minhas sinceras desculpas por revelar um segredo milenar: programação de relatórios.

Para o nosso projeto, tomemos como base a seguinte estrutura de tabela:

 

Tabela clientes

Campo

Tipo

Tamanho

 Cli_id

Integer

 

 Cli_Razao

Varchar

70

 Cli_UF

Varchar

02

 Cli_Email

Varchar

70

 

 

 

 

 

 

 

 

 

A partir do Delphi, selecione as opções File/New/Other..., em seguida a opção Web Server Application.

Na janela seguinte selecione a opção CGI Stand-Alone executable, e marque a opção Cross Platform, para que nossa aplicação possa ser compilada normalmente no Kylix.

Grave a unit com o nome un_relatorio.pas e o projeto como Relatorio.DPR

Insira um objeto do tipo TSQLConnection no WebModule , e através do duplo-clique crie uma nova conexão. Segue um exemplo de conexão Interbase:

Objeto

Propriedade

Valor

 TSQLConnection

 DriverName

 Interbase

 

 CommitRetaining

 True

 

 DataBase

 localhost:C:/cursoweb/clientes.gdb

 

 SQLDialect

 3

 

 LoginPrompt

 False

 

 Name

 BancoDados

 

 

 

 

 

 

 

 

 

 

 

 

 

Repare que estamos utilizando o banco de dados clientes.gdb, criado no Interbase. Insira um objeto do tipo TSQLDataSet e altere as propriedades que seguem:

 

Objeto

Propriedade

Valor

 TSQLDataSet

 Name

 sqlClientes

 

 SQLConnection

 BancoDados

 

 CommandText

 select * from tbclientes

 

 

 

 

 

 

 

 

Aqui estamos utilizando a tabela tbClientes do objeto BancoDados. Vamos criar algumas variáveis globais na seção var.

 

 iLinhas_porPagina, iLinha_atual, iPagina: Integer;

 

Agora, vamos criar nosso html base para o relatório. Através das opções File/New/Other...,selecione a seção Web Documents e clique na opção HTML Document. Digite o código que segue, e grave o documento com o nome cabeçalho.htm

 

 <HTML>

 <HEAD>

 <TITLE> Relatorio </TITLE>

   <style type="text/css">

     .eject {

       page-break-before: always;

     }

   TH {

     font-family: Arial, Helvetica, sans-serif;

     font-size: 9pt;

     background:#CCCCCC;

   }

     TD {

       font-family: Arial, Helvetica, sans-serif;

       font-size: 9pt;

     }      

 

   </style>

 </HEAD>

 <BODY>

   <CENTER>

     <B>Relatório de Clientes - Página <#pagina></B>

     <hr width="90%"> 

   </CENTER>

 

 <TABLE width="90%" align="center">

  <TR>

   <TH width="50%">Razão Social</TH>

   <TH width="50%">E-mail</TH>

 </TR>

 

Retornando ao nosso WebModule, insira um objeto do tipo TPageProducer, alterando as seguintes propriedades:

Objeto

Propriedade

Valor

 TpageProducer

 Name

 

 

 HtmlFile

 Aponte para o arquivo cabecalho.htm

 

 

 

 

 

 

 

No evento OnHtmlTag, insira o código que segue:

 

if TagString='pagina' then

  ReplaceText:=InttoStr(iPagina);

 

Neste ponto vamos criar nossa Action. Com o duplo-clique no WebModule, crie uma nova Action com as seguintes características:

 

Objeto

Propriedade

Valor

 Action

 Name

ActImprime

 

 PathInfo

 /imprime

 

 

 

 

 

 

No evento OnAction, insira o código que segue:

 

begin

   iLinhas_porPagina:=3;

   iLinha_Atual:=1;

   iPagina:=1;

 

   // Banco

      BancoDados.Open;

      SqlClientes.Open;

 

   // Imprime primeiro Cabecalho

      Response.Content:=ppRelatorio.Content;

 

   with SqlClientes do

   begin

     while not(eof) do

     begin

       Response.Content:=Response.Content+

       '<tr>'+

       ' <td>'+fieldByName('RAZAO_SOCIAL').Value+'</td>'+

       ' <td>'+fieldByName('Email').Value+'</td>'+

       '</tr>';

       inc(iLinha_atual);

       if iLinha_Atual>iLinhas_porPagina then

       begin

        Inc(iPagina);

        iLinha_Atual:=1;

        Response.Content:=Response.Content+

        '</table>'+

        '<P class="eject">'+

        ppRelatorio.Content;

       end;

     Next;

     end;

   end;

 end;

 

Compile e execute no browser: http://localhost/relatorio.exe/imprime

A figura 1 ilustra nosso relatório em execução.

 

Figura 1 – Relatório

 

A figura 2 ilustra o Preview do nosso relatório, demonstrando as quebras de página.

 

Figura 2 – Preview

Vejamos o funcionamento do nosso projeto. Primeiro, definimos no documento HTML um estilo para quebra de páginas

 

  <style type="text/css">

    .eject {

      page-break-before: always;

    }

 

Repare que no documento HTML, não fechamos a tag <TABLE>. Esse procedimento é disparado em nossa Action, a cada mudança de página.

O código implementado no Delphi é bastante simples, onde temos um controle eficiente de quebra de páginas, baseado numa combinação de “style sheet” e variáveis globais (iLinhas_porPagina, iLinha_Atual e iPagina).

A cada registro, incrementamos a variável iLinha_Atual, e verificamos se a mesma atingiu o limite por página (iLinhas_porPagina). Em caso afirmativo, “ejetamos” a página, e imprimimos novamente o cabeçalho.

Simples!

 

Amigos, o primeiro é assim mesmo... depois complica! Brincadeira!!!

Sugiro que sejam criadas duas funções para tratar cabeçalho e rodapé, além de uma função para tratar regras de negócios para os relatórios. Rapidamente você conseguirá criar um engine poderoso para geração de relatórios.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Ficou com alguma dúvida?