cancel
Showing results for 
Search instead for 
Did you mean: 

Analisis de Ventas con Stock

Former Member
0 Kudos

Estimados:

Necesito crear un reporte igual al "Analisis de venta por articulos y rango de fechas", pero debo agregarle el stock que habia antes de la fecha inicial del informe.

Alguien me puede ayudar a crear esta query?

Ejemplo:

Fec.Inicial: 01.06.2011

Fec.Final: 31.10.2011

Codigo, Descripcion, Stock al 31.05.2011, cant. vendida segun rango fecha, Total Vtas $, Ganancia Bruta $, % Ganancia Bruta.

De antemano gracias.

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Ok, viviana...con este query estariamos 100%


SELECT T0.[ItemCode], T0.[ItemName],
ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate < '[%0]'),0) 'Stock a la fecha inicio',
ISNULL((SELECT SUM(Y.Quantity) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)-ISNULL((SELECT SUM(Y.Quantity) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)'Cantidad Vendida',
ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)'Ventas',
ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate <= '[%1]'),0) 'Stock a la fecha termino',
ISNULL((SELECT SUM(TransValue) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate <= '[%1]'),0)'Stock Valorizado',
ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN '[%0]' AND '[%1]' AND Y.ItemCode=T0.ItemCode),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM ORIN Z INNER JOIN RIN1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN '[%0]' AND '[%1]' AND Y.ItemCode=T0.ItemCode),0)'Ganancia bruta',
((ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN '[%0]' AND '[%1]' AND Y.ItemCode=T0.ItemCode),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM ORIN Z INNER JOIN RIN1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN '[%0]' AND '[%1]' AND Y.ItemCode=T0.ItemCode),0))/(ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)))*100 '% Ganancia'
FROM OITM T0

Atte.

Former Member
0 Kudos

Felipe:

Muchas gracias por responder.

Tu consulta funciono perfecto!!!!!

Lo unico es que ahora me pidieron agregarle para cuantos dias me alcanza el inventario que tengo, de acuerdo a las cantidades vendidas durante el periodo seleccionado.

Por ej.

Fecha inicial: 01.01.2011

Fecha final: 31.10.2011

Venta: 1000 unidades

Stock a la fecha : 4000 unidades

Dias desde 01.01.2011 al 31.10.2011 = 304

Venta diaria = 3,28

Stock (4000 un) = me alcanza para 1220 dias (3,35 años)

eso se puede hacer?

Me puedes ayudar con esta nueva solicitud?

Saludos.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola vivi

Puedes probar este query


DECLARE @VAR INT, @INI DATETIME, @FIN DATETIME
SET @VAR=(SELECT TOP 1 A.TransId FROM JDT1 A WHERE A.RefDate BETWEEN '[%0]' AND '[%1]')
SET @INI='[%0]'
SET @FIN='[%1]'

SELECT T0.[ItemCode], T0.[ItemName],
ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate<@INI),0) 'Stock a la fecha inicio',
ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate <= @FIN),0) 'Stock a la fecha termino',
ISNULL((SELECT SUM(TransValue) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate <= @FIN),0)'Stock Valorizado',
ISNULL((SELECT SUM(Y.Quantity) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)-ISNULL((SELECT SUM(Y.Quantity) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)'Cantidad Vendida',
DATEDIFF (dd, @INI, @FIN)'Nº de dias segun fechas',
CASE
WHEN ISNULL((SELECT SUM(Y.Quantity) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)-ISNULL((SELECT SUM(Y.Quantity) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0) <= 0 THEN 0
ELSE ((ISNULL((SELECT SUM(Y.Quantity) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)-ISNULL((SELECT SUM(Y.Quantity) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0))/(DATEDIFF (dd, @INI, @FIN)))
END 'Venta diaria',
CASE
WHEN ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate <= @FIN),0) <= 0 THEN 0
ELSE ((ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T0.ItemCode AND Y.DocDate <= @FIN),0)/(((ISNULL((SELECT SUM(Y.Quantity) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)-ISNULL((SELECT SUM(Y.Quantity) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0))/(DATEDIFF (dd, @INI, @FIN))))))
END 'Venta futura',
ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)'Ventas',
ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN @INI AND @FIN AND Y.ItemCode=T0.ItemCode),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM ORIN Z INNER JOIN RIN1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN @INI AND @FIN AND Y.ItemCode=T0.ItemCode),0)'Ganancia bruta',
((ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN @INI AND @FIN AND Y.ItemCode=T0.ItemCode),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.GrossBuyPr) FROM ORIN Z INNER JOIN RIN1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.DocDate BETWEEN @INI AND @FIN AND Y.ItemCode=T0.ItemCode),0))/(ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >=@INI AND X.DocDate<=@FIN),0)))*100 '% Ganancia'
FROM OITM T0
WHERE /*ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T2.ItemCode AND Y.DocDate <= '[%1]'),0) != 0 AND*/

ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0) != 0

ORDER BY T0.[ItemCode]

Ojala funcione, slds

Former Member
0 Kudos

Felipe:

Perfecto, es lo que necesitaba.....!!!

Muchas gracias.

VMC.

Former Member
0 Kudos

Hola me podrias pasar el query que te funcino con la ganancia, probe los de aqui pero me mandan error, te lo agradeceria mucho. si lo posteas de nuevo por aqui

Answers (3)

Answers (3)

Former Member
0 Kudos

