on 11-04-2011 9:33 PM
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.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
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
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:
Felipe Loyola Rodriguez Nov 7, 2011 4:59 PM (in response to Viviana Medina)
Ok, viviana...con este query estariamos 100%
Podrías apoyarme y decirme porque me arroja este error, que es lo que tengo mal.
Gracias.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
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.
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]
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
99 | |
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.