SQL - ayuda en generacion de informe (datos erroneos)

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda en generacion de informe (datos erroneos)

Publicado por Nicolas Fernandez (2 intervenciones) el 02/03/2009 14:34:16
CREATE TABLE #TempVentasProd (
IdProducto numeric,
NombreProducto varchar(55),
CodigoProducto varchar(55),
MontoBoletas decimal(26,8),
MontoFacturas decimal(26,8),
MontoNotaCreditoVenta decimal (26,8),
MontoTotalVentas decimal (26,8),
Cantidad numeric,
CostoPromedio numeric,
TotalCosto numeric,
Margen numeric,
PrecioVenta numeric
)

CREATE TABLE #TempIdProd
(
id int IDENTITY (1, 1),
IdProd numeric,
)







INSERT #TempIdProd
SELECT DISTINCT DET_BOLETA_VENTA.dbv_id_producto_servicio
FROM DET_BOLETA_VENTA,MAE_BOLETA_VENTA,MAE_PRODUCTO_SERVICIO
WHERE (DET_BOLETA_VENTA.dbv_id_producto_servicio = @IdProducto OR @IdProducto=0)
AND DET_BOLETA_VENTA.dbv_id_boleta_venta = MAE_BOLETA_VENTA.mbv_id_boleta_venta
AND (MAE_BOLETA_VENTA.mbv_fecha>=@FechasDesde AND MAE_BOLETA_VENTA.mbv_fecha<=@FechasHasta)
AND (DET_BOLETA_VENTA.dbv_id_producto_servicio=MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio)
AND (MAE_PRODUCTO_SERVICIO.mps_id_categoria_producto_servicio = @IdCategoria OR @IdCategoria=0)
AND mbv_nula = 0

INSERT #TempIdProd
SELECT DISTINCT DET_FACTURA_VENTA.dfv_id_producto_servicio
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 mfv_nula = 0

INSERT #TempIdProd
SELECT DISTINCT DET_NOTA_CREDITO_VENTA.dncv_id_proudcto_servicio
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 mncv_nula = 0


--SELECT * FROM #TempIdProd


