Ir para conteúdo
Fórum Script Brasil
  • 0

Modelinho De Relatório


Eder

Pergunta

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.. :)

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 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

Link para o comentário
Compartilhar em outros 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...

Link para o comentário
Compartilhar em outros 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 ;)
Link para o comentário
Compartilhar em outros 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......

Link para o comentário
Compartilhar em outros 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....

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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+

Link para o comentário
Compartilhar em outros 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;

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...