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

Quickreport Relatório


Eder

Pergunta

Ola..Pessoal

Tou fazendo um relatório muito complexo..ele totaliza por mês os dados, passando pro usuario a soma dos registros dos 12 meses do ano..bom até aqui beleza...to conseguindo fazer e está funcionando.

Mas.......seguinte

Tenho no Quickrep1 dois quireis....uma chamadao query1 e outro qrymeses esta ultima pra fazer os calculos por mês..e mostrar

Nesta QRYMESES esta assim na sql dentro do quickrep1:

sum(VALOR_N_FISCAL) as TOTVM,

sum(FRETE_PESO) as TOTFPESO,

sum(FRETE_VALOR) as TOTFVALOR,

sum(DESPACHO) as TOTDESPACHO,

sum(VLR_ICMS) as TOTICMS,

sum(VALOR_FRETE) as TOTFRETE,

sum(PACOTE) as TOTQTDCTRC

FROM CTRC

where extract(month from DATA_EMISSAO)=:pMes

and extract(year from DATA_EMISSAO)=:pAno

and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))

No parametro da QRYMESES está assim:rep
pMes e pAno

Notem que o filtro é em cima da qrymeses.....

Como o form do quickrepor está sendo muito complexo fazer mtos detalhes....mtos qrlabels, calculo no onprint dos qrlabens em fim uma trabalheira danada...

mas eu tenho que usar este form do quick pra mtos outros filtros de relatorio...

Pergunta:

Como o filtro esta dentro da QRYMESES.....e estou precisando fazer outros filtros......eu não queria montar tudo de novo um novo form do quick....então eu preciso de algo que aproveite o form de relatorio mas que me de mtas opções de filtro na tabela, tipo um codigo no botão de imprimir, mas que altere esta qrymeses os filtros.

Acho que me extendi muito..mas é a maneira pra explicar.

Pessoal...se não entendeu me pergunte por favor..

muito Grato.

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Olá Eder,

que tipo de filtro você se refere?

desculpe, mas ainda não consegui entender direito sua duvida.

Perguntas:

Como você esta fazendo a busca nessa query QRYMESES? você esta abrindo a query para cada mês?, tipo, em um WHILE mês a mês? Com os dados selecionados sempre vai trazer o resultado dos 12 meses ou pode variar?

Abs. Progr'amador.

B)

Link para o comentário
Compartilhar em outros sites

  • 0

na verdade todo o filtro é feito em cima da qrymeses como mostra abaixo:

Nesta QRYMESES esta assim na sql dentro do quickrep1:

sum(VALOR_N_FISCAL) as TOTVM,

sum(FRETE_PESO) as TOTFPESO,

sum(FRETE_VALOR) as TOTFVALOR,

sum(DESPACHO) as TOTDESPACHO,

sum(VLR_ICMS) as TOTICMS,

sum(VALOR_FRETE) as TOTFRETE,

sum(PACOTE) as TOTQTDCTRC

FROM CTRC

where extract(month from DATA_EMISSAO)=:pMes

and extract(year from DATA_EMISSAO)=:pAno

and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))

No parametro da QRYMESES está assim:

pMes e pAno

Mas em cima de cada qrlabel no onprint é colocado tipo assim:

procedure TFormCRem.QRLabel95Print(sender: TObject; var Value: String);

begin

qryMeses.Close;

//abaixo a variavel pano trata o ano

qryMeses.ParamByName('pAno').AsInteger := StrToInt(Form5.ComboBox1.Text); //selecionada o ano

//abaixo a variavel pmes trata o mês

qryMeses.ParamByName('pMes').AsInteger := 1; //mês 1-janeiro

//abaixo a variavel pcliente trata o cliente

qryMeses.ParamByName('pCliente').AsString := Form5.EditCnpjPag.Text;

qryMeses.Open;

{aqui a variavel que totaliza o total p/ mês (janeiro) na banda detail}

TotJaneiroQTDCTRC := TotJaneiroQTDCTRC + qryMesesTOTQTDCTRC.AsCurrency;

//

{aqui a varivel que totaliza na banda amarela o total geral}

TJanQTDCTRC := 0;

TJanQTDCTRC := TJanQTDCTRC + qryMesesTOTQTDCTRC.AsCurrency;

//

Value := FormatFloat('###,###,##0.00',qryMesesTOTQTDCTRC.AsCurrency);

//abaixo ele verifique se o valor é 0,00 se for ele não conta o registro...que é mostrado no qrlabel67

If (value<>'0,00') and (value<>'') then

RJanQTDCTRC := RJanQTDCTRC + 1;

end;

funciona legal...porem agora eu preciso fazer com outros filtros ...e no atual modelo em tenho que filtrar na qrymeses como mostra la em cima em filtrando exemplo:
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))

entendeu?? eu teria que filtrar outras opções...mas como filtrar sem ter que montar mais um form com todos estes componetes que montei....eu teria que aproveitar este form do quick para diversos filtros

Compreendeu??

Link para o comentário
Compartilhar em outros sites

  • 0

Olá eder,

Abrir em QRLabel isso torna seu relatorio lento dependendo do volume de dados, netão você pode usar o UNION na select pra abrir uma so vez, não se assuste com o tamanho da select:

SELECT '01' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 1
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '02' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 2
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '03' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 3
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '04' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 4
and extract(year from DATA_EMISSAO)= :pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '05' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 5
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '6' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 6
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '7' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 7
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '8' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 8
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '9' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 9
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '10' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 10
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '11' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 11
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))
UNION
SELECT '12' AS mês,
sum(VALOR_N_FISCAL) as TOTVM,
sum(FRETE_PESO) as TOTFPESO,
sum(FRETE_VALOR) as TOTFVALOR,
sum(DESPACHO) as TOTDESPACHO,
sum(VLR_ICMS) as TOTICMS,
sum(VALOR_FRETE) as TOTFRETE,
sum(PACOTE) as TOTQTDCTRC
FROM CTRC
WHERE extract(month from DATA_EMISSAO)= 12
and extract(year from DATA_EMISSAO)=:pAno
and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))[/codebox]

posta aí um exemplo pratico desse "filtro" você está falando.

Abs. Progr'amador.

B)

Link para o comentário
Compartilhar em outros sites

  • 0

Abrir em QRLabel isso torna seu relatorio lento dependendo do volume de dados, netão você pode usar o UNION na select pra abrir uma so vez, não se assuste com o tamanho da select:

Resposta: O Paradox suporte esta tal de UNION ??? hehehe

posta aí um exemplo pratico desse "filtro" você está falando.

Resposta: bom ai é o seguinte....veja o codigo abaixo que esta na qrymeses

SELECT sum(KG_CALCULO) as TOTPESO,

sum(VALOR_N_FISCAL) as TOTVM,

sum(FRETE_PESO) as TOTFPESO,

sum(FRETE_VALOR) as TOTFVALOR,

sum(DESPACHO) as TOTDESPACHO,

sum(VLR_ICMS) as TOTICMS,

sum(VALOR_FRETE) as TOTFRETE,

sum(CONTADOR) as TOTQTDCTRC

FROM CTRC

where extract(month from DATA_EMISSAO)=:pMes

and extract(year from DATA_EMISSAO)=:pAno

and SIGLA_CTRC=:pFilial

and ((SITUACAO_CTRC = "F") OR (SITUACAO_CTRC = "L") OR (SITUACAO_CTRC = "P"))

note a linha do filtro:

and SIGLA_CTRC=:pFilial

alem desta linha hoje eu coloco em cada qrlabel Onprint esta linha:

qryMeses.Close;

//abaixo a variavel pano trata o ano

qryMeses.ParamByName('pAno').AsInteger := StrToInt(Form4.ComboBox1.Text); //selecionada o ano

//abaixo a variavel pmes trata o mês

qryMeses.ParamByName('pMes').AsInteger := 1; //mês 1-janeiro

//abaixo a variavel pFilial trata a filtragem da filial

qryMeses.ParamByName('pFilial').AsString := Form4.ComboFilial.Text;

qryMeses.Open;

{aqui a variavel que totaliza o total p/ mês (janeiro) na banda detail}

TotJaneiroQTDCTRC := TotJaneiroQTDCTRC + qryMesesTOTQTDCTRC.AsCurrency;

//

{aqui a varivel que totaliza na banda amarela o total geral}

TJanQTDCTRC := 0;

TJanQTDCTRC := TJanQTDCTRC + qryMesesTOTQTDCTRC.AsCurrency;

//

Value := FormatFloat('###,###,##0.00',qryMesesTOTQTDCTRC.AsCurrency);

//abaixo ele verifique se o valor é 0,00 se for ele não conta o registro...que é mostrado no qrlabel67

If (value<>'0,00') and (value<>'') then

RJanQTDCTRC := RJanQTDCTRC + 1;

veja esta linha
qryMeses.ParamByName('pFilial').AsString := Form4.ComboFilial.Text;

notou que esta linha na qrymeses:

and SIGLA_CTRC=:pFilial
esta referenciando esta no onprint do qrlabel:
qryMeses.ParamByName('pFilial').AsString := Form4.ComboFilial.Text;

notou que as duas linhas se completam??

compreendeu??

Grato

Link para o comentário
Compartilhar em outros sites

  • 0

Progr'amador, se o Eder, controlar a impressão na mão não ficaria mais simples, talvez?

Se entendí direito, ele está listando para cada item em Query1, os totais mensais - todos os meses do ano (12) - independente de haverem registros ou não. Se for isso, acho que daria para, mantendo ligada a query1 ao quickrep cujos dados estariam na banda Detail, adicionar uma banda do tipo SubDetail (controlando sua impressão na mão, via evento OnNeedData) para impressão dos valores mensais. O uso de bandas Header e Footer ligadas a SubDetail controlariam os totalizadores.

Não seria necessário utilizar UNION, ao invés disto utilizaríamos com GROUP BY.

Segue um exemplo em anexo para verificação.

Abraços

QuickRep___Detail_SubDetail.zip

Link para o comentário
Compartilhar em outros sites

  • 0

Michel.....beleza??

Carinha me falaram que a GROUP BY neste caso o paradox não suportaria...

mas...beleza...eu tentei abrir

este modelo que você me passou não consegui abrir... esta num formato inválido....

poderia dar uma verificada??

Eu montei como falei acima.....um relatório...mas ele faz conta em cima de qrlabens(variaveis),,,,e o relatorio é muito lento pois a base dados vai chegar logo a 100.000 registros e ai vai demorar uns 10 minutos pra tirar um relatorio é muito tempo..

mas beleza carinha muito grato..t+

:D

Link para o comentário
Compartilhar em outros sites

  • 0
Michel.....beleza??
Eu até estou acostumado a ouvir deste modo, mas escrito, eu ainda prefiro Micheus. ;)

Carinha me falaram que a GROUP BY neste caso o paradox não suportaria...

mas...beleza...eu tentei abrir

Acho que não procede. Observe que o exemplo que postei utiliza tabela paradox e o código para inicializá-la no relatório é:
procedure TForm1.PrintPreview;
begin
 // limpa a query original, adicionada ao componente para
 // viabilizar criação dos campos em design-time
  QryMeses.SQL.Clear;
  QryMeses.SQL.Add('select Ano, mês, SUM(Valor) as Valor');
  QryMeses.SQL.Add('from totais.db');
  QryMeses.SQL.Add('where Ano = :ano');
  QryMeses.SQL.Add('  and Cliente = :cliente');
{  // outros filtros podem ser incluído aqui
  QryMeses.SQL.Add('  and campo = :parametro');
  ...
}
  QryMeses.SQL.Add('group by Ano, mês');
  QryMeses.SQL.Add('order by Ano, mês');

  Query1.Open;
  QuickRep1.Preview;
end;

este modelo que você me passou não consegui abrir... esta num formato inválido....

poderia dar uma verificada??

Não abriu o anexo ou o projeto? O projeto foi feito em D3 (é o que eu tinha na hora) mas nunca tive problema em abrir um deles no D7. :huh:

Se o problema foi com o anexo, tente baixar deste link.

Se for com o projeto, exclua os arquivos .dof e .dsk - deve funcionar.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Eu até estou acostumado a ouvir deste modo, mas escrito, eu ainda prefiro Micheus.

HEHEHE....é de novo ....
Se o problema foi com o anexo, tente baixar deste link.
carinha poderias mandar no meu email: e3dias@ig.com.br

não to conseguindo baixar está dando erro.....

Haaaa.....não sei se o exemplo que você esta me passando é o que estou tentando fazer.

eu tou tentando totalizar mês a mês os valores...TIPO exemplo:

ITEM......JAN....FEV....MAR...ABR

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

VALOR 10 5 25 15

VALOR2 5 10 15 10

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

TOTAL....25......25........40.....25

Mas....beleza...Micheus..muito grato....t+

haa....agora acho que acertei o nome...rsrsrs.

falou

:D

Link para o comentário
Compartilhar em outros sites

  • 0
carinha poderias mandar no meu email: e3dias@ig.com.br

não to conseguindo baixar está dando erro.....

Foi!!!

Haaaa.....não sei se o exemplo que você esta me passando é o que estou tentando fazer.

eu tou tentando totalizar mês a mês os valores...TIPO exemplo:

ITEM......JAN....FEV....MAR...ABR

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

VALOR 10 5 25 15

VALOR2 5 10 15 10

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

TOTAL....25......25........40.....25

Não, porque você não tinha deixado claro que era este o formato, mas podemos trabalhar nele, apesar que não vai dar para fugir muito do recurso que você utilizou.

Vou ter que dar uma olhada, mas eu sei que existe um pacote que extende funções do QuickReport que, se não me engano, teria algum componente que poderia ser utilizado para contornar esta situação.

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

Ok...recebi.....agora tenho que sentar e ver com calma ....vou ver no final de semana em casa...aqui na empresa fica meio embaçado..mas pelo que vi de primeira mão parece fácil..mas o probleminha vai ser o layout mesmo tenho que fazer dentro do layout que passei...pro usuario que analisa é um layout muito bom ...em apenas meia folha você mostra pro usuario todos os numeros dos 12 meses do anao...mas como você mencionou não vai fugir muito do que já tenho né?

então está..se tiveres uma outra idéia..por favor de um toque. :D

muito Grato.....Micheus

t+

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...