• 0
Sign in to follow this  
Eder

Modelinho De Relatório

Question

Por favor vê se alguém pode me ajudar....

Eu precisaria de algum modelinho de Relatório no QuickReport tipo assim:

Que trabalhe com dois resultados...

Um o undefined com o lançamentos de todas as despesas....que são alimentados por uma unica tabela...cpagar.db e com o contas a receber que são também alimentados por uma uma unica tabela...creceber.db

exemplo do layont de que precisava aprender:

Terias algum modelinho de relatório no quickreport tipo assim:

Que trabalhe com dois resultados...

Um o contas a pagar com o lançamentos de todas as despesas....que são alimentados por uma unica tabela...cpagar.db e com o contas a receber que são também alimentados por uma uma unica tabela...creceber.db

exemplo do layont de que precisava aprender:

-----------------------------------------------------------------------------------------

Relatório de contas a pagar e receber do periodo 00/00/0000 a 99/99/9999

Contas à receber:

Cliente: valor

--------------------

Jose 10,00

mario 15,00

maria 20,00

===============

total................45,00

Contas à Pagar:

Fornecedor: valor

----------------------

Oficina do zé 10,00

vale transporte 10,00

Gas 20,00

===============

tgotal................40,00

Resultado Geral(Contas a receber - Contas a Pagar): R$ 5,00

alguém já fez este tipo de relatorio para me dar algumas dicas....??

muito Grato.. :)

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Eder, acredito que você possa utilizar o TQRCompositeReport.

A idéia é a seguite, você adiciona dois componentes TQuickRep ao form e faz o "desenho" do contas a receber em um deles e no outro o do contas a pagar. Depois você adiciona no form o TQRCompositeReport. Então, no evento OnAddReports, você adiciona os dois relatórios; ex.:

procedure TFormReport.QRCompositeReport1AddReports(Sender: TObject);
begin
  QRCompositeReport1.Reports.Add(QuickRep1);  // contas a receber
  QRCompositeReport1.Reports.Add(QuickRep2);  // contas a pagar
end;
no momento de mostrar o preview, ao invés de utilizar o QuickRep1.Preview, você deverá utilizar: ex.
...
   QRCompositeReport1.Prepare;
   QRCompositeReport1.Preview;
end;

O QRCompositeReport fará com que os dois relatórios saiam "grudados" um após o outro, como se fosse um só. Acho que era disto que você estava falando, não?!

[]s

Share this post


Link to post
Share on other sites
  • 0

Michels......era isto mesmo que precisava ficou jóia...porem o relatorio ficou com dados duplos ou seja dobrou os registros do receber e a pagar veja a imagem no linck abaixo:

rel2.jpg

Eu coloquei assim na query1:

SELECT * FROM RECEBER, PAGAR

O que pode estar errado?? :unsure:

muito Grato Carinha...

Share this post


Link to post
Share on other sites
  • 0

Eder, acho que esqueci de dizer, quando falei em dois quick's, que você utiliza um dataset para cada. Ou seja, você terá um para o Receber e outro para o Pagar. Cada qual associado ao respectivo relatório.

SELECT * FROM RECEBER, PAGAR
seu select está "simples" assim? Acho que deveria ter algum filtro não? isto resultará em: (nº registros em RECEBER) x (nº registros em RECEBER) = (total de linhas retornadas) (que é o que se percebe na imagem que você postou).

Duas tabelas num FROM lhe "obriga" a ter uma cláusula WHERE que relacione uma a outra (pelo menos) e um filtro (eventualmente).

Posto desta forma e vendo o resultado do seu relatório, tenho a acrescentar que ele poderia também ser feito utilizando apenas um QuickRep, com bandas Group, Detail e Sumary.

Para isso, como você utiliza uma tabela para cada evento, você faria em sua consulta SQL um UNION

SELECT 0 AS IND_TIPO, CODIGO, VALOR

FROM RECEBER

WHERE ....

UNION ALL

SELECT 1 AS IND_TIPO, CODIGO, VALOR

FROM PAGAR

WHERE ....

ORDER BY 1, CODIGO

Esta consulta resultará na concatenação das duas tabelas, porém separadas uma da outra (na sequência) onde IND_TIPO será utilizado pela banda Group para a quebra que separará Receber de Pagar. você pode, então, utilizar GroupFooter's para apresentar o total de cada grupo através de um QRExpr (com SUM);

Na banda Sumary, você totaliza todo o relatório (Receber - Pagar) como já está o fazendo.

[]s

Michels...
Micheus ;)

Share this post


Link to post
Share on other sites
  • 0

Beleza..Carinha entendi.....vou ficar com a primeira idéia que você havia...passado ...fiz como você disse coloquei duas query´s e setei em cada quickrep e deu certo ....não repetiu mais.......quanto ao UNION achei meio complicadinho.....]

Haaa.. quanto ao filtro do relatorio....depois na hora de colocar em pratica mesmo ai eu faço os filtros necessários...agora é para só pegar a idéia do funcionamento.....

Depois na hora....se eu tiver algum probleminha acredito que não....ai vou pedir mais uma ajudinha da sua PESSOA...hehehe......se você puder é claro.... ;)

Haaa...o que eu não sabia...é quando eu coloco duas tabelas num from eu tenho que ter uma clausula where.....agora eu entendi é poque tem certos relatorio que fazia deste jeito e não funciona.....é que não funciona perfeito mesmo....

Mas...beleza....foi muito legal a sua explicação...mais uma vez muito obrigado.....

Abraço......

Share this post


Link to post
Share on other sites
  • 0

haaa...amigão..mais uma coisinha....o meu resultado geral não está dando oque era pra dar.....por exemplo o resultado deveria dar 30 e está dando 50

