Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

flavioavilela

[Resolvido] calcular média de vendas

Recommended Posts

alguém sabe, como fazer uma consulta de todos os itens que eu vendi e ele me dar uma media das vendas de 3 meses atras, 6 meses atrás e por ai vai???? eu poderia dividir uma soma dos itens por 30, 60, 90, 120 e por ai vai, só que, se o ano for bisexto? tem alguma formula ou procedimento do delphi q faça isso???

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem pessoal, tentei fazer uma forma aqui, meio 'mecanica', mas, se alguem souber de uma forma mais viavel e mais clara, por favor, me ajude... segue abaixo, o código que fiz:

with dm.qrymedia_itens_vendidos do
	begin
	  close;
	  sql.Clear;
	  sql.Add('select sum(Quantidade) as Qtde from Itens_Venda where Codigo_Produto = :Produto');
	  Parameters.ParamByName('Produto').Value:= dm.qryquantidade_itens_vendidos.FieldByName('Codigo_Produto').AsString;
	  open;
	end;

	EdtMedia_3Meses.Text:= ((dm.qrymedia_itens_vendidos.FieldByName('Qtde').Value) / 90);
	EdtMedia_6Meses.Text:= ((dm.qrymedia_itens_vendidos.FieldByName('Qtde').Value) / 180);
	EdtMedia_12Meses.Text:= ((dm.qrymedia_itens_vendidos.FieldByName('Qtde').Value) / 360);
fiz a somatória das quantidades de produto por produto (até ai, acho normal) ai depois, atribui o resultado da somatória a um edit dividindo pelo número de dias que quero dividir... ai que achei meio sem lógica.......... tanto que, se eu pegar a mesma somatória e for dividindo sempre por números maiores que o anterior, obvio que vai dar sempre um número menor que o outro...... entao, queria saber como fazer esse esquema ai de forma mais fácil....

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo assim, vou tentar reformular a pergunta e v se alguem pode me ajudar: tipo, eu preciso 'voltar' a uns 3 meses atras e calcular a media de vendas daquele mes a 3 meses.... ou, voltar a 6 meses atras e calcular a média daquele mes a 6 meses.... alguem que já fez isso, pode dar uma luz???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Flavio,

 

represente o que você deseja em datas, fica mais fácil entender.

 

- você quer voltar em 01/01/2009 e buscar a média de X meses atrás?

ou

- você quer voltar em 01/01/2009 e buscar a média de X meses para frente?

 

Para não cair em cilada e fazer cálculos errados, não fique amarrando os dias em 30, 60 ou 90 dias.

 

Na minha cabeça, e vendo a query que você enviou, você está buscando os dados através de um produto, e cadê as datas? Está usando a data atual para fazer isso? Coloque um filtro na sua query e trabalhe esse filtro de data, você vai ter a análise exata do que está procurando.

 

Se precisar de ajuda no algoritimo, chama aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi como disse, essa query está errada, mas, nao preciso chamar as datas nao... a principio, seria só alguns itens a titulo de teste, quando der certo, ai eu incremento mais....

 

quanto ao meu select, ele está errado mesmo, fiz algo meio pra quebrar o galho, mas eu sei que está errado e claro que, nao posso pegar por base nos números 30, 60, 90, 120... há varias variaveis que impossibilitam o uso...

 

minha intenção é: voltar a 3 meses atrás, por exemplo, e calcular a média daquele mes... por exemplo, estamos em maio, voltando 3 meses atras estariamos em fevereiro... entao, calcular a media de vendas de fevereiro... entendeu?????? eu sei que é o tanto que eu vendi dividido pela quantidade de dias uteis... os dias úteis eu tenho, um edit me tras quantos dias úteis teve naquele mes, mas, e a soma das minhas vendas de fevereiro, sendo que estamos em maio, como fazer?????? essa é a questão...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos imaginar o seguinte cenário:

 

Tabela do cabeçalho da nota fiscal: CABECALHO

 

ID_NUMERO_NOTA

