Fórum Agrupar informações QuickReport - Mesma Query #516554

13/04/2015

0

Bom dia!

É o seguinte, eu tenho uma query que eu entro com o parâmetro de código de algum produto e ele me traz as informações referentes a aquele produto (Óbvio).
Tenho um LISTBOX onde tenho mais ou menos 10 códigos, fiz uma rotina onde um CONTADOR passa de código em código, manda pra query e gera um relatório de cada através do QuickReport.

Mas agora estou precisando que essas consultas fiquem no mesmo relatório, deixando de ser individuais :(

Ou seja, estou com dificuldade de fazer várias consultas numa única query e ir acumulando no QuickReport a cada consulta.

Eu pesquisei bastante antes de pedir ajuda aqui, mas não achei nenhuma solução/ideia que se enquadra no meu problema.



Obrigado desde já *-*
Mateus Ribeiro

Mateus Ribeiro

Responder

Posts

13/04/2015

Thiago Santana

Mateus posta o código da sua query!
Fica mais fácil
Responder

Gostei + 0

13/04/2015

Mateus Ribeiro

Mateus posta o código da sua query!
Fica mais fácil


Certo, a query traz o total faturado até hoje de determinado produto:

Select p.Descricao, Sum(i.Valor_Total) as Valor_Total
From Produtos p, Notas n, Notas_Itens i
Where p.Codigo = i.Codigo_Produto
           and n.Chave = i.Chave_Nota
           and p.Codigo = :pCodigoProduto 
Group by p.Descricao
Responder

Gostei + 0

13/04/2015

Marcos P

Mateus,

Seu problema é na query ou no report ?

Se for no report, tentou fazer isso criando um relatório com agrupamento simples ( considerando essa mesma query ) ?
Responder

Gostei + 0

13/04/2015

Mateus Ribeiro

Mateus,

Seu problema é na query ou no report ?

Se for no report, tentou fazer isso criando um relatório com agrupamento simples ( considerando essa mesma query ) ?


A query está funcionando perfeitamente, eu coloco o parâmetro do produto e as informações chegam. O problema é que vou entrar com vários parametros e queria que o Report guardasse cada um, acumulando sabe.
Bom eu fiz um agrupamento simples e vários outros que vi na internet rs
Poderia me dizer como seria esse seu método?
Responder

Gostei + 0

13/04/2015

Marcos P

Esses agrupamentos que você fez, não funcionaram ?

O que você precisa é chamar a query várias vezes com parâmetros diferentes, juntando tudo no mesmo relatório ?

Se for isso, existem alternativas :

1. Criar uma stored procedure passando TODOS os parâmetros para a procedure e fazendo com que ela devolva todos os dados de uma única vez, tratando o agrupamento ( simples ) no QRP

ou

2. Passar TODOS os parâmetros para o QRP e rodando a query ( recursivamente ) nos eventos de quebra dos grupos do relatório ( BeforePrint em rbDetail ou rbColumnHeader )
Responder

Gostei + 0

13/04/2015

Mateus Ribeiro

Esses agrupamentos que você fez, não funcionaram ?

O que você precisa é chamar a query várias vezes com parâmetros diferentes, juntando tudo no mesmo relatório ?

Se for isso, existem alternativas :

1. Criar uma stored procedure passando TODOS os parâmetros para a procedure e fazendo com que ela devolva todos os dados de uma única vez, tratando o agrupamento ( simples ) no QRP

ou

2. Passar TODOS os parâmetros para o QRP e rodando a query ( recursivamente ) nos eventos de quebra dos grupos do relatório ( BeforePrint em rbDetail ou rbColumnHeader )


Cara vc definiu em poucas palavras o que eu quero: "chamar a query várias vezes com parâmetros diferentes, juntando tudo no mesmo relatório"

Desconheço essas opções alternativas citadas mas vou pesquisar direitinho aqui pra ver se consigo algo... Mas se por acaso vc tiver um site de exemplo de uso só pra dar aquele adianto, eu agradeceria rs mas já foi de grande ajuda com as alternativas :p


Grato
Responder

Gostei + 0

13/04/2015

Marcos P

Tenho exemplos, sim... mas são bem extensos e em contextos que não seria trivial repassar ( por conta dos bancos de dados associados ).

Vou pesquisar algum material complementar na WEB e se achar, te aviso...

Boa sorte !
Responder

Gostei + 0

13/04/2015

Marcos P

Mateus,

Achei um trecho de código que pode lhe ajudar...

procedure TFrmrepRelSintFat2.QRGroup2BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var i : integer;
begin
  stTotal.Close;
  for i := 1 to stTotal.ParamCount - 1 do
    stTotal.Params[i].Clear;
  stTotal.ParamByName('@Query').asinteger := 2;
  if (DEIni > 0) then begin
    stTotal.ParamByName('@DEIni').asdatetime := DEIni;
    stTotal.ParamByName('@DEFim').asdatetime := DEFim;
  end;
  if (DVIni > 0) then begin
    stTotal.ParamByName('@DVIni').asdatetime := DVIni;
    stTotal.ParamByName('@DVFim').asdatetime := DVFim;
  end;
  stTotal.ParamByName('@TipoDoc').asinteger := stRelatorio.fieldbyname('Tipodoc').asinteger;
  stTotal.ParamByName('@Cidade').asinteger := stRelatorio.fieldbyname('codcidade').asinteger;
  if (FatIni > 0) then begin
    stTotal.ParamByName('@FatIni').asinteger := FatIni;
    stTotal.ParamByName('@FatFim').asinteger := FatFim;
  end;
  if(NFIni > 0) then begin
    stTotal.ParamByName('@NFIni').asinteger := NFIni;
    stTotal.ParamByName('@NFFim').asinteger := NFFim;
  end;
  stTotal.ParamByName('@Empr').asboolean := true;

  stTotal.ParamByName('@Empresa').AsAnsiString := stRelatorio.fieldbyname('empresa').AsAnsiString;

  if not stTotal.Prepared then
    stTotal.Prepare;
  stTotal.Open;

end;


Esse código faz o seguinte... para cada quebra do grupo de dados do relatório ( nesse caso um master / detail ) e antes de imprimir o grupo ( por isso o código foi colocado em QRGroup2BeforePrint), o quickreport executa a stored procedure "stTotal" que totaliza as informações daquele grupo e as armazena para impressão no rodapé do grupo corrente.

Repare que os parâmetros setados para a execução da procedure de totalização, são os parâmetros correntes da procedure principal do relatório ( ... := stRelatorio.fieldbyname... ).

O que você precisa é algo parecido com isso, mas baseado em queries e não em procedures, o que não muda muito o contexto de programação.

Espero que não tenha ficado muito confuso...
Responder

Gostei + 0

14/04/2015

Mateus Ribeiro

Bom dia!

Obrigado por disponibilizar essa rotina! Estou agora estudando como trabalhar com "Stored Procedure" pq eu desconhecia rs

Muito obrigado mesmo, jaja posto qualquer avanço.


Grato
Responder

Gostei + 0

22/04/2015

Mateus Ribeiro

Boa Tarde Marcos!

Fui obrigado a abandonar temporariamente essa questão por motivos mais urgentes.
Mas estou retomando rs

Marcos, poderia me dar uma luz referente a segunda opção que vc deu?
2. Passar TODOS os parâmetros para o QRP e rodando a query ( recursivamente ) nos eventos de quebra dos grupos do relatório ( BeforePrint em rbDetail ou rbColumnHeader )


Obrigado desde já ^^
Responder

Gostei + 0

23/04/2015

Marcos P

Se você rodar a query sem nenhum parâmetro de item, não resolve seu problema ?

Senão rolar, crie uma query dinâmica que gere os parâmetros do listbox em um "in" no where do lado do QRP...

Sobre query dinâmica, dê uma olhada nesse post.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar