You are on page 1of 3

set ANSI_NULLS OFF

set QUOTED_IDENTIFIER OFF


GO
ALTER PROCEDURE [dbo].[DetKardex]
@CvePro AS VARCHAR(20)
AS
-- CONSULTA PARA EL DETALLE DE KARDEX
--------------------------------------------------------------------------------
--
-- CREO UNA TABLA TEMPORAL PARA GUARDAR LA CONSULTA
CREATE TABLE #Kardex
(Fecha DATETIME, Mov VARCHAR(30), Docum VARCHAR(40), Ctd BIGINT,
Exist BIGINT, Precio Money, Nombre CHAR(50), Proveedor CHAR(50))
-- LLAMAMOS A LA PRIMERA CONSULTA DE COMPRA Y VENTA
INSERT INTO #Kardex
SELECT A.Fecha, 'VENTA' AS Mov, A.Folio AS Docum,
B.Ctd, 0 AS Exist, B.PreUnitario AS Precio, C.Nombre, '' as Prov
eedor
FROM GrlCompra A INNER JOIN DetCompra B
ON A.CveTkt = B.CveTkt
INNER JOIN Usuario C
ON A.CveUsu = C.CveUsu
WHERE A.Status <> 'C' AND B.CvePro = @CvePro
UNION
SELECT A.FecRec AS Fecha, 'COMPRA' AS Mov, A.Folio AS Docum,
B.Ctd, 0 AS Exist, B.PreUnitario AS Precio, C.Nombre AS Nombre,
D.RazSocial as Proveedor
FROM GrlOrdCompra A INNER JOIN DetOrdCompra B
ON A.CveOrdCom = B.CveOrdCom
INNER JOIN Proyecto C
ON A.CvePry = C.CvePry AND A.CveCli = C.CveCli
INNER JOIN Proveedor D
ON A.CvePrv=D.CvePrv
WHERE B.CvePro = @CvePro
UNION
SELECT A.Fecha AS Fecha, 'ENTRADA A.' AS Mov, LTRIM(STR(A.CveMovAlm)) AS
Docum,
A.Cantidad AS Ctd, 0 AS Exist, B.Costo AS Precio, C.Nombre, '' a
s Proveedor
FROM MovAlmacen A INNER JOIN MatPrima B
ON A.CvePro = B.CvePro
INNER JOIN Usuario C
ON A.CveUsu = C.CveUsu
WHERE A.CvePro = @CvePro AND A.Tipo = 'E'
UNION
SELECT A.Fecha AS Fecha, 'SALIDA A.' AS Mov, LTRIM(STR(A.CveMovAlm)) AS
Docum,
A.Cantidad AS Ctd, 0 AS Exist, B.Costo AS Precio, C.Nombre, '' a
s Proveedor
FROM MovAlmacen A INNER JOIN MatPrima B
ON A.CvePro = B.CvePro
INNER JOIN Usuario C
ON A.CveUsu = C.CveUsu
WHERE A.CvePro = @CvePro AND A.Tipo = 'S'
ORDER BY Fecha
-- RECORREMOS LA CONSULTA PARA ACTUALIZAR LAS EXISTENCIAS PARCIALES
-- HACEMOS UNA CONSULTA PARA SABER CON QUE EXISTENCIA EMPEZAMOS
DECLARE @ExistIni AS BIGINT
SET @ExistIni = (SELECT Exist FROM MatPrima WHERE CvePro = @CvePro) +
(SELECT COALESCE(SUM(Cantidad), 0) FROM MovAlmacen
WHERE CvePro = @CvePro AND Tipo = 'S') -
(SELECT COALESCE(SUM(Cantidad), 0) FROM MovAlmacen
WHERE CvePro = @CvePro AND Tipo = 'E')
--SET @ExistIni = (SELECT Exist FROM MatPrima WHERE CvePro = @CvePro) -
-- (SELECT COALESCE(SUM(B.Ctd), 0) FROM GrlComp A INNER JOIN DetComp B
-- ON A.CveCom = B.CveCom WHERE B.CvePro = @CvePro) +
-- (SELECT COALESCE(SUM(B.Ctd), 0) FROM GrlCompra A INNER JOIN DetCompra B
-- ON A.CveTkt = B.CveTkt WHERE A.Status <> 'C' AND B.CvePro = @Cve
Pro) +
-- (SELECT COALESCE(SUM(Cantidad), 0) FROM MovAlmacen
-- WHERE CvePro = @CvePro AND Tipo = 'S') -
-- (SELECT COALESCE(SUM(Cantidad), 0) FROM MovAlmacen
-- WHERE CvePro = @CvePro AND Tipo = 'E')
-- HACEMOS UN CURSOR PARA RECORRER LA TABLA
DECLARE @Fecha AS DATETIME, @Mov AS VARCHAR(15), @Docum AS VARCHAR(15), @Ctd AS
BIGINT, @Exist AS BIGINT, @Precio AS MONEY, @Nombre AS CHAR(50), @Proveedor as c
har(50)
DECLARE Cur CURSOR FOR
SELECT Fecha, Mov, Docum, Ctd, Exist, Precio, Nombre, Proveedor
FROM #Kardex
ORDER BY Fecha
-- RECORREMOS EL CICLO PARA RECORRER EL CURSOR
OPEN Cur
FETCH NEXT FROM Cur INTO @Fecha, @Mov, @Docum, @Ctd, @Exist, @Precio, @Nombre, @
Proveedor
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- ACTUALIZAMOS LA EXISTENCIA
IF (@Mov = 'VENTA' OR @Mov = 'SALIDA A.')
BEGIN
UPDATE #Kardex
SET Exist = @ExistIni - Ctd
WHERE Fecha = @Fecha AND Mov = @Mov AND Docum = @Docum AND
Ctd = @Ctd AND Precio = @Precio
SET @ExistIni = @ExistIni - @Ctd
END
ELSE
BEGIN
IF (@Mov = 'ENTRADA A.')
BEGIN
UPDATE #Kardex
SET Exist = @ExistIni + Ctd
WHERE Fecha = @Fecha AND Mov = @Mov AND Docum = @Docum A
ND
Ctd = @Ctd AND Precio = @Precio
SET @ExistIni = @ExistIni + @Ctd
END
ELSE IF (@Mov = 'COMPRA')
BEGIN
UPDATE #Kardex
SET Exist = @ExistIni
WHERE Fecha = @Fecha AND Mov = @Mov AND Docum = @Docum A
ND
Ctd = @Ctd AND Precio = @Precio
END
END
-- PASAMOS AL SIGUIENTE REGISTRO
FETCH NEXT FROM Cur INTO @Fecha, @Mov, @Docum, @Ctd, @Exist, @Precio, @N
ombre, @Proveedor
END
CLOSE Cur
DEALLOCATE Cur
SELECT *
FROM #kardex

You might also like