on 07-29-2013 8:15 PM
Buenas tardes,
Alguien me puede ayudar con el query del informe de análisis de ventas x artículos, pues necesito sacar la rentabilidad por artículo vendido y no lo he podido hallar, he probado varios Querys, pero ninguno me cuadra con el que saca SAP directamente, ya tengo el de clientes y el de vendedores.
De antemano les agradezco a quienes me puedan ayudar con este query, pues necesito entregar un informe a la gerencia de forma automático y no he podido.
Un saludo y quedo a la espera de una pronta respuesta.
OSCAR GALLEGO
buenas Tardes Tengo un problema espero me puedan ayudar, tengo un proceso almacenado de ventas por articulo por cliente y a la hora de trasladarlo a crystal reports no me cuadra ya no me descuenta las notas de crédito me podrían ayudar??
USE [SBOSIP_ASC2]
GO
/****** Object: StoredProcedure [dbo].[ASC_ServXcte] Script Date: 20/06/2016 04:15:57 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[ASC_ServXcte]
-- Add the parameters for the stored procedure here
@FechaInicial date,
@FechaFinal date
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT T0.[CardCode] Codigo_Cliente, T0.[CardName] Nombre_Cliente, T0.[DocDate] Fecha_Factura, T0.[DocNum] Num_Factura,
case when T0.[DocCur]='$' then 'Peso Mexicano' else 'Dólares' end Moneda, T0.[DocRate] Tipo_Cambio,
T1.[ItemCode] Código_Servicio, T1.[Dscription] Nombre_Servicio, T1.[Quantity] Cantidad,
T1.[Price] Precio_Unitario, T1.[Quantity] * T1.[Price] Importe, T3.[PymntGroup] Dias_Crédito, T0.[CANCELED] Cancelado,
T1.[LineTotal] Total_Factura
FROM OINV T0 INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OCRD T2 ON T0.[CardCode] = T2.[CardCode]
INNER JOIN OCTG T3 ON T0.[GroupNum] = T3.[GroupNum]
WHERE T0.DocDate BETWEEN @FechaInicial AND @FechaFinal
AND T0.CANCELED = 'N'
UNION ALL
SELECT T0.[CardCode] Codigo_Cliente, T0.[CardName] Nombre_Cliente, T0.[DocDate] Fecha_Factura, T0.[DocNum] Num_Factura,
case when T0.[DocCur]='$' then 'Peso Mexicano' else 'Dólares' end Moneda, T0.[DocRate] Tipo_Cambio,
T1.[ItemCode] Código_Servicio, T1.[Dscription] Nombre_Servicio, T1.[Quantity] Cantidad,
T1.[Price] Precio_Unitario, T1.[Quantity] * T1.[Price] Importe, T3.[PymntGroup] Dias_Crédito, T0.[CANCELED] Cancelado,
T1.[LineTotal] Total_Factura
FROM OINV T0 INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OCRD T2 ON T0.[CardCode] = T2.[CardCode]
INNER JOIN OCTG T3 ON T0.[GroupNum] = T3.[GroupNum]
WHERE T0.CANCELED = 'Y' AND T1.TargetType=13
AND T0.DocDate BETWEEN @FechaInicial AND @FechaFinal
AND month(T0.DocDate) not in (SELECT month (T10.DocDate) FROM OINV T10 INNER JOIN INV1 T11 ON T10.[DocEntry] = T11.[DocEntry]
WHERE T10.DocEntry=T1.TrgetEntry)
END
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Estimado, no se si ya lo resolviste pero yo lo hago asi.. lo podes usar como base para tu reporte, este cuadra contra el analisis de ventas por articulo de modulo de ventas-reportes, uso SBO 8.82
SELECT ItemCode,
Sum(TotFac) - SUM(TotNC) as 'FacturadoNeto',
Sum(GBrutaFac)-SUM(GbrutaNC) as 'GBruta',
Round((Sum(GBrutaFac)-SUM(GbrutaNC))/
case when (Sum(TotFac) - SUM(TotNC))= 0 then 1 else (Sum(TotFac) - SUM(TotNC)) end *100,2) as '% Margen'
FROM (
SELECT
ItemCode = T1.ItemCode,
TotFac = Sum(T1.Linetotal),
GBrutaFac = SUM(T1.GrssProfit),
TotNc= 0,
GbrutaNC = 0
FROM OINV T0 (NOLOCK) INNER JOIN INV1 T1 (NOLOCK) ON T0.DocEntry = T1.DocEntry
WHERE (T0.[DocDate] >='20130701' AND T0.[DocDate] <='20130731')
and T0.DocType = 'I' -- solo facturas por articulos
Group by T1.ItemCode
Union
SELECT
ItemCode = T1.ItemCode,
TotFac = 0,
GBrutaFac = 0,
TotNc= Sum(T1.LineTotal),
GbrutaNC = SUM(T1.GrssProfit)
FROM ORIN T0 (NOLOCK) INNER JOIN RIN1 T1 (NOLOCK) ON T0.DocEntry = T1.DocEntry
WHERE (T0.[DocDate] >='20130701' AND T0.[DocDate] <='20130731')
and T0.DocType = 'I' -- solo NC por articulos
Group by T1.ItemCode
) T
Group by ItemCode
Saludos
RC
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Estimado La Consulta quedaría así
SELECT ItemCode,
Marca,
Sum(TotFac) - SUM(TotNC) as 'FacturadoNeto',
Sum(GBrutaFac)-SUM(GbrutaNC) as 'GBruta',
Round((Sum(GBrutaFac)-SUM(GbrutaNC))/case when (Sum(TotFac) - SUM(TotNC))= 0 then 1 else (Sum(TotFac) - SUM(TotNC)) end *100,2) as '% Margen'
FROM (
SELECT
ItemCode = T1.ItemCode,
Marca = (Select T2.FirmName from OMRC T2 JOIN OITM T3 on T2.FirmCode = T3.FirmCode where T3.ItemCode=T1.Itemcode),
TotFac = Sum(T1.Linetotal),
GBrutaFac = SUM(T1.GrssProfit),
TotNc= 0,
GbrutaNC = 0
FROM OINV T0 (NOLOCK) INNER JOIN INV1 T1 (NOLOCK) ON T0.DocEntry = T1.DocEntry
WHERE (T0.[DocDate] >='20130701' AND T0.[DocDate] <='20130731')
and T0.DocType = 'I' -- solo facturas por articulos
Group by T1.ItemCode
Union
SELECT
ItemCode = T1.ItemCode,
Marca = (Select T2.FirmName from OMRC T2 JOIN OITM T3 on T2.FirmCode = T3.FirmCode where T3.ItemCode=T1.Itemcode),
TotFac = 0,
GBrutaFac = 0,
TotNc= Sum(T1.LineTotal),
GbrutaNC = SUM(T1.GrssProfit)
FROM ORIN T0 (NOLOCK) INNER JOIN RIN1 T1 (NOLOCK) ON T0.DocEntry = T1.DocEntry
WHERE (T0.[DocDate] >='20130701' AND T0.[DocDate] <='20130731')
and T0.DocType = 'I' -- solo NC por articulos
Group by T1.ItemCode
) T
Group by ItemCode, Marca
espero te sirva.
Saludos
RC
Estimado Rodolfo,
ya se resolvió el tema de los servicios, ahora tengo el problema que cuando hay un documento que tiene repetido el mismo articulo con diferentes cantidades
este no lista la cantidad total, solo emite la cantidad de la primera linea en el detalle del documento por lo cual me descuadra los totales finales.
TE DEJO LA CONSULTA REALIZADA, SI LA PUEDES REVISAR.
Muchas Gracias por tu apoyo.
------ consulta Venta general ( listado de todos los movimientos de ventas y que podemos filtrar.
------ estos incluyen facturas manuales internas, facturas de reserva, facturas electronicas, facturas nulas
------ notas de creditos manuales internas, notas de creditos electronicas, nulas.
------ OBJETIVO EMITIR EN SOLO INFORME TODA LA INFORMACION DE VENTAS, LA CUAL PUEDE SER ADMINISTRADA POR LOS USUARIOS
------ CON DIFERENTES FILTROS DE FECHAS , TIPO DOCUMENTO, ETC.
---------------------------------------------------------------------------------------------------------------
SELECT T0.[DocNum] ,T0.[FolioNum],T0.isIns,T0.Indicator,
T0.[CardCode], T0.[CardName] as "Nombre Cliente",
t1.itemcode,
t1.dscription,
Marca = (Select T2.FirmName from OMRC T2 JOIN OITM T3 on T2.FirmCode = T3.FirmCode where T3.ItemCode=T1.Itemcode),
T0.[TaxDate] as "Fecha",
T1.[Quantity] as "Cantidad",
CASE
WHEN T0.DocType = 'S' THEN T1.Price
WHEN T0.Discprcnt > 0 and T1.Discprcnt <= 0 THEN T1.price - (T1.price * T0.Discprcnt)/100
WHEN T0.DiscPrcnt <=0 AND T1.DiscPrcnt <=0 THEN T1.Price
WHEN T0.DiscPrcnt <=0 and T1.DiscPrcnt > 0 THEN T1.Price
WHEN T0.DiscPrcnt > 0 AND T1.DiscPrcnt > 0 THEN T1.price - (T1.price * T0.Discprcnt)/100
END as "Precio",
CASE
WHEN T0.DocType = 'S' THEN T1.Price
WHEN T0.Discprcnt > 0 and T1.Discprcnt <= 0 THEN (T1.price - (T1.price * T0.Discprcnt)/100)* T1.Quantity
WHEN T0.DiscPrcnt <=0 AND T1.DiscPrcnt <=0 THEN T1.[Quantity]* T1.[Price]
WHEN T0.DiscPrcnt <=0 and T1.DiscPrcnt > 0 THEN T1.[Quantity]* T1.[Price]
WHEN T0.DiscPrcnt > 0 AND T1.DiscPrcnt > 0 THEN (T1.price - (T1.price * T0.Discprcnt)/100)* T1.Quantity
END as "Total Linea",
Vendedor = (Select T4.slpname from OSLP T4 JOIN OINV T3 on T4.SlpCode = T3.SlpCode where T3.DocEntry=T1.DocEntry)
FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
union
SELECT T0.[DocNum] ,T0.[FolioNum],T0.isIns,T0.Indicator,
T0.[CardCode], T0.[CardName] as "Nombre Cliente",
t1.itemcode,
t1.dscription,
Marca = (Select T2.FirmName from OMRC T2 JOIN OITM T3 on T2.FirmCode = T3.FirmCode where T3.ItemCode=T1.Itemcode),
T0.[TaxDate] as "Fecha",
T1.[Quantity] as "Cantidad" ,
CASE
WHEN T0.DocType = 'S' THEN T1.Price * -1
WHEN T0.Discprcnt > 0 and T1.Discprcnt <= 0 THEN T1.price - (T1.price * T0.Discprcnt)/100
WHEN T0.DiscPrcnt <=0 AND T1.DiscPrcnt <=0 THEN T1.Price *-1
WHEN T0.DiscPrcnt <=0 and T1.DiscPrcnt > 0 THEN T1.Price *-1
WHEN T0.DiscPrcnt > 0 AND T1.DiscPrcnt > 0 THEN T1.price - (T1.price * T0.Discprcnt)/100
END as "Precio",
CASE
WHEN T0.DocType = 'S' THEN T1.Price *-1
WHEN T0.Discprcnt > 0 and T1.Discprcnt <= 0 THEN (T1.price - (T1.price * T0.Discprcnt)/100)* (-T1.Quantity)
WHEN T0.DiscPrcnt <=0 AND T1.DiscPrcnt <=0 THEN (T1.[Quantity]* T1.[Price]* -1)
WHEN T0.DiscPrcnt <=0 and T1.DiscPrcnt > 0 THEN (T1.[Quantity]* T1.[Price]* -1)
WHEN T0.DiscPrcnt > 0 AND T1.DiscPrcnt > 0 THEN (T1.price - (T1.price * T0.Discprcnt)/100)* (-T1.Quantity)
END as "Total Linea",
Vendedor = (Select T4.slpname from OSLP T4 JOIN ORIN T3 on T4.SlpCode = T3.SlpCode where T3.DocEntry=T1.DocEntry)
FROM ORIN T0 INNER JOIN RIN1 T1 ON T0.DocEntry = T1.DocEntry
Muchas gracias por la respuesta, me sirvió mucho.
Aprovechando el tema, cuando se realiza una factura o nota de crédito en la cual no hay articulo solo se usa servicio,
el informe de ventas por articulo no cuadra con el de vendedor o de cliente.
tomando esta misma consulta, como hago para que el informe también incluya esta venta de servicio y asi me cuadre con los otros informes?
De antemano muchas gracias.
Saludos.
JO.
Message was edited by: JAIME OLGUIN
User | Count |
---|---|
91 | |
11 | |
10 | |
6 | |
5 | |
5 | |
5 | |
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.