Hola estimado Felipe una Duda muy grande estoy tratando de utilizar tu Consulta pero en mi SQL me arroja un error:

Msg 241, Level 16, State 1, Line 1

Conversion failed when converting date and/or time from character string.

Yo tambien necesito que me muestre el stock pero al dia que se genera dicha consulta. a diferencia del de viviana.

Utilice esta consulta que proporcionaste:

Re: Analisis de Ventas con Stock

Ok, viviana...con este query estariamos 100%

Podrías apoyarme y decirme porque me arroja este error, que es lo que tengo mal.

Gracias.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Ese query esta en rango de fechas

Debes quitar en el WHERE lo que diga

X.DocDate >='[%0]' AND X.DocDate<='[%1]'

y Colocar

X.DocDate<='[%0]'

Asi solo te pedirá la fecha final del reporte que es donde necesitas el stock.

Saludos

Former Member
0 Kudos

Caray Creo que no comprendo bien lo que hay que hacer disculpa pero aun no dominio muy bien esto de SQL digamos que son mis primeras consultas y en mi trabajo fue lo que me pidieron:

Literalmente hablando.

un Reporte Idéntico al reporte de análisis de Ventas por Articulo que agregue una Columna con el Stock actual del producto ala fecha en que se genere dicho reporte. y que se seleccione un rango de fechas.

Si no es mucha molestia Podrías Ayudarme y decirme como debería de quedar la Consulta.

Former Member
0 Kudos

Felipe hazme un Favor ya pude hacer jalar el reporte (para hacer el analisis general), pero Ahora me estan pidiendo poderlo filtrar por Almacén eso lo hago en crystal pero en la consulta como agrego los almacenes, Podras Ayudarme diciendome donde tendria que modificarle para que tambien me arroje la informacion, por almacen  ya que como lo hice yo si me arroja la informacion por almacen pero los datos son erroneos.

Espero tus comentarios gracias.

Former Member
0 Kudos

Hola buenos días; muy buenos las consultas y las respuestas dadas para el caso presentado, tengo una situación similar pero adicional del análisis de ventas mas el stock queria resumir la consultas mostrando subtotales por grupos de articulos. como puedo agregar un group by a dicha consunta,

/* SELECT FROM .[@DIAS_TRANS] T0 */

DECLARE @U_Num_Dias AS NVARCHAR(50)

/* WHERE */

SET @U_Num_Dias = /* T0.U_Num_Dias */ '[%5]'

SELECT T0.[ItemCode], T2.[ItemName],T0.StockValue,

ISNULL((SELECT SUM(Y.QuantityY.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry = X.DocEntry WHERE Y.ItemCode = T0.ItemCode AND X.DocDate >= '[%0]' AND X.DocDate <= '[%1]'),0) - ISNULL((SELECT SUM(Y.QuantityY.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry = X.DocEntry WHERE Y.ItemCode = T0.ItemCode AND X.DocDate >= '[%0]' AND X.DocDate <= '[%1]'),0)'Ventas',

ISNULL((SELECT SUM(TransValue) FROM OINM Y WHERE Y.ItemCode = T2.ItemCode AND Y.DocDate <= '[%1]'),0)'Stock Valorizado',DAY(GETDATE()) 'Dias Trans'

FROM OITW T0

INNER JOIN OWHS T1 ON T0.WhsCode = T1.WhsCode

INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode

INNER JOIN OITB T3 ON T2.ItmsGrpCod = T3.ItmsGrpCod

WHERE T1.[WhsCode] = '[%3]' AND ISNULL((SELECT SUM(Y.QuantityY.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry = X.DocEntry WHERE Y.ItemCode = T0.ItemCode AND X.DocDate >= '[%0]' AND X.DocDate <= '[%1]'),0) - ISNULL((SELECT SUM(Y.QuantityY.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate <= '[%1]'),0) != 0

ORDER BY T1.[WhsCode], T0.[ItemCode]

felipe_loyolarodriguez
Active Contributor
0 Kudos

Crystal Report

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola Vivi

Prueba este query, falta agregar la ganancia bruta.


SELECT T0.[ItemCode], T2.[ItemName],
ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T2.ItemCode AND AND Y.DocDate < '[%0]'),0) 'Stock a la fecha inicio',
ISNULL((SELECT SUM(Y.Quantity) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)-ISNULL((SELECT SUM(Y.Quantity) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)'Cantidad Vendida',
ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)'Ventas',
ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T2.ItemCode AND Y.DocDate <= '[%1]'),0) 'Stock a la fecha termino',
ISNULL((SELECT SUM(TransValue) FROM OINM Y WHERE Y.ItemCode = T2.ItemCode AND Y.DocDate <= '[%1]'),0)'Stock Valorizado'
FROM OITW T0
INNER JOIN OWHS T1 ON T0.WhsCode = T1.WhsCode 
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode
WHERE /*ISNULL((SELECT (SUM(Y.InQty)-SUM(Y.OutQty)) FROM OINM Y WHERE Y.ItemCode = T2.ItemCode AND Y.DocDate <= '[%1]'),0) != 0 AND*/
ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM OINV X INNER JOIN INV1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0)-ISNULL((SELECT SUM(Y.Quantity*Y.Price) FROM ORIN X INNER JOIN RIN1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T0.ItemCode AND X.DocDate >='[%0]' AND X.DocDate<='[%1]'),0) != 0
ORDER BY T1.[WhsCode], T0.[ItemCode]

Saludos