ayuda en generacion de informe (datos erroneos)
Publicado por Nicolas Fernandez (2 intervenciones) el 02/03/2009 14:33:25
resulta que tengo un software que genera variados informes de las ventas que este mismo realiza...
informe de ventas por cliente, ventas por vendedor, ventas anuales y ventas por producto.
en este ultimo me entrega datos erroneos, especificamente un valor mas alto al correspondiente.
les dejo el procedimiento almacenado que genera ese informe
[spoiler]
alter PROCEDURE [dbo].[sp_SEL_InfoVentasPorProducto]
@IdProducto numeric,
@IdCategoria numeric,
@FechasDesde datetime,
@FechasHasta datetime
AS
declare @MontoBoletas decimal (26,8)
declare @MontoFacturas decimal (26,8)
declare @MontoNotaCreditoVenta decimal(26,8)
declare @MontoTotalVentas decimal(26,8)
declare @CantidadProducto numeric
declare @CantidadProductoBOV numeric
declare @CantidadProductoFAV numeric
declare @CantidadProductoNCV numeric
set @FechasHasta = dateadd(dd,1,@FechasHasta)
--SELECT * FROM DET_BOLETA_VENTA
--SELECT * FROM MAE_BOLETA_VENTA
--- actualiza el descuento detalle segun descuento encabezado
update mae_boleta_venta
set mbv_subtotal_bruto = mbv_total + mbv_monto_descuento
update mae_Factura_venta
set mfv_subtotal = mfv_total + mfv_monto_descuento
update det_boleta_venta
set dbv_descuento_encabezado = mae_boleta_venta.mbv_monto_descuento / mae_boleta_venta.mbv_subtotal_bruto
from det_boleta_venta
join mae_boleta_venta
on det_boleta_venta.dbv_id_boleta_venta = mae_boleta_venta.mbv_id_boleta_venta
where mbv_subtotal_bruto > 0
update det_factura_venta
set dfv_descuento_encabezado = mae_factura_venta.mfv_monto_descuento / mae_Factura_venta.mfv_subtotal
from det_factura_venta
join mae_factura_Venta
on det_factura_venta.dfv_id_Factura_venta = mae_Factura_venta.mfv_id_factura_venta
where mfv_subtotal > 0
--update det_nota_credito_venta
--set dncv_descuento_encabezado = mae_nota_credito_venta.mncv_descuento / mncv_nota_credito_venta.mncv_subtotal
--from det_nota_Credito_venta
--join mae_nota_Credito_venta
--on ( det_nota_credito_Venta.dncv_id_nota_credito_Venta = mae_nota_Credito_venta.mncv_Id_nota_credito_venta)
----------------------------------------------------------------------------------
IF(@IdCategoria=0 AND @IdProducto > 0)
BEGIN
set @MontoBoletas = (SELECT sum(((D.dbv_total*100)/(b.mbv_porcentaje_iva + 100))*(1 - isnull(d.dbv_descuento_encabezado,0)))
FROM MAE_BOLETA_VENTA B
JOIN DET_BOLETA_VENTA D
ON (B.mbv_id_boleta_venta = D.dbv_id_boleta_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dbv_id_producto_servicio)
WHERE (D.dbv_id_producto_servicio = @IdProducto OR @IdProducto=0)
AND (B.mbv_fecha>=@FechasDesde AND B.mbv_fecha<=@FechasHasta)
AND (P.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mbv_nula = 0)
set @CantidadProductoBOV = (SELECT SUM(D.dbv_cantidad)
FROM MAE_BOLETA_VENTA B
JOIN DET_BOLETA_VENTA D
ON (B.mbv_id_boleta_venta = D.dbv_id_boleta_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dbv_id_producto_servicio)
WHERE (D.dbv_id_producto_servicio = @IdProducto OR @IdProducto=0)
AND (B.mbv_fecha>=@FechasDesde AND B.mbv_fecha<=@FechasHasta)
AND (p.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mbv_nula = 0) --LINEA EXTRA
if(@MontoBoletas is null)
set @MontoBoletas = 0
if(@CantidadProductoBOV is null)
set @MontoBoletas = 0
set @MontoFacturas = (SELECT sum(((D.dfv_total*100)/(b.mfv_porcentaje_iva + 100))*(1- isnull(d.dfv_descuento_encabezado,0)))
FROM MAE_FACTURA_VENTA B
JOIN DET_FACTURA_VENTA D
ON (B.mfv_id_factura_venta = D.dFv_id_factura_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dfv_id_producto_servicio)
WHERE (D.dfv_id_producto_servicio =@IdProducto OR @IdProducto=0)
AND (mfv_fecha>=@FechasDesde AND mfv_fecha<=@FechasHasta)
AND (P.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mfv_nula = 0)
set @CantidadProductoFAV = (SELECT SUM(dfv_cantidad)
FROM DET_FACTURA_VENTA,MAE_FACTURA_VENTA,MAE_PRODUCTO_SERVICIO
WHERE (DET_FACTURA_VENTA.dfv_id_producto_servicio =@IdProducto OR @IdProducto=0)
AND DET_FACTURA_VENTA.dfv_id_factura_venta = MAE_FACTURA_VENTA.mfv_id_factura_venta
AND (mfv_fecha>=@FechasDesde AND mfv_fecha<=@FechasHasta)
AND (DET_FACTURA_VENTA.dfv_id_producto_servicio=MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio)
AND (MAE_PRODUCTO_SERVICIO.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND MAE_FACTURA_VENTA.mfv_nula = 0) --LINEA EXTRA
if(@MontoFacturas is null)
set @MontoFacturas = 0
if(@CantidadProductoFAV is null)
set @CantidadProductoFAV = 0
--SELECT SUM(dncv_total) FROM DET_NOTA_CREDITO_VENTA
--WHERE dncv_id_proudcto_servicio=15628
--SELECT * FROM MAE_NOTA_CREDITO_VENTA
--35839320
set @MontoNotaCreditoVenta = (select sum(((D.dncv_total*100)/(b.mncv_porcentaje_iva + 100))*(1- isnull(d.dncv_descuento_encabezado,0)))
FROM MAE_nota_credito_VENTA B
JOIN DET_NOTA_CREDITO_VENTA D
ON (B.mncv_id_nota_credito_venta = D.dncv_id_nota_credito_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dncv_id_proudcto_servicio)
WHERE (D.dncv_id_proudcto_servicio =@IdProducto OR @IdProducto=0)
AND (mncv_fecha>=@FechasDesde AND mncv_fecha<=@FechasHasta)
AND (P.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mncv_nula = 0)
set @CantidadProductoNCV = (SELECT SUM(dncv_cantidad)
FROM DET_NOTA_CREDITO_VENTA,MAE_NOTA_CREDITO_VENTA,MAE_PRODUCTO_SERVICIO
WHERE (DET_NOTA_CREDITO_VENTA.dncv_id_proudcto_servicio = @IdProducto OR @IdProducto=0)
AND DET_NOTA_CREDITO_VENTA.dncv_id_nota_credito_venta = MAE_NOTA_CREDITO_VENTA.mncv_id_nota_credito_venta
AND (mncv_fecha>=@FechasDesde AND mncv_fecha<=@FechasHasta)
AND (DET_NOTA_CREDITO_VENTA.dncv_id_proudcto_servicio=MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio)
AND (MAE_PRODUCTO_SERVICIO.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND MAE_NOTA_CREDITO_VENTA.mncv_nula = 0) --LINEA EXTRA)
if(@MontoNotaCreditoVenta is null)
set @MontoNotaCreditoVenta = 0
if(@CantidadProductoNCV is null)
set @CantidadProductoNCV = 0
set @MontoTotalVentas = ((@MontoBoletas + @MontoFacturas) - @MontoNotaCreditoVenta)
set @CantidadProducto = ((@CantidadProductoBOV + @CantidadProductoFAV) - @CantidadProductoNCV)
SELECT
MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio AS IdProducto,
MAE_PRODUCTO_SERVICIO.mps_descripcion AS NombreProducto,
MAE_PRODUCTO_SERVICIO.mps_codigo_barra AS CodigoProducto,
isnull(@MontoBoletas,0) AS MontoBoletas,
isnull(@MontoFacturas,0) AS MontoFacturas,
isnull(@MontoNotaCreditoVenta,0) AS MontoNotaCreditoVenta,
isnull(@MontoTotalVentas,0) AS MontoTotalVentas,
isnull(@CantidadProducto,0) as Cantidad,
isnull(mps_costo_promedio,0) as CostoPromedio,
isnull( (@CantidadProducto * isnull(mps_costo_promedio,0)),0 ) as TotalCosto,
isnull( (@MontoTotalVentas - (@CantidadProducto * isnull(mps_costo_promedio,0))),0) as Margen,
isnull(mps_precio_venta,0) as PrecioVenta
FROM MAE_PRODUCTO_SERVICIO
WHERE
(MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio = @IdProducto or @IdProducto=0) AND
(MAE_PRODUCTO_SERVICIO.mps_id_categoria_producto_servicio=@IdCategoria OR @IdCategoria=0)
--85426
--SELECT * FROM MAE_PRODUCTO_SERVICIO
--WHERE mps_id_categoria_producto_servicio=108
END
IF(@IdCategoria>=0 AND @IdProducto=0)
BEGIN
declare @TotalProductosCat numeric
declare @TotalProdCat numeric
declare @Contador numeric
declare @IdProd numeric
declare @CostoPromedio numeric
declare @TotalCosto numeric
declare @Margen numeric
declare @PrecioVenta numeric
informe de ventas por cliente, ventas por vendedor, ventas anuales y ventas por producto.
en este ultimo me entrega datos erroneos, especificamente un valor mas alto al correspondiente.
les dejo el procedimiento almacenado que genera ese informe
[spoiler]
alter PROCEDURE [dbo].[sp_SEL_InfoVentasPorProducto]
@IdProducto numeric,
@IdCategoria numeric,
@FechasDesde datetime,
@FechasHasta datetime
AS
declare @MontoBoletas decimal (26,8)
declare @MontoFacturas decimal (26,8)
declare @MontoNotaCreditoVenta decimal(26,8)
declare @MontoTotalVentas decimal(26,8)
declare @CantidadProducto numeric
declare @CantidadProductoBOV numeric
declare @CantidadProductoFAV numeric
declare @CantidadProductoNCV numeric
set @FechasHasta = dateadd(dd,1,@FechasHasta)
--SELECT * FROM DET_BOLETA_VENTA
--SELECT * FROM MAE_BOLETA_VENTA
--- actualiza el descuento detalle segun descuento encabezado
update mae_boleta_venta
set mbv_subtotal_bruto = mbv_total + mbv_monto_descuento
update mae_Factura_venta
set mfv_subtotal = mfv_total + mfv_monto_descuento
update det_boleta_venta
set dbv_descuento_encabezado = mae_boleta_venta.mbv_monto_descuento / mae_boleta_venta.mbv_subtotal_bruto
from det_boleta_venta
join mae_boleta_venta
on det_boleta_venta.dbv_id_boleta_venta = mae_boleta_venta.mbv_id_boleta_venta
where mbv_subtotal_bruto > 0
update det_factura_venta
set dfv_descuento_encabezado = mae_factura_venta.mfv_monto_descuento / mae_Factura_venta.mfv_subtotal
from det_factura_venta
join mae_factura_Venta
on det_factura_venta.dfv_id_Factura_venta = mae_Factura_venta.mfv_id_factura_venta
where mfv_subtotal > 0
--update det_nota_credito_venta
--set dncv_descuento_encabezado = mae_nota_credito_venta.mncv_descuento / mncv_nota_credito_venta.mncv_subtotal
--from det_nota_Credito_venta
--join mae_nota_Credito_venta
--on ( det_nota_credito_Venta.dncv_id_nota_credito_Venta = mae_nota_Credito_venta.mncv_Id_nota_credito_venta)
----------------------------------------------------------------------------------
IF(@IdCategoria=0 AND @IdProducto > 0)
BEGIN
set @MontoBoletas = (SELECT sum(((D.dbv_total*100)/(b.mbv_porcentaje_iva + 100))*(1 - isnull(d.dbv_descuento_encabezado,0)))
FROM MAE_BOLETA_VENTA B
JOIN DET_BOLETA_VENTA D
ON (B.mbv_id_boleta_venta = D.dbv_id_boleta_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dbv_id_producto_servicio)
WHERE (D.dbv_id_producto_servicio = @IdProducto OR @IdProducto=0)
AND (B.mbv_fecha>=@FechasDesde AND B.mbv_fecha<=@FechasHasta)
AND (P.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mbv_nula = 0)
set @CantidadProductoBOV = (SELECT SUM(D.dbv_cantidad)
FROM MAE_BOLETA_VENTA B
JOIN DET_BOLETA_VENTA D
ON (B.mbv_id_boleta_venta = D.dbv_id_boleta_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dbv_id_producto_servicio)
WHERE (D.dbv_id_producto_servicio = @IdProducto OR @IdProducto=0)
AND (B.mbv_fecha>=@FechasDesde AND B.mbv_fecha<=@FechasHasta)
AND (p.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mbv_nula = 0) --LINEA EXTRA
if(@MontoBoletas is null)
set @MontoBoletas = 0
if(@CantidadProductoBOV is null)
set @MontoBoletas = 0
set @MontoFacturas = (SELECT sum(((D.dfv_total*100)/(b.mfv_porcentaje_iva + 100))*(1- isnull(d.dfv_descuento_encabezado,0)))
FROM MAE_FACTURA_VENTA B
JOIN DET_FACTURA_VENTA D
ON (B.mfv_id_factura_venta = D.dFv_id_factura_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dfv_id_producto_servicio)
WHERE (D.dfv_id_producto_servicio =@IdProducto OR @IdProducto=0)
AND (mfv_fecha>=@FechasDesde AND mfv_fecha<=@FechasHasta)
AND (P.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mfv_nula = 0)
set @CantidadProductoFAV = (SELECT SUM(dfv_cantidad)
FROM DET_FACTURA_VENTA,MAE_FACTURA_VENTA,MAE_PRODUCTO_SERVICIO
WHERE (DET_FACTURA_VENTA.dfv_id_producto_servicio =@IdProducto OR @IdProducto=0)
AND DET_FACTURA_VENTA.dfv_id_factura_venta = MAE_FACTURA_VENTA.mfv_id_factura_venta
AND (mfv_fecha>=@FechasDesde AND mfv_fecha<=@FechasHasta)
AND (DET_FACTURA_VENTA.dfv_id_producto_servicio=MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio)
AND (MAE_PRODUCTO_SERVICIO.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND MAE_FACTURA_VENTA.mfv_nula = 0) --LINEA EXTRA
if(@MontoFacturas is null)
set @MontoFacturas = 0
if(@CantidadProductoFAV is null)
set @CantidadProductoFAV = 0
--SELECT SUM(dncv_total) FROM DET_NOTA_CREDITO_VENTA
--WHERE dncv_id_proudcto_servicio=15628
--SELECT * FROM MAE_NOTA_CREDITO_VENTA
--35839320
set @MontoNotaCreditoVenta = (select sum(((D.dncv_total*100)/(b.mncv_porcentaje_iva + 100))*(1- isnull(d.dncv_descuento_encabezado,0)))
FROM MAE_nota_credito_VENTA B
JOIN DET_NOTA_CREDITO_VENTA D
ON (B.mncv_id_nota_credito_venta = D.dncv_id_nota_credito_venta)
JOIN MAE_PRODUCTO_SERVICIO P
ON (P.mps_id_producto_SErvicio = D.dncv_id_proudcto_servicio)
WHERE (D.dncv_id_proudcto_servicio =@IdProducto OR @IdProducto=0)
AND (mncv_fecha>=@FechasDesde AND mncv_fecha<=@FechasHasta)
AND (P.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND B.mncv_nula = 0)
set @CantidadProductoNCV = (SELECT SUM(dncv_cantidad)
FROM DET_NOTA_CREDITO_VENTA,MAE_NOTA_CREDITO_VENTA,MAE_PRODUCTO_SERVICIO
WHERE (DET_NOTA_CREDITO_VENTA.dncv_id_proudcto_servicio = @IdProducto OR @IdProducto=0)
AND DET_NOTA_CREDITO_VENTA.dncv_id_nota_credito_venta = MAE_NOTA_CREDITO_VENTA.mncv_id_nota_credito_venta
AND (mncv_fecha>=@FechasDesde AND mncv_fecha<=@FechasHasta)
AND (DET_NOTA_CREDITO_VENTA.dncv_id_proudcto_servicio=MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio)
AND (MAE_PRODUCTO_SERVICIO.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND MAE_NOTA_CREDITO_VENTA.mncv_nula = 0) --LINEA EXTRA)
if(@MontoNotaCreditoVenta is null)
set @MontoNotaCreditoVenta = 0
if(@CantidadProductoNCV is null)
set @CantidadProductoNCV = 0
set @MontoTotalVentas = ((@MontoBoletas + @MontoFacturas) - @MontoNotaCreditoVenta)
set @CantidadProducto = ((@CantidadProductoBOV + @CantidadProductoFAV) - @CantidadProductoNCV)
SELECT
MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio AS IdProducto,
MAE_PRODUCTO_SERVICIO.mps_descripcion AS NombreProducto,
MAE_PRODUCTO_SERVICIO.mps_codigo_barra AS CodigoProducto,
isnull(@MontoBoletas,0) AS MontoBoletas,
isnull(@MontoFacturas,0) AS MontoFacturas,
isnull(@MontoNotaCreditoVenta,0) AS MontoNotaCreditoVenta,
isnull(@MontoTotalVentas,0) AS MontoTotalVentas,
isnull(@CantidadProducto,0) as Cantidad,
isnull(mps_costo_promedio,0) as CostoPromedio,
isnull( (@CantidadProducto * isnull(mps_costo_promedio,0)),0 ) as TotalCosto,
isnull( (@MontoTotalVentas - (@CantidadProducto * isnull(mps_costo_promedio,0))),0) as Margen,
isnull(mps_precio_venta,0) as PrecioVenta
FROM MAE_PRODUCTO_SERVICIO
WHERE
(MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio = @IdProducto or @IdProducto=0) AND
(MAE_PRODUCTO_SERVICIO.mps_id_categoria_producto_servicio=@IdCategoria OR @IdCategoria=0)
--85426
--SELECT * FROM MAE_PRODUCTO_SERVICIO
--WHERE mps_id_categoria_producto_servicio=108
END
IF(@IdCategoria>=0 AND @IdProducto=0)
BEGIN
declare @TotalProductosCat numeric
declare @TotalProdCat numeric
declare @Contador numeric
declare @IdProd numeric
declare @CostoPromedio numeric
declare @TotalCosto numeric
declare @Margen numeric
declare @PrecioVenta numeric
Valora esta pregunta


0