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