Urgente Curva ABC ?
Pessoal, estou com um negócio para fechar + uma das condições
do cliente é o controle das Curvas ABC !. Por diversas vezes perguntei, + não obtive uma reposta. Se alguem puder me passar um exemplo pratico de como calculo esta curva ficarei muito agradecido !.
Obrigado a tds !!
do cliente é o controle das Curvas ABC !. Por diversas vezes perguntei, + não obtive uma reposta. Se alguem puder me passar um exemplo pratico de como calculo esta curva ficarei muito agradecido !.
Obrigado a tds !!
Essistemas
Curtidas 0
Respostas
Luineumann
12/11/2003
Curva abc é uma maneira de tabular dados, ok?
por exemplo, imagine o acumulado de vendas de cada produto
você lista os produtos, por exemplo, por quantidade vendida no período (mês, ano, semestre, etc), do mais vendido para o menos vendido
e sempre com uma linha de acumulado e percentual sobre o total
por exemplo, imagine as vendas
Produto Qtd Vendida Valor da Venda
Produto 01a1015,20
Produto 02a21,86
Produto 03x3550,05
Produto 04d6456,32
Produto 05x2115,54
Produto 06y1220,88
Produto 07u1316,51
Produto 08k2335,42
Produto 09l262,60
Produto 10n3362,04
Produto 11m2527,75
Produto 12p1419,74
Produto 13k3244,16
Produto 14a6374,34
Produto 15q89105,02
Produto 16q4162,73
Produto 17x156,30
Produto 18d22,78
Produto 19j31,14
Produto 20p4431,68
um curva abc das vendas pelq quantidade seria mais ou menos o seguinte
Seq.Produto Qtd Vendida Valor da VendaAcumulado ¬
1Produto 15q89105,028915,70¬
2Produto 04d6456,3215326,98¬
3Produto 14a6374,3421638,10¬
4Produto 20p4431,6826045,86¬
5Produto 16q4162,7330153,09¬
6Produto 03x3550,0533659,26¬
7Produto 10n3362,0436965,08¬
8Produto 13k3244,1640170,72¬
9Produto 09l262,6042775,31¬
10Produto 11m2527,7545279,72¬
11Produto 08k2335,4247583,77¬
12Produto 05x2115,5449687,48¬
13Produto 17x156,3051190,12¬
14Produto 12p1419,7452592,59¬
15Produto 07u1316,5153894,89¬
16Produto 06y1220,8855097,00¬
17Produto 01a1015,2056098,77¬
18Produto 19j31,1456399,29¬
19Produto 02a21,8656599,65¬
20Produto 18d22,78567 100,00¬
Somatório das Qtd 567
ela permite ver, por exemplo, que os 5 produtos mais vendidos em quantidade são responsáveis por 53,09¬ das vendas totais
uma curva abc pelo valor das vendas seria
Seq.Produto Qtd Vendida Valor da VendaAcumulado ¬
1Produto 15q89105,02105,0216,11¬
2Produto 14a6374,34179,3627,51¬
3Produto 16q4162,73242,0937,13¬
4Produto 10n3362,04304,1346,64¬
5Produto 04d6456,32360,4555,28¬
6Produto 03x3550,05410,5062,95¬
7Produto 13k3244,16454,6669,73¬
8Produto 08k2335,42490,0875,16¬
9Produto 20p4431,68521,7680,02¬
10Produto 11m2527,75549,5184,27¬
11Produto 06y1220,88570,3987,48¬
12Produto 12p1419,74590,1390,50¬
13Produto 07u1316,51606,6493,03¬
14Produto 05x2115,54622,1895,42¬
15Produto 01a1015,20637,3897,75¬
16Produto 17x156,30643,6898,71¬
17Produto 18d22,78646,4699,14¬
18Produto 09l262,60649,0699,54¬
19Produto 02a21,86650,9299,83¬
20Produto 19j31,14652,06 100,00¬
Total das Vendas 652,06
você vê, por exemplo, que os 5 produtos mais vendidos em termo de valor são responsáveis por 55,28¬ das vendas e que a empresa deve concentrar seus esforços nesses produtos
espero ter ajudado ... existem várias maneiras de fazer uma curva abc, essa é uma delas
por exemplo, imagine o acumulado de vendas de cada produto
você lista os produtos, por exemplo, por quantidade vendida no período (mês, ano, semestre, etc), do mais vendido para o menos vendido
e sempre com uma linha de acumulado e percentual sobre o total
por exemplo, imagine as vendas
Produto Qtd Vendida Valor da Venda
Produto 01a1015,20
Produto 02a21,86
Produto 03x3550,05
Produto 04d6456,32
Produto 05x2115,54
Produto 06y1220,88
Produto 07u1316,51
Produto 08k2335,42
Produto 09l262,60
Produto 10n3362,04
Produto 11m2527,75
Produto 12p1419,74
Produto 13k3244,16
Produto 14a6374,34
Produto 15q89105,02
Produto 16q4162,73
Produto 17x156,30
Produto 18d22,78
Produto 19j31,14
Produto 20p4431,68
um curva abc das vendas pelq quantidade seria mais ou menos o seguinte
Seq.Produto Qtd Vendida Valor da VendaAcumulado ¬
1Produto 15q89105,028915,70¬
2Produto 04d6456,3215326,98¬
3Produto 14a6374,3421638,10¬
4Produto 20p4431,6826045,86¬
5Produto 16q4162,7330153,09¬
6Produto 03x3550,0533659,26¬
7Produto 10n3362,0436965,08¬
8Produto 13k3244,1640170,72¬
9Produto 09l262,6042775,31¬
10Produto 11m2527,7545279,72¬
11Produto 08k2335,4247583,77¬
12Produto 05x2115,5449687,48¬
13Produto 17x156,3051190,12¬
14Produto 12p1419,7452592,59¬
15Produto 07u1316,5153894,89¬
16Produto 06y1220,8855097,00¬
17Produto 01a1015,2056098,77¬
18Produto 19j31,1456399,29¬
19Produto 02a21,8656599,65¬
20Produto 18d22,78567 100,00¬
Somatório das Qtd 567
ela permite ver, por exemplo, que os 5 produtos mais vendidos em quantidade são responsáveis por 53,09¬ das vendas totais
uma curva abc pelo valor das vendas seria
Seq.Produto Qtd Vendida Valor da VendaAcumulado ¬
1Produto 15q89105,02105,0216,11¬
2Produto 14a6374,34179,3627,51¬
3Produto 16q4162,73242,0937,13¬
4Produto 10n3362,04304,1346,64¬
5Produto 04d6456,32360,4555,28¬
6Produto 03x3550,05410,5062,95¬
7Produto 13k3244,16454,6669,73¬
8Produto 08k2335,42490,0875,16¬
9Produto 20p4431,68521,7680,02¬
10Produto 11m2527,75549,5184,27¬
11Produto 06y1220,88570,3987,48¬
12Produto 12p1419,74590,1390,50¬
13Produto 07u1316,51606,6493,03¬
14Produto 05x2115,54622,1895,42¬
15Produto 01a1015,20637,3897,75¬
16Produto 17x156,30643,6898,71¬
17Produto 18d22,78646,4699,14¬
18Produto 09l262,60649,0699,54¬
19Produto 02a21,86650,9299,83¬
20Produto 19j31,14652,06 100,00¬
Total das Vendas 652,06
você vê, por exemplo, que os 5 produtos mais vendidos em termo de valor são responsáveis por 55,28¬ das vendas e que a empresa deve concentrar seus esforços nesses produtos
espero ter ajudado ... existem várias maneiras de fazer uma curva abc, essa é uma delas
GOSTEI 0
Phenomenom
12/11/2003
Colega, dê uma verificada nos componentes ´chart´ e ´dbchart´, lá tem um modelo de curva ABC, eu particularmente nunca usei o chart pra curva ABC, mas assim como o componente já calcula o percentual dos valores que eu uso nos meus gráficos pode já fazer os calculos pra curva ABC.
Instancie um desses objetos que eu citei acima, duplo clique nele, na guia ´séries´ que se encontra na guia ´chart´, clique no botão ´Add´, lá vai ter a opção ´Shape´ com uma figura escrito ´ABC´.
Instancie um desses objetos que eu citei acima, duplo clique nele, na guia ´séries´ que se encontra na guia ´chart´, clique no botão ´Add´, lá vai ter a opção ´Shape´ com uma figura escrito ´ABC´.
GOSTEI 0
M@rcelo
12/11/2003
Amigo, facilitaria muito se vc informasse seu ramo de trabalho, mas vamos la.
No meu ramo trabalho com:
OCAMENTO de SERVICOS que sao compostos de PRODUTOS.
um orcamento pode ter varios servicos que por sua ves pode ter varios produtos.
Para fazer o calculo da curva abc eu sigo o ORCAMENTO item a item pegando os SERVICOS um a um acumulando pode ser em um arquivo temporario ou em um TstringList (q foi o meu caso), sendo que armazeno no Stringlist o CODIGO e a QUANTIDADE de cada PRODUTO, a conta pra cada PRODUTO e a seguinte (Quantidade no ORCAMENTO * a Quantidade no SERVICO).
Bom terminado os items do SERVICO pulo pro proximo item do ORCAMENTO, sendo que antes de adicionar a quantidade no StringList vejo se aquele item ja existe, se nao existir inclui-o com o calculo acima, se ja existir o calculo e o seguinte ((Quantidade no ORCAMENTO*Quantidade no SERVICO) + Quantidade ja armazenada no StringList).
Depois que terminar todos os items do ORCAMENTO as quantidades totais de cada PRODUTO no ORCAMENTO (levando em conta que pode haver repeticao de PRODUTO em SERVICOS diferentes) ja estarao armazenadas no Stringgrid.
Agora eu Multiplico a QUANTIDADE do StringGrid * o Custo de cada PRODUTO pra ter o valor final de cada item no ORCAMENTO.
Ordeno o StringList DESCENDING por ordem de VALOR TOTAL (nao e pela quantidade) e mostro no relatorio dando o peso em PERCENTUAL de cada um no ORCAMENTO (o VALOR TOTAL DO ORCAMENTO JA DEVERA TER SIDO CALCULADO ANTERIORMENTE) e o Percentual ACUMULADO dos item ate fechar em 100¬.
Obs: vc pode usar ao inves de StringList como eu falei uma tabela temporaria. e ordenar descending pelo valor total.
Importante: Nunca espere que o valor final da soma dos items de sua curva ABC feche com o valor do seu orcamento isso e normal pq a forma de multiplicacao e diferente, mas se fechar beleza. OK
qualquer duvida.
so nao te mandei um exemplo pq acho que vc nao entenderia mas a logica essa.
No meu ramo trabalho com:
OCAMENTO de SERVICOS que sao compostos de PRODUTOS.
um orcamento pode ter varios servicos que por sua ves pode ter varios produtos.
Para fazer o calculo da curva abc eu sigo o ORCAMENTO item a item pegando os SERVICOS um a um acumulando pode ser em um arquivo temporario ou em um TstringList (q foi o meu caso), sendo que armazeno no Stringlist o CODIGO e a QUANTIDADE de cada PRODUTO, a conta pra cada PRODUTO e a seguinte (Quantidade no ORCAMENTO * a Quantidade no SERVICO).
Bom terminado os items do SERVICO pulo pro proximo item do ORCAMENTO, sendo que antes de adicionar a quantidade no StringList vejo se aquele item ja existe, se nao existir inclui-o com o calculo acima, se ja existir o calculo e o seguinte ((Quantidade no ORCAMENTO*Quantidade no SERVICO) + Quantidade ja armazenada no StringList).
Depois que terminar todos os items do ORCAMENTO as quantidades totais de cada PRODUTO no ORCAMENTO (levando em conta que pode haver repeticao de PRODUTO em SERVICOS diferentes) ja estarao armazenadas no Stringgrid.
Agora eu Multiplico a QUANTIDADE do StringGrid * o Custo de cada PRODUTO pra ter o valor final de cada item no ORCAMENTO.
Ordeno o StringList DESCENDING por ordem de VALOR TOTAL (nao e pela quantidade) e mostro no relatorio dando o peso em PERCENTUAL de cada um no ORCAMENTO (o VALOR TOTAL DO ORCAMENTO JA DEVERA TER SIDO CALCULADO ANTERIORMENTE) e o Percentual ACUMULADO dos item ate fechar em 100¬.
Obs: vc pode usar ao inves de StringList como eu falei uma tabela temporaria. e ordenar descending pelo valor total.
Importante: Nunca espere que o valor final da soma dos items de sua curva ABC feche com o valor do seu orcamento isso e normal pq a forma de multiplicacao e diferente, mas se fechar beleza. OK
qualquer duvida.
so nao te mandei um exemplo pq acho que vc nao entenderia mas a logica essa.
GOSTEI 0
Essistemas
12/11/2003
Pessoal eu trabalho com automação comercial !.
Mas vou dar uma estudada em tudo que me passaram já da para eu conseguir batalhar, agradeço a atenção de todos!.
Valeu !!.
Mas vou dar uma estudada em tudo que me passaram já da para eu conseguir batalhar, agradeço a atenção de todos!.
Valeu !!.
GOSTEI 0
Frcjf
12/11/2003
Bom
Imagine que você parametrizou que:
A seria 50¬ das vendas;
B seria 30¬ das vendas;
C seria 20¬ das vendas;
Faça uma consulta calculando o total das vendas nos itens vendidos(ex 1000 itens), depois faça uma consulta not itens vendidos agrupados por Produto do maior para o menor.
O Produto 5 lapis vendeu 350 unidades ´A´
O Produto 9 caneta vendeu 100 unidades ´A´
O Produto 2 borracha vendeu 80 unidades ´A´
total 530 estes três totalizaram para formar o ´A´ e assim por diante.
É mais ou menos assim, se quiser te mando um exemplo que esta em uma Store Procedure no Firebird.
Flávio Campos
Imagine que você parametrizou que:
A seria 50¬ das vendas;
B seria 30¬ das vendas;
C seria 20¬ das vendas;
Faça uma consulta calculando o total das vendas nos itens vendidos(ex 1000 itens), depois faça uma consulta not itens vendidos agrupados por Produto do maior para o menor.
O Produto 5 lapis vendeu 350 unidades ´A´
O Produto 9 caneta vendeu 100 unidades ´A´
O Produto 2 borracha vendeu 80 unidades ´A´
total 530 estes três totalizaram para formar o ´A´ e assim por diante.
É mais ou menos assim, se quiser te mando um exemplo que esta em uma Store Procedure no Firebird.
Flávio Campos
GOSTEI 0
Frcjf
12/11/2003
Segue o exemplo da Strore Procedure, vou comentar para você entender +-, ok;
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
/* Stored procedures */
CREATE PROCEDURE ´GERAR_CURVA´
(
´DATA_I´ DATE,
´DATA_F´ DATE
)
AS
BEGIN EXIT; END ^
ALTER PROCEDURE ´GERAR_CURVA´
(
´DATA_I´ DATE,
´DATA_F´ DATE
)
AS
DECLARE VARIABLE T_GERAL NUMERIC(12,2);
DECLARE VARIABLE TOTAL_AUX NUMERIC(12,2);
DECLARE VARIABLE ICODIGO INTEGER;
DECLARE VARIABLE CLETRA CHAR(1);
DECLARE VARIABLE NVALOR NUMERIC(12,2);
DECLARE VARIABLE NVALOR_INI NUMERIC(12,2);
BEGIN
/* Tudo é baseado no periodo inicial e final
Limpo todas a classificação do Produto e descubro qual a letra que tem
menor percentual, atribuo a menor letra para todos os produtos */
select Letra from PARAMETRO_CURVA
where PERCENTUAL_PRODUTO = ( select min(PERCENTUAL_PRODUTO) from PARAMETRO_CURVA)
into :cLetra;
Update Produto set Letra = :cLetra;
/* Verifico o total vendido */
SELECT SUM(TOTAL) TOTAL FROM V_Produto_Saida
WHERE DATA_EMISSAO BETWEEN :DATA_I AND :DATA_F
INTO :T_GERAL;
/* Atualizo os valores para a curva baseado no Total vendido */
UPDATE PARAMETRO_CURVA SET VALOR_INI = 0,
VALOR = :T_GERAL * PERCENTUAL_PRODUTO / 100;
for Select CodigoProduto, Sum(Total) from V_Produto_Saida
where Data_emissao between :DATA_I and :DATA_F
group by CodigoProduto
order by 2 desc
into :iCodigo, :Total_aux
Do
Begin
SELECT FIRST 1 letra, valor, valor_ini FROM parametro_curva where valor > valor_ini
into :cLetra, :nValor, :nValor_ini;
if (:nValor > :nValor_ini ) Then
begin
Update parametro_curva set valor_ini = valor_ini + :Total_aux
where Letra = :cLetra;
Update produto set Letra = :cLetra where CodigoProduto = :iCodigo;
end
end
END
^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
/* Stored procedures */
CREATE PROCEDURE ´GERAR_CURVA´
(
´DATA_I´ DATE,
´DATA_F´ DATE
)
AS
BEGIN EXIT; END ^
ALTER PROCEDURE ´GERAR_CURVA´
(
´DATA_I´ DATE,
´DATA_F´ DATE
)
AS
DECLARE VARIABLE T_GERAL NUMERIC(12,2);
DECLARE VARIABLE TOTAL_AUX NUMERIC(12,2);
DECLARE VARIABLE ICODIGO INTEGER;
DECLARE VARIABLE CLETRA CHAR(1);
DECLARE VARIABLE NVALOR NUMERIC(12,2);
DECLARE VARIABLE NVALOR_INI NUMERIC(12,2);
BEGIN
/* Tudo é baseado no periodo inicial e final
Limpo todas a classificação do Produto e descubro qual a letra que tem
menor percentual, atribuo a menor letra para todos os produtos */
select Letra from PARAMETRO_CURVA
where PERCENTUAL_PRODUTO = ( select min(PERCENTUAL_PRODUTO) from PARAMETRO_CURVA)
into :cLetra;
Update Produto set Letra = :cLetra;
/* Verifico o total vendido */
SELECT SUM(TOTAL) TOTAL FROM V_Produto_Saida
WHERE DATA_EMISSAO BETWEEN :DATA_I AND :DATA_F
INTO :T_GERAL;
/* Atualizo os valores para a curva baseado no Total vendido */
UPDATE PARAMETRO_CURVA SET VALOR_INI = 0,
VALOR = :T_GERAL * PERCENTUAL_PRODUTO / 100;
for Select CodigoProduto, Sum(Total) from V_Produto_Saida
where Data_emissao between :DATA_I and :DATA_F
group by CodigoProduto
order by 2 desc
into :iCodigo, :Total_aux
Do
Begin
SELECT FIRST 1 letra, valor, valor_ini FROM parametro_curva where valor > valor_ini
into :cLetra, :nValor, :nValor_ini;
if (:nValor > :nValor_ini ) Then
begin
Update parametro_curva set valor_ini = valor_ini + :Total_aux
where Letra = :cLetra;
Update produto set Letra = :cLetra where CodigoProduto = :iCodigo;
end
end
END
^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
GOSTEI 0
Essistemas
12/11/2003
Flavio valeu mesmo pela força vou dar uma estudada na lógica, porque não estou habituado a trabalhar com stores procedure, eu trabalho com classes. !
Brigadão !!!!.
Qualquer duvida vou te perguntado !!!!
Brigadão !!!!.
Qualquer duvida vou te perguntado !!!!
GOSTEI 0