Jump to content
Fórum Script Brasil
  • 0

Relatórios


VDLR
 Share

Question

Pessoal alguém poderia me dar uma luz de como montar este tipo de relatório.

O usuário solicita um determinado período.

exemplo 01/01/07 a 30/03/07

Tipo do relatório

Faturamento por período

Cliente Janeiro Fevereiro Março

XXXX 150,00 250,00 260,00

YYYY 140,00 130,00 120,00

Total 290,00 380,00 380,00

Abraços

Valdecir

Link to comment
Share on other sites

23 answers to this question

Recommended Posts

  • 0

Olá VDLR

Wu utilizo a seguinte SQL para buscar registros entre determinadas datas:

With TABELA Do
      Begin
        TABELA .Close;
        TABELA .SQL.Clear;
        TABELA .SQL.Add('Select * From TABELA );
        TABELA .SQL.Add('Where CAMPO_DATA between :Inicial and :Final');
        TABELA .Parameters.ParamByName('Inicial').Value := StrToDate(EdtInicial.Text);
        TABELA .Parameters.ParamByName('Final').Value := StrToDate(EdtFinal.text);
        TABELA .SQL.Add('Order By Codigo');
        TABELA .Open;
      end;

Utilizo AdoQuery como componente de conexão com o banco...

A estrutura do relatório você terá que montar conforme sua necessidade....

Espero ter ajudado, qualquer coisa estamos por ai...

Alexandre

Link to comment
Share on other sites

  • 0
O usuário solicita um determinado período.

exemplo 01/01/07 a 30/03/07

Tipo do relatório

Faturamento por período

Cliente Janeiro Fevereiro Março

XXXX 150,00 250,00 260,00

YYYY 140,00 130,00 120,00

Total 290,00 380,00 380,00

é um tipo de relatório chato de fazer com o quick. Na verdade, relatórios deste tipo não são muito simples com a maioria dos geradores de relatórios.

O meio que vejo, implica em ter um certo limite no número de colunas, então, vai a pergunta: qual seria o provável número máximo de colunas que este relatório teria? (imprimindo em landscape acredito que dê para um ano.)

Se não puder limitar, a coisa complica um pouco.

Link to comment
Share on other sites

  • 0
O meio que vejo, implica em ter um certo limite no número de colunas, então, vai a pergunta: qual seria o provável número máximo de colunas que este relatório teria? (imprimindo em landscape acredito que dê para um ano.)

Micheus beleza.

" UM ANO " esta bom demais, alias seria o ideal.

Abraço

Valdecir

Link to comment
Share on other sites

  • 0

VLDR, dê uma olhada neste post do colega paulobergo.

Mesmo em Paradox (não sei se é seu caso) deve funcionar, porém você não utilizará uma data fixa, mas sim um período (between) equivalente ao início e fim do mês.

Veja se você consegue entender a lógica da consulta. Isto facilitaria muito o seu relatório.

Link to comment
Share on other sites

  • 0

Micheus. beleza.

Olhei o post mas fiquei com algumas dúvidas. ;)

No post ele fala no período de uma semana, seleciona o periodo e vem somando os dias certo?

No meu caso, como eu faria para somar meses de uma tabela de faturamento ?

Ex. período de 01/01/2007 a 31/08/2007

Como faço a soma dos meses jan, fev, mar, abr, mai, jun, jul, ago ? :o

Como eu saberia o mês dentro do período ?? :blink:

Abraço

Valdecir

Link to comment
Share on other sites

  • 0
No post ele fala no período de uma semana, seleciona o periodo e vem somando os dias certo?

No meu caso, como eu faria para somar meses de uma tabela de faturamento ?

não tenho 100% de certeza de que daria para aplicar o exemplo ao pé da letra - talvez o paulobergo posso ajudar. Mas, a princípio, a seria uma questão de filtrar o período de 1 ano, no lugar de 1 semana. Agrupar por mês, ao invés de dia.

Como faço a soma dos meses jan, fev, mar, abr, mai, jun, jul, ago ? :o
usando o SUM e agrupando pelo período correspondente ao mês (de 1 a 30 ou 31 - ou 28/29 em fev).

Como eu saberia o mês dentro do período ?? :blink:
dependendo que que banco de dados está utilizando tem uma função/instrução para isto.

Qual bando de dados você está utilizando?

Link to comment
Share on other sites

  • 0

Micheus beleza.

dependendo que que banco de dados está utilizando tem uma função/instrução para isto.

Qual bando de dados você está utilizando?

Estou usando o INTERBASE.

Micheus será que você poderia passar + ou - o que eu preciso fazer ??? ;)

Abraços

Valdecir

Link to comment
Share on other sites

  • 0
Micheus será que você poderia passar + ou - o que eu preciso fazer ???

R.: amigão....seguinte, não sou a pessoa mais indicada pra te dizer como montar um relatório deste tipo, porem passei pelas mesmas dificuldades suas, pois precisava de um relatorio até mais complexo que o seu em paradox.

O problema dele, é que ele é um relatorio lento, pois trabalhei com variaveis no OnPrint dos Qrlabels.

Ele funciona perfeito.....porem é muito chato a montagem dele....mas parece que no seu caso não seria tão dificil pois você quer totalizar os valores de faturamento somente...portanto como sendo apenas um tipo de dado seria mais facil.

A ideia é no quickreport criar duas queries:

*Uma chamada query1 que seria a consulta em si

*Uma query chamada QryMeses que seria a query que iria fazer os calculos dos meses e mostrar no Onprint de cada qrlabel.

nela você colocaria o seguinte codigo:

SELECT sum(Qtdhe) as TOTAL FROM Despesas, func
where (DESPESAS.CODFUN = FUNC.CODIGO) 
and DESPESAS.COMPET NOT LIKE "13/%"
and extract(month from data)=:pMes
and extract(year from data)=:pAno
and Func.Codigo=:pCliente
*você colocaria um qrlabel pra cada mes de faturamento.... em cada qrlabel no onprint você colocaria assim:
procedure TFormRTME2.QRLabel15Print(sender: TObject; var Value: String);
begin
  qryMeses.Close;
  //abaixo a variavel PAno trata o ano
  qryMeses.ParamByName('pAno').AsInteger := StrToInt(FormRTME.ComboBox1.Text); //selecionada o ano
  //abaixo a variavel pmes trata o mes
  qryMeses.ParamByName('pMes').AsInteger := 1; //mes 1-janeiro
  //abaixo a variavel pcliente trata o cliente atraves do codigo do clientes
  qryMeses.ParamByName('pCliente').AsInteger := Query1CODIGO.AsInteger;
  qryMeses.Open;
  {aqui a variavel que totaliza o total p/ mes (janeiro) na banda detail}
  TotJaneiro := TotJaneiro + qryMesesTOTAL.AsCurrency;
  //
  {aqui a varivel que totaliza na banda amarela o total geral}
  TJan := 0;
  TJan := TJan + qryMesesTOTAL.AsCurrency;
  //
  Value := FormatFloat('###,###,##0.00',qryMesesTOTAL.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
RJan := RJan + 1;
end;

Note que é um monte de variaveis.....isto da um nó na cabeça...mas..tem que criar e depois inicializar....em fim...ai vai da sua imaginação...

Mas a ideia central é esta......funciona perfeito, exceto como citei acima o relatorio é muito lento, demora dependendo da quantidade de dados alguns minutos....

Só pra você ter uma ideia...estou com uma base paradox de 120 mb com 70.000 registros de janeiro até agosto deste ano...e o relatorio trabalha com mais dados...faturamento, peso, valormercadoria uns 8 dados....e funciona legal, exceto pela demora...hehehe..

Inclusive eu uma vez postei algo aqui no forum inclusive na época nosso colega Micheus também participou do tópico, pra tentar otimizar o processo mas não tive sucesso e acabei ficando com esta ideia mesma...

Ralei um monte pra montar este tipo de relatorio juntamente com um amigo (Rodrigo Thor de Sinop no Mato Grosso)mais experiente é claro.

Bom é isto ai amigão...Boa sorte..tomará que você consiga...

Espero que ajude a dica.

Abraços. :D

Edited by Eder
Link to comment
Share on other sites

  • 0
Estou usando o INTERBASE.

Micheus será que você poderia passar + ou - o que eu preciso fazer ??? ;)

VDLR, desculpe a demora em dar alguma resposta.

Estive pensando em como exemplificar, de forma simples, o uso do recurso proposto pelo colega paulobergo para uma situação como a sua.

Como acho que pode ser útil a outros colegas ainda iniciantes no assunto, acabei por construir um pequeno artigo tentando explicar cada etapa do processo para a obtenção da consulta que buscaria este tipo de informação. Então, dê uma olhada nele e veja se vai realmente ajudar na compreensão do processo -> "Construindo Uma Consulta Sql Passo-a-passo, Obtendo uma matriz como resultado"

Abraços

Link to comment
Share on other sites

  • 0

VDLR, se conseguir montar a consulta, no formato "tabela", dê uma olhada neste exemplo (em anexo) para ver como o relatório fica bem simples.

Eu usei os componentes IB, mas não consegui sucesso na execução do programa, então a visualização foi feita apenas em modo design-time (ativada consulta, botão direito no QuickTep1, opção Preview do menu). Veja se você configura para rodar no seu PC.

RelTeste.zip

Link to comment
Share on other sites

  • 0
Não consegui abrir o exemplo, no download não tem nenhuma unit.
Como assim?

Eu baixando ele tem lá dentro do zip: RelTeste.dpr, RelTeste.res, uMainForm.dfm, uMainForm.pas, uRelResumo.dfm, uRelResumo.pas e EMPLOYEE.FDB.

Tenta baixar ele do 4Share (RelTeste.zip)

Link to comment
Share on other sites

  • 0

Micheus, tudo bem ?

Consegui fazer o download e testar o sistema, porém estou recebendo o seguinte erro quando clico no botão para exibir o relatório ou tento ativar a Query.

Dynamic SQL error

SQL Error cod = -104

Token Unknown - Line 3, char 6

SELECT.

Não sei o que fazer :unsure:

Abraço

Valdecir

Link to comment
Share on other sites

  • 0
Consegui fazer o download e testar o sistema, porém estou recebendo o seguinte erro quando clico no botão para exibir o relatório ou tento ativar a Query.

Dynamic SQL error

SQL Error cod = -104

Token Unknown - Line 3, char 6

SELECT.

Não sei o que fazer :unsure:

Este erro é executando o exemplo que lhe passei? Ou você já adaptou ao seu projeto e este erro está aparecendo?

Link to comment
Share on other sites

  • 0

Acho que deve ser aquele lance de não suportar select em sub-selects. Lá no post#13 eu postei o tal tutorial, e mencionei esta possibilidade. Lá tinha um link para uma avaliação (Estatistica de resultado de uma consulta SQL) em que a 2ª coluna é uma forma alternativa a este tipo de consulta.

Então, abra a propriedade SQL da consulta e substitua o código pelo que está em anexo.

Cosulta_Completa_Alternativa.txt

Link to comment
Share on other sites

  • 0

Micheus, beleza

Substitui o código, só que agora ao clicar no botão para exibir o relatório recebo a seguinte mensagem de erro.

IBQuery1: Parameter 'DAT_INICIAL' not found.

Precisa fazer alguma alteração nesta procedure

procedure TForm2.ShowReport(DateRef :TDateTime);
begin
  IBQuery1.ParamByName('DAT_INICIAL').AsDateTime := StartOfTheYear(DateRef);
  IBQuery1.ParamByName('DAT_FINAL').AsDateTime := EndOfTheYear(DateRef);
  IBQuery1.Open;
  try
    QuickRep1.Preview;
  finally
    IBQuery1.Close;
  end;
end;

Ao tentar ativar a Query dá este erro.

Dynamic SQL error

SQL Error cod = -104

Token Unknown - Line 2, char 30

AS.

Desculpe a demora.

Abraço

Valdecir

Edited by Micheus
Adicionado o delimitador de código [code] [/code]
Link to comment
Share on other sites

  • 0

Valdecir, pode ficar zangado comigo. Eu esqueci de parametrizá-la. :ph34r:

Já atualizei o anexo no post#20. Voce pode baixá-lo e proceder como indicado lá.

Também substituí os fontes do código no post#14, ficando no relatório dois IBQuery, cada qual com uma versão da consulta, sendo que a que está vinculada ao QuickReport é IBQuery2.

Abraços

Link to comment
Share on other sites

  • 0

Micheus, beleza.

Baixei o código porém só tinha este arquivo

RelTeste

Atualizei a IBQuery do código que eu tinha aqui conforme o anexo do post#20, porém agora ao clicar no botão ou tentar ativar a mesma da o seguinte erro:

Dynamic SQL error

SQL Error cod = -104

Token Unknown - Line 2, char 30

AS.

Poxa, será que tem solução...........

Abraço

Valdecir

Link to comment
Share on other sites

  • 0
Baixei o código porém só tinha este arquivo

RelTeste

mas, "será o benedito?!" :angry:

Faz o seguinte, me envia seu e-mail via MP (mensagem pessoal)

Neste arquivo zipado tem 7 arquivos (até baixei ele do link), você deve estar tendo algum problema.

Link to comment
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.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.5k
×
×
  • Create New...