on 08-27-2012 3:07 PM
Bom dia a todos!
Alguem dispoe de algum modelo de curva ABC no Crystal reports?
Olá Wagner, tenho um modelo, talvez possa ajudá-lo.
COMANDO:
SELECT T0.ItemCode as 'Codigo do Produto',
T2.ItemName as 'Descricao do Produto',
T0.unitMsr as 'Unid.Medida',
SUM(T0.Quantity) as 'Quantidade',
SUM(T0.LineTotal) as 'Valor',
T3.ItmsGrpNam as 'Familia'
FROM IGE1 T0
INNER JOIN OIGE T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode
INNER JOIN OITB T3 ON T2.ItmsGrpCod = T3.ItmsGrpCod
AND T1.DocDate BETWEEN {?DataDocIni} AND {?DataDocFin}
GROUP BY T0.ItemCode,T2.ItemName, T0.unitMsr, T3.ItmsGrpNam
ORDER BY 4 DESC
Parâmetros: Data Inicial e Final (DataDocIni e DataDocFin respectivamente).
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Bom dia,
Eu fiz usando alguns funções do SQL Server 2008, só achei estranho que a função ROWCOUNT_BIG() funciona somente a partir da 2a execução (pressione 2x executar que vai).
Segue abaixo SQL separado em 20%, 30% e 50%
-- SQL Server 2008 - Curva ABC, 20%, 30% e 50%
SELECT
ROW_NUMBER() OVER (ORDER BY Sum(T0.[LineTotal]) DESC) as Seq
, T0.ItemCode
, T1.ItemName
, T1.InvntryUom
, sum(T0.[Quantity]) as Qtde
, sum(T0.[LineTotal]) as ValorTotal
, ROWCOUNT_BIG() as TotalLinhas
, CASE
WHEN (ROW_NUMBER() OVER (ORDER BY Sum(T0.[LineTotal]) DESC)) <= ROUND(ROWCOUNT_BIG() * 0.20,0) THEN 'A'
WHEN (ROW_NUMBER() OVER (ORDER BY Sum(T0.[LineTotal]) DESC)) <= ROUND(ROWCOUNT_BIG() * 0.50,0) THEN 'B'
ELSE 'C'
END AS CurvaABC
FROM IGE1 T0
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN OIGE T2 ON T0.DocEntry = T2.DocEntry
WHERE (T2.[DocDate] >=[%0] and T2.[DocDate] <=[%1])
GROUP BY T0.[ItemCode], T1.[ItemName], T1.InvntryUom
Abraço,
Fabio
SAP 8.82 PL8
Olá Fábio,
Executei seu modelo em SAP 8.82 PL05 direto (sem clicar 2x), mas ele apresenta apenas o valor 'C' na coluna CurvaABC, para todos os itens. Já quando executado dentro do Crystal (sem qq mudança no código) ele apresenta os valores A, B e C normalmente, conforme condição testada. Algum problema com o comando CASE, como se as funções internas do SQL não fossem totalmente compatíveis ou completamente ignoradas (no CASE) dentro do B1.
At., Sergio Augusto
Boa tarde,
Também estou com o mesmo problema nesse SQL que criei, pra resolver usei somente a função ROW_NUMBER().
SELECT
ROW_NUMBER() OVER (ORDER BY Sum(T0.[LineTotal]) DESC) as Seq
, T0.ItemCode
, T1.ItemName
, T1.InvntryUom
, sum(T0.[Quantity]) as Qtde
, sum(T0.[LineTotal]) as ValorTotal
FROM IGE1 T0
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN OIGE T2 ON T0.DocEntry = T2.DocEntry
WHERE (T2.[DocDate] >={?Dataini} and T2.[DocDate] <={?Datafim})
GROUP BY T0.[ItemCode], T1.[ItemName], T1.InvntryUom
ORDER BY Sum(T0.[LineTotal]) DESC
E fiz uma variavel dentro do Crystal Reports usando a formula abaixo (variavel "CurvaABC" )
Local NumberVar CurvaA;
Local NumberVar CurvaB;
Local NumberVar CurvaC;
CurvaA := Int(count({Comando.ItemCode}) * 0.20);
CurvaB := Int(count({Comando.ItemCode}) * 0.30);
CurvaC := count({Comando.ItemCode}) - CurvaA - CurvaB;
IF {Comando.Seq} <= CurvaA then
'A'
ELSE IF {Comando.Seq} <= (CurvaB+CurvaA) then
'B'
ELSE
'C';
Só não consegui quebrar por grupo (estou testando pra isso as "funções personalizadas do relatório" mas até o momento ainda não consegui).
Abraço,
Fabio
SAP 8.82 PL8
User | Count |
---|---|
95 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.