é um Qrexp e expressão é esta: sum((query1.ValorR) - (Query2.ValorP))

ou seja

query1 é a tabela receber

query2 é a tabela pagar

:(

e o Qrexp esta no quickrep1 na banda sumary....

Antes quando eu tinha uma query da funcionando agora com duas query´s não funciona correto.

tens alguma idéia??

:unsure:

retificando: e o Qrexp1 esta no quickrep2 na banda sumary....

Share this post


Link to post
Share on other sites
  • 0
é um Qrexp e expressão é esta: sum((query1.ValorR) - (Query2.ValorP))

ou seja

query1 é a tabela receber

query2 é a tabela pagar

Eder, não estou certo se funciona(experimente), mas acho que teria que ser:

Expression => SUM(query1.ValorR) - SUM(Query2.ValorP)

Antes quando eu tinha uma query da funcionando agora com duas query´s não funciona correto.

tens alguma idéia??

Esta opção deve funcionar com certeza: adicione um QRLabel na sumary e utilizar os QRExpr's das GroupFooter (Receber e Pagar) para obter o valor.

No evento BeforePrint da banda sumary:

QRLabel.Caption := FormatFloat('#,##0.00', QRExprReceber.Value.dblResult -QRExprPagar.Value.dblResult);

[]s

Share this post


Link to post
Share on other sites
  • 0

Consegui....eu criei duas variaveis globais do tipo real e coloquei em cada Onprint de cada qrexpr

tipo assim:

QrExprReceber:

teste1 := strtofloat(value);

QrExpPagar:

teste2 := strtofloat(value);

ai coloquei um qrlabel e no Onprint dele coloquei:

value := floattostr(teste1 - teste2);

ai funcionou legal....

muito Grato Amigão..t+

Share this post


Link to post
Share on other sites
  • 0
Guest --Erick --

Aproveitando que estão falando em QRcomposite

Consegui juntar dois relatorios usando o QRcomposite, utilizo o Delphi7, e imprimo normalmente a 1 vez, mas quando. vou imprimir novamente dá erro! Se fecho o form onde esta o componente funciona, mas se eu tentar imprimir mais de uma vez da erro.

O que esta acontecendo é que o componente Qrcomposite não perde as informações do primeiro preview da impressão. e quando entra no segundo ele ta este erro: Access violation at address ... in module...

Estou enviando o o codigo para ver se algume pode me ajudar....Agradeço desde já

procedure Tfrmemissao.QRCRAddReports(Sender: TObject);

begin

QRCR.Reports.Add ( QRguia );

QRCR.Reports.Add ( QRrecibo );

//procedure de impressão

try // cria os 2 relatorios para união

application.CreateForm ( tQRguia, QRguia );

application.CreateForm ( tQRrecibo, QRrecibo );

except

end;

//sql relatorio1

QRguia.DSmovi.SetVariable( ':QGUIA', DBguia.text );

QRguia.DSmovi.Close;

QRguia.DSmovi.Open;

//sql relatorio2

QRrecibo.DSmovi.SetVariable( ':QGUIA', DBguia.text );

QRrecibo.DSmovi.Close;

QRrecibo.DSmovi.Open;

//preview QRcomposite

QRCR.Preview;

try // fecha os relatorios

application.RemoveComponent ( QRguia );

QRguia.Destroy;

application.RemoveComponent ( QRrecibo );

QRrecibo.Destroy;

except

end;

Share this post


Link to post
Share on other sites
  • 0

Erick, observe que teria sido mais apropriado que você tivesse criado um novo tópico para este seu problema, já que o título deste pouca referência faz ao seu assunto e pode dificultar a obter respostas. ;)

Bom, o seu código não está exatamente como você postou. Estaria?!

Voce teria colocado todo o código no procedimento QRCRAddReports? Eu espero que não.

pela forma como você está referenciando seus relatórios, vou assumir que você criou eles via opção File->New->Other... New->Report (não é meu modo preferido, mas vamos adiante...)

Voce deve observar que os seus relatórios devem existir antes de adicioná-los ao QRComposite, bem como devem ser destruídos antes que os utilize novamente.

Vamos ver se arrumamos as coisas...

Vou assumir que este seu TFrmEmissao é o form onde você tem um botão para emissão do relatório, assim, no evento OnClick deste botão escreveremos o código que irá alocar dinamicamente os relatórios, preparar a impressão e liberar os forms da memória:

procedure Tfrmemissao.ButtonImprime(Sender: TObject);
begin
  try // cria os 2 relatorios para união
    QRguia := tQRguia.Create(Self);
    QRrecibo := tQRrecibo.Create(Self);

  //sql relatorio1
  // a ordem deve ser garantir o dataset fechado
  // para depois passar o parâmetro e abrí-lo
    QRguia.DSmovi.Close;
    QRguia.DSmovi.SetVariable( ':QGUIA', DBguia.text );
    QRguia.DSmovi.Open;

  //sql relatorio2
    QRrecibo.DSmovi.Close;
    QRrecibo.DSmovi.SetVariable( ':QGUIA', DBguia.text );
    QRrecibo.DSmovi.Open;

  //preview QRcomposite
    QRCR.Prepare;
    QRCR.Preview;
    
  finally
   // liberamos o componente TQuickReport da memória 
   // e inicializamos a respectiva variável com Nil
    FreeAndNil(QRrecibo);
    FreeAndNil(QRguia);
  end;
end;

// evento OnAddReports do QRComposite
procedure Tfrmemissao.QRCRAddReports(Sender: TObject);
begin
  QRCR.Reports.Add( QRguia );
  QRCR.Reports.Add( QRrecibo );
end;

Experimente deste modo e veja se resolve seu problema.

Abraços

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this