set @TotalProdCat= (Select count(*) from #TempIdProd)
set @Contador=1

WHILE (@Contador <= @TotalProdCat)
BEGIN


set @IdProd = (Select IdProd from #TempIdProd where id=@Contador)

set @MontoBoletas = (SELECT sum(((D.dbv_total*100)/(b.mbv_porcentaje_iva + 100))*(1- isnull(d.dbv_descuento_encabezado,0)))
FROM DET_BOLETA_VENTA D
JOIN MAE_BOLETA_VENTA b
ON (b.mbv_id_boleta_Venta = D.dbv_id_boleta_venta)
WHERE (D.dbv_id_producto_servicio = @IdProd)
AND (b.mbv_fecha>=@FechasDesde AND b.mbv_fecha<=@FechasHasta)
AND b.mbv_nula = 0)




set @CantidadProductoBOV = (SELECT SUM(DET_BOLETA_VENTA.dbv_cantidad)
FROM DET_BOLETA_VENTA,MAE_BOLETA_VENTA
WHERE (DET_BOLETA_VENTA.dbv_id_producto_servicio = @IdProd)
AND DET_BOLETA_VENTA.dbv_id_boleta_venta = MAE_BOLETA_VENTA.mbv_id_boleta_venta
AND (MAE_BOLETA_VENTA.mbv_fecha>=@FechasDesde AND MAE_BOLETA_VENTA.mbv_fecha<=@FechasHasta)
AND mbv_nula = 0 )

if(@MontoBoletas is null)
begin
set @MontoBoletas = 0
end
if(@CantidadProductoBOV is null)
begin
set @CantidadProductoBOV = 0
end

set @MontoFacturas = (SELECT sum(((D.dfv_total*100)/(b.mfv_porcentaje_iva + 100))*(1- isnull(d.dfv_descuento_encabezado,0)))
FROM DET_FACTURA_VENTA D,MAE_FACTURA_VENTA b
WHERE (D.dfv_id_producto_servicio = @IdProd)
AND D.dfv_id_factura_venta = b.mfv_id_factura_venta
AND (mfv_fecha>=@FechasDesde AND mfv_fecha<=@FechasHasta)
AND mfv_nula = 0 )


set @CantidadProductoFAV = (SELECT SUM(dfv_cantidad)
FROM DET_FACTURA_VENTA,MAE_FACTURA_VENTA
WHERE (DET_FACTURA_VENTA.dfv_id_producto_servicio = @IdProd)
AND DET_FACTURA_VENTA.dfv_id_factura_venta = MAE_FACTURA_VENTA.mfv_id_factura_venta
AND (mfv_fecha>=@FechasDesde AND mfv_fecha<=@FechasHasta)
AND mfv_nula=0)

if(@MontoFacturas is null)
begin
set @MontoFacturas = 0
end
if(@CantidadProductoFAV is null)
begin
set @CantidadProductoFAV = 0
end



set @MontoNotaCreditoVenta = (SELECT sum(((D.dncv_total*100)/(b.mncv_porcentaje_iva + 100))*(1- isnull(d.dncv_descuento_encabezado,0)))
FROM DET_NOTA_CREDITO_VENTA d, MAE_NOTA_CREDITO_VENTA b
WHERE (d.dncv_id_proudcto_servicio = @IdProd)
AND d.dncv_id_nota_credito_venta = b.mncv_id_nota_credito_venta
AND (mncv_fecha>=@FechasDesde AND mncv_fecha<=@FechasHasta)
AND mncv_nula= 0)



set @CantidadProductoNCV = (SELECT SUM(dncv_cantidad)
FROM DET_NOTA_CREDITO_VENTA,MAE_NOTA_CREDITO_VENTA
WHERE (DET_NOTA_CREDITO_VENTA.dncv_id_proudcto_servicio = @IdProd)
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 mncv_nula = 0)


if(@MontoNotaCreditoVenta is null)
begin
set @MontoNotaCreditoVenta = 0
end
if(@CantidadProductoNCV is null)
begin
set @CantidadProductoNCV = 0
end


set @MontoTotalVentas = ((@MontoBoletas + @MontoFacturas) - @MontoNotaCreditoVenta)

set @CantidadProducto = ((@CantidadProductoBOV + @CantidadProductoFAV) - @CantidadProductoNCV)

set @CostoPromedio = (SELECT isnull(mps_costo_promedio,0)
FROM MAE_PRODUCTO_SERVICIO
WHERE mps_id_producto_servicio=@IdProd)

set @PrecioVenta = (SELECT isnull(mps_precio_venta,0)
FROM MAE_PRODUCTO_SERVICIO
WHERE mps_id_producto_servicio=@IdProd)

set @TotalCosto =(@CostoPromedio * @CantidadProducto)

set @Margen = (@MontoTotalVentas - @TotalCosto)

INSERT #TempVentasProd
SELECT
MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio,
MAE_PRODUCTO_SERVICIO.mps_descripcion,
MAE_PRODUCTO_SERVICIO.mps_codigo_barra,
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(@CostoPromedio,0) as CostoPromedio,
isnull(@TotalCosto,0) as TotalCosto,
isnull(@Margen,0) as Margen,
isnull(@PrecioVenta,0) as PrecioVenta
FROM MAE_PRODUCTO_SERVICIO
WHERE (MAE_PRODUCTO_SERVICIO.mps_id_producto_servicio = @IdProd)


set @Contador = @Contador + 1

END



SELECT DISTINCT *
FROM #TempVentasProd

DROP TABLE #TempIdProd
DROP TABLE #TempVentasProd



END
[/spoiler]

espero que me puedan ayudar... me he craneado bastante con esto y no se como arreglarlo..

saludos.. y gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar