Você está na página 1de 8

Gerador de Relatorios

Automatico
Com este arquivo voce poderá gerar relatorios automaticamente com o QREPORTs,

FORTSREPORT, RDPRINT, etc. Basta somente indicar qual o resultado de uma SELECT

que voce quer imprimir que ele monta o layout e joga no relatorio
https://www.devmedia.com.br/gerador-de-relatorios-automatico/
8261
Este material foi desenvolvido com o delphi6 e com o quickreport; sendo que
o mesmo pode ser utilizado nas versões delphi7 e 2006; atualmente eu uso
com o delphi 2006 juntamente com o RDPRINT que é pago.
 
O intuito deste relatório e facilitar aos programadores com método simples e
muito poderoso de gerar relatório.
 
Vamos iniciar.
 
Inicie um novo projeto.
 
Acrescente dentro do formulário os seguintes camponentes:
·                     Memo1
·                     2 Button  ( abrir tabela, Imprimir )
·                     DBGrid
·                     Camponente de acesso a banco de dados “Estou usando um
ADOconnection junto com ADoQuery e DataSource; estou usando o SQL
Server ”; você poderá usar qualquer camponente e qualquer banco. Faca a
conecção com algum banco seu.
o        Para facilitar o name dos camponentes são:
§         ADOconnection            C1
§         ADOQuery                             A1
§         DataSource                           D1 “Ligado ao A1”
·                     Acrescente no mesmo formulário “criei no mesmo formulário
apenas por conveniencia” um Quickrep e na propriedade do database do
quickreport digite  A1 para ligaro quicrep a query.
·                     Dentro do quickrepor
o        2 QRBands (“BandType”)
§         PageHeader
§         Detail
·                     No qreport mude a Font para Couriew New  (Esta fonte é
somente para que as letras ficam todas formatadas).
·                     Acrescente 3 QRLabels no QRBAnd1
·                     Acrescente 1 Label no QRBand2
 
Conforme figura abaixo.
 

Vamos a parte braçal do código:


 
Acrescente as seguintes variaveis:
 
var
  Form1: TForm1;                                 // já existente
  vlinha, vqualquer: string;                      
  i: integer;
 
 
No Evendo Print do label3 insira o seguinte código que serve para identicar o
nome de cada coluna para o relatório. Ou seja o que você quiser mostrar no
relatorio ele irar montar os campos automático nos tamanho correspondentes.
 
procedure TForm1.LABEL3Print(sender: TObject; var Value: String);
begin
 vqualquer:='';
 for i:=0 to A1.FieldCount-1 do
 begin
   if UpperCase(A1.FieldDefs[i].name)<>'ORDENAR' THEN
   BEGIN
if TipoCampo(A1.FieldDefs[i].DataType)='IN'
then                                                                                                                      
   
   Vqualquer:=Vqualquer+space(copy(A1.FieldDefs[i].name,1,7),'F',7);
      if TipoCampo(A1.FieldDefs[i].DataType)='ST' then
          Vqualquer:=Vqualquer+space(COPY(A1.FieldDefs[i].name,1,A1.fi
elddefs[i].size),'F',
            A1.fielddefs[i].size)+' ';
       if TipoCampo(A1.FieldDefs[i].DataType)='DT' then
          Vqualquer:=Vqualquer+space(COPY(copy(A1.FieldDefs[i].name,1,
10),1,10),'F',10)+' ';
       if TipoCampo(A1.FieldDefs[i].DataType)='NU' then
          Vqualquer:=Vqualquer+space(copy(A1.FieldDefs[i].name,1,11),'',1
1)+' ';
   END;
 END;
value:=vqualquer;
end;
 
Crie esta funcao que tem por finalidade verificar que tipo de campo ele vai
mostrar.
 
function Tfprincipal.TipoCampo(Campo: TFieldType): String;
begin
    case campo of
       ftFixedChar: Result :='ST';
       ftString   : Result :='ST';
       ftUnknown  : Result :='ST';
       ftInteger  : Result :='IN';
       ftFloat    : Result :='NU';
       ftBCD      : Result :='NU';
       ftAutoInc  : Result :='IN';
       ftDate     : Result :='D2';
       ftDateTime : Result :='DT';
    else
       Result :='ST';
    end;
end;
 
Crie esta função para ele alinhar os campos em tamanhos fixos.
 
function SPACE(V_Campo:stRing; V_LocalEspaco:STRING;
V_QtdCaracter:integer): string;
var
   I:  INTEGER;
   NU: integer;
   NO: string;
begin
   NO:=trim(V_Campo);               // elimina todos espacos
   for i:=length(NO) to V_QtdCaracter-1 do  // em branco
       IF V_LocalEspaco='F' THEN
          NO:=NO+' '
       ELSE
          NO:=' '+NO;
   result:=NO;
end;
 
No evento do label4 insira o codigo que e responsavel por imprimir todas as
linha da tabel.
 
procedure TForm1.LABEL4Print(sender: TObject; var Value: String);
begin
Vlinha:='';
   for i:=0 to A1.FieldCount-1 do
   begin
       if UpperCase(A1.FieldDefs[i].name)<>'ORDENAR' THEN
       BEGIN
          if TipoCampo(A1.FieldDefs[i].DataType)='IN' then
vLINHA:=vLINHA+space(A1.Fields[i].ASSTRING,'F',7);
          if TipoCampo(A1.FieldDefs[i].DataType)='ST' then
vLINHA:=vLINHA+space(COPY(A1.Fields[i].AsString,1,A1.fielddefs[i].
size),'F',A1.fielddefs[i].size)+' ';
          if TipoCampo(A1.FieldDefs[i].DataType)='DT' then
vLINHA:=vLINHA+space(COPY(A1.Fields[i].AsString,1,10),'F',10)+' ';
          if TipoCampo(A1.FieldDefs[i].DataType)='NU' then
          begin
              if  A1.Fields[i].asstring='' then
                  vLINHA:=vLINHA+'           '+' '
              else
                  vLINHA:=vLINHA+space(FORMATFLOAT('####,##0.00',A1
.Fields[i].VALUE),'',11)+' ';
          end;
       END;
   end;
value:=vlinhA;
 
end;
 
No botao abrir banco acrecente o seguinte código que serve para abrir o banco
de dados.
 
procedure TForm1.Button1Click(Sender: TObject);
begin
with a1 do
  begin
    close;
    sql.clear;
    sql.add(memo1.Text);
    open;
  end;
end;
 
No botão imprimir insira o seguinte código que irar mostrar os dados no
quickreport:
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
   if a1.Active=false  then exit;
   if a1.RecordCount=0 then exit;
   label1.Caption:='EMPRESA MODELO SA';
   LABEL2.Caption:='RELATORIO DE DEMONSTRACAO SA';
   QuickRep1.Preview;
End;
 
 
Pronto o gerador de relatório esta pronto. Para funcionar bote uma select
qualquer no memo e clique no botão abrir logo em seguida clik em imprimir;
o mesmo gera o relatorio alinhando todos os campos.
 
 
Obs: Você tem de testar o tamanho dos campos pois ele vai assumir o
tamanho do campo do select para facilitar eu uso os campos
SUBSTRING(Nomedocampo,1,TamanhoDesejado) no SQL Server; no
firibier eu uso o COPY nos demais voce irar usar o correspondente; isto
apenas para dar no formato correto e caber dentro do qreport.
Veja o resultado do relatório

Neste artigo eu usei a minha primeira versão; você pode incrementar o próprio
para fazer botar um formulário e pegar exclusivamente incrementando alguns:
 
·                     Salto de linha
·                     Somatório de resultado
·                     Máster detail
·                     Fonte maior ou menor
·                     Titulo do Relatório conforme suas necessidades
 
 
Espero que tenha ajudado a vocês a incrementar a sua tarefa de fazer relatório
fique bem mais fácil “SEM TRABALHO” para gerar o relatório; você
incrementando não terar mais trabalho.

Você também pode gostar