DT_NEGOCIACAO

 

Tabela itens da nota fiscal: ITEM

 

ID_NUMERO_NOTA

ID_PRODUTO

NR_QTD_VENDA

NR_PRECO_UNITARIO

NR_PRECO_TOTAL

 

Tabela cadastro de produtos: PRODUTO

 

ID_PRODUTO

DS_PRODUTO

 

Hoje é 11/05/2009, e independente do dia de hoje, quero saber a média da venda do produto X no mês Y.

 

with DmPrincipal.qryMediaVenda do
	Close;
	SQL.Clear;
	SQL.Add('select ITE.ID_PRODUTO As "Código"');
	SQL.Add('	 , PRO.DS_PRODUTO As "Descrição"');
	SQL.Add('	 , Sum(ITE.NR_QTD_VENDA) As "NR_QTD_VENDA"');
	SQL.Add('  from CABECALHO CAB join ITEM ITE on (CAB.ID_NUMERO_NOTA = ITE.ID_NUMERONOTA)');
	SQL.Add('					 join PRODUTO PRO on (ITE.ID_PRODUTO = PRO.ID_PRODUTO)');
	SQL.Add(' where TO_CHAR(CAB.DT_NEGOCIACAO, ''MM/YYYY'') between ' + QuotedStr(FiltroInicialDataRetornandoMesAno) + ' and ' + QuotedStr(FiltroFinalDataRetornandoMesAno)); // neste exemplo fitra o mês Y
	SQL.Add('   and ITE.ID_PRODUTO = ' + CodigoProdutoFiltrado); // neste exemplo o produto X
	SQL.Add('group by ITE.ID_PRODUTO');
	SQL.Add('	   , PRO.DS_PRODUTO');
	Open();

	if (not IsEmpty) then
	  edtMedia.Text := FloatToStr(Fields[2].AsFloat / RetornoFuncaoMedia)
	else
	  edtMedia.Text := '0';
  end;

Isso é somente uma idéia, se bem entendi sua dúvida.

 

Qualquer coisa entre em contato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm.. começou a floriar rsrsrs...

ai ta, ao filtrar o mes Y, é só eu pegar o Sum(ITE.NR_QTD_VENDA) As "NR_QTD_VENDA e dividir pela quantidade de dias uteis que já tenho no meu Edit... seria isso será????

Compartilhar este post


Link para o post
Compartilhar em outros sites

flavioavilela,

 

é isso que quis demonstrar aqui:

 

if (not IsEmpty) then
	  edtMedia.Text := FloatToStr(Fields[2].AsFloat / RetornoFuncaoMedia)
	else
	  edtMedia.Text := '0';

Se a query não retornar vazio, pega o resultado do campo com índice 2, (ITE.NR_QTD_VENDA) e divide pelo retorno da sua função com os dias úteis ou total que quer dividir.

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem... só uma dúvida: aqui na minha janela que estou precisando disso, eu informo duas datas, a data inicial e a data final... apartir da data final, eu olho 3 meses para tras e faço o calculo... ai que ta, como eu faço pra saber, a partir da data final que eu informar, qual data é 3 meses atras?? eu informo duas datas para consulta: de 01/05/2009 a 31/05/2009... ele pega 31/05/2009 e v que dia que da a 3 meses atras, 6 meses atras, 9 meses atras a partir da data final....

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função IncMonth do Delphi retorna a quantidade de meses que você deseja.

 

Como utilizar?

IncMonth(Date,1); // Incrementa a data atual em 1 mês

IncMonth(Date,-1); // Decrementa a data atual em 1 mês

 

Aí você trabalha isso.

 

Coloca o IncMonth(DateEdit1.Text, -3); // Vai decrementar em 3 meses, o valor de DateEdit1.Text, que pode ser o campo da sua data inicial ou final, fica a seu critério.

 

Dê uma verifica no próprio Help do Delphi, lá possui uma gama de informações de como trabalhar com datas através das "Dates routines".

 

Grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.