Grafico de linhas no TChart, estou apanhando feio..

Delphi

09/06/2005

Galera, eh o seguinte..

eu preciso fazer um maldito grafico de vendas por periodo e estou apanhando feio do TChart..

eu preciso fazer um grafico muito simples, que eh de vendas por periodo, ou seja..
o grafico eh assim, o usuario seleciona o intervalo de datas e aih eu monto um grafico onde X eh cada mes no intervalo de datas selecionado e Y o total de vendas de cada produto, aih crio uma serie pra cada produto e coloco no grafico..como vcs viram eh bem simples, nao tem nada demais..porem eu nao consigo acertar na criacao dos valores X, pq eu nao quero ter os valores de X apenas onde existem registros, mas sim ´mes/ano´ no intervalo de datas e as linhas saindo da sua posicao no grafico..por exemplo, se tenho vendas pra determinado produto apenas em janeiro e setembro, mas o intervalo de datas eh referente ao ano todo eu quero exibir de jan/2005 ateh dez/2005 e as linhas representando vendas em janeiro e setembro..
bom, o que eu quero fazer eh isso, mas nao estou conseguindo pq os valores de X entram em conflito com os meses e o grafico fica todo errado..

bom, eh isso..se alguem tiver um grafico desse tipo e puder me passar ou se puder me ajudar nisso aqui eu fico MUITO, MUITO agradecido...

ps.:estou usando o TChar

valeu...


Saint

Saint

Curtidas 0

Respostas

Saint

Saint

09/06/2005

Por favor galera, tentem me dar uma mao..to desesperado com isso..

valeu, abração..


GOSTEI 0
Lucas Silva

Lucas Silva

09/06/2005

Não sei como anda o seu desenvolvimento ai..
Mais a primeira coisa a se fazer, é adicionar as séries de acordo com sua pesquisa...
Tipo assim... se o intervalo dee datas é 4 meses então você cria as 4 series....


Depois disto você tem que fazer a sql, que irá te mostrar os valores para cada mes...
para fazer esta sql, te aconselho a usar o comando groupby para já agrupar pela data...

Não sei se fui bem claro, mais qualquer dúvida, poste aqui,

Um abraço,
Lucas!


GOSTEI 0
Christian_adriano

Christian_adriano

09/06/2005

Olá Colega,

um exemplo para vc estudar....

procedure MontarSelect(TabContPagar, TabContReceber, DataContPagar, DataContReceber, SomaContPagar, SomaContReceber, sAno : String; aQuery : TSQLQuery);
begin

  with aQuery do
   begin
      Close;
      SQL.Clear;
      SQL.Add(´Select distinct (Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Janeiro and CR.´+DataContPagar+´ <= :FinalJaneiro) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Janeiro ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalJaneiro) Janeiro, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Fevereiro and CR.´+DataContPagar+´ < :FinalFevereiro) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Fevereiro ´);
      SQL.Add(´and CP.´+DataContReceber+´ < :FinalFevereiro) Fevereiro, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Marco and CR.´+DataContPagar+´ <= :FinalJMarco) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Marco ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalMarco) Marco, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Abril and CR.´+DataContPagar+´ <= :FinalAbril) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Abril ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalAbril) Abril, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Maio and CR.´+DataContPagar+´ <= :FinalMaio) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Maio ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalMaio) Maio, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Junho and CR.´+DataContPagar+´ <= :FinalJunho) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Junho ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalJunho) Junho, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Julho and CR.´+DataContPagar+´ <= :FinalJulho) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Julho ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalJulho) Julho, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Agosto and CR.´+DataContPagar+´ <= :FinalAgosto) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Agosto ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalAgosto) Agosto, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Setembro and CR.´+DataContPagar+´ <= :FinalSetembro) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Setembro ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalSetembro) Setembro, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Outubro and CR.´+DataContPagar+´ <= :FinalOutubro) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Outubro ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalOutubro) Outubro, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Novembro and CR.´+DataContPagar+´ <= :FinalNovembro) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >= :Novembro ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalNovembro) Novembro, ´);
      SQL.Add(´(Select Sum(CP.´+SomaContReceber+´) - (Select Sum(CR.´+SomaContPagar+´ ) from ´+TabContPagar+´ CR Where CR.´+DataContPagar+´ >= :Dezembro and CR.´+DataContPagar+´ <=:FinalDezembro) from ´+TabContReceber+´ CP where CP.´+DataContReceber+´ >=:Dezembro ´);
      SQL.Add(´and CP.´+DataContReceber+´ <= :FinalDezembro) Dezembro  ´);
      SQL.Add(´From ´+TabContReceber+´ C Where C.´+DataContReceber+´ >=´´01/01/´+sAno+´´´ and C.´+DataContReceber+´ <= ´´12/31/´+sAno+´´´´);
   end;
  aQuery.ParamByName(´Janeiro´).AsDate := StrToDate(´01/01/´+sAno);
  aQuery.ParamByName(´FinalJaneiro´).AsDate := StrToDate(´31/01/´+sAno);
  aQuery.ParamByName(´Fevereiro´).AsDate := StrToDate(´01/02/´+sAno);
  aQuery.ParamByName(´FinalFevereiro´).AsDate := StrToDate(´01/03/´+sAno);
  aQuery.ParamByName(´Marco´).AsDate := StrToDate(´01/03/´+sAno);
  aQuery.ParamByName(´FinalMarco´).AsDate := StrToDate(´31/03/´+sAno);
  aQuery.ParamByName(´Abril´).AsDate := StrToDate(´01/04/´+sAno);
  aQuery.ParamByName(´FinalAbril´).AsDate := StrToDate(´30/04/´+sAno);
  aQuery.ParamByName(´Maio´).AsDate := StrToDate(´01/05/´+sAno);
  aQuery.ParamByName(´FinalMaio´).AsDate := StrToDate(´31/05/´+sAno);
  aQuery.ParamByName(´Junho´).AsDate := StrToDate(´01/06/´+sAno);
  aQuery.ParamByName(´FinalJunho´).AsDate := StrToDate(´30/06/´+sAno);
  aQuery.ParamByName(´Julho´).AsDate := StrToDate(´01/07/´+sAno);
  aQuery.ParamByName(´FinalJulho´).AsDate := StrToDate(´31/07/´+sAno);
  aQuery.ParamByName(´Agosto´).AsDate := StrToDate(´01/08/´+sAno);
  aQuery.ParamByName(´FinalAgosto´).AsDate := StrToDate(´31/08/´+sAno);
  aQuery.ParamByName(´Setembro´).AsDate := StrToDate(´01/09/´+sAno);
  aQuery.ParamByName(´FinalSetembro´).AsDate := StrToDate(´30/09/´+sAno);
  aQuery.ParamByName(´Outubro´).AsDate := StrToDate(´01/10/´+sAno);
  aQuery.ParamByName(´FinalOutubro´).AsDate := StrToDate(´31/10/´+sAno);
  aQuery.ParamByName(´Novembro´).AsDate := StrToDate(´01/11/´+sAno);
  aQuery.ParamByName(´FinalNovembro´).AsDate := StrToDate(´30/11/´+sAno);
  aQuery.ParamByName(´Dezembro´).AsDate := StrToDate(´01/12/´+sAno);
  aQuery.ParamByName(´FinalDezembro´).AsDate := StrToDate(´31/12/´+sAno);

end;

procedure GerarGrafico(Ano : String; Grafico : TBarSeries; Panel : TPanel; Conexao : TSQLConnection);
var
  sAnoI : TDate;
  TabGrafico : TSQLQuery;
begin
    try
       try
          // Criando Query de Pesquisa
          TabGrafico := TSQLQuery.Create(nil);
          TabGrafico.SQLConnection := Conexao;
          // Testa o Ano
          sAnoI := StrToDate(´01/01/´ + Ano);
          with TabGrafico do
           begin
              MontarSelect(´ContPagar´, ´ContRec´, ´dt_pgto´, ´Data_Pagto´, ´vl_pgto´, ´Valor_Pagto´,Ano, TabGrafico);
              Panel.Visible := False;
              if (not Prepared) then
                Prepared := true;
              Open;
              if (RecordCount > 0) then begin
                 // Manipulando o TChart (Series1)
                 Grafico.Clear;
                 Grafico.AddBar(TabGrafico.FieldByName(´Janeiro´).AsCurrency, ´Janeiro´, clBlue);
                 Grafico.AddBar(TabGrafico.FieldByName(´Fevereiro´).AsCurrency, ´Fevereiro´, clBlack);
                 Grafico.AddBar(TabGrafico.FieldByName(´Marco´).AsCurrency, ´Março´, clRed);
                 Grafico.AddBar(TabGrafico.FieldByName(´Abril´).AsCurrency, ´Abril´, clLime);
                 Grafico.AddBar(TabGrafico.FieldByName(´Maio´).AsCurrency, ´Maio´, clYellow);
                 Grafico.AddBar(TabGrafico.FieldByName(´Junho´).AsCurrency, ´Junho´, clFuchsia);
                 Grafico.AddBar(TabGrafico.FieldByName(´Julho´).AsCurrency, ´Julho´, clSilver);
                 Grafico.AddBar(TabGrafico.FieldByName(´Agosto´).AsCurrency, ´Agosto´, clGray);
                 Grafico.AddBar(TabGrafico.FieldByName(´Setembro´).AsCurrency, ´Setembro´, clNavy);
                 Grafico.AddBar(TabGrafico.FieldByName(´Outubro´).AsCurrency, ´Outubro´, clGreen);
                 Grafico.AddBar(TabGrafico.FieldByName(´Novembro´).AsCurrency, ´Novembro´, clMaroon);
                 Grafico.AddBar(TabGrafico.FieldByName(´Dezembro´).AsCurrency, ´Dezembro´, clLtGray);
                 Grafico.ValueFormat := ´#,0.00´;
                 Panel.Visible := true;
              end else begin
                 Application.MessageBox(´Não foi encontrado nenhum registro!´,´Aviso´,mb_OK+MB_ICONWARNING);
                 exit;
              end;
           end;
       finally
         TabGrafico.Free;
       end;
    except
      Application.MessageBox(´Ano inválido!´,´Atenção´, mb_OK + MB_ICONWARNING);
      abort;
    end;
end;


t+


GOSTEI 0
POSTAR