Hola buen día.
Espero me puedan ayudar, tengo un cursor el cual debe de hacer una resta en dos campos hasta llegar a 0 o números negativos.
adjunto ejemplo:
Código SQL:
Ver originalDECLARE Ccalcula CURSOR
FOR
SELECT Site, Parte, Existencias, Cantidad, CostoUSD, CostoMN, Fecha, Referencia
FROM @mcCTAntiguedadInventarioAux
ORDER BY Site,Parte,Fecha DESC
OPEN Ccalcula
FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha, @referencia
WHILE @@fetch_status = 0
BEGIN
----------------------------------------------------------------------------------------------------------------
IF @parteAnterior <> @parte
BEGIN
IF @contador < @existenciaAnterior
BEGIN
SET @aux = (@existenciaAnterior - @contador)
SET @auxUSD = (
SELECT TOP (1)
CostoUSD
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parteAnterior
)
SET @auxMN = (
SELECT TOP (1)
CostoMN
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parteAnterior
)
BEGIN TRY
INSERT INTO @mcCTAntiguedadInventarioTmp (Site, Parte, Cantidad, costoUSD,
CostoMN, Fecha, Referencia,
TipoRespaldo, FechaRespaldo)
VALUES (@nSite, @parteAnterior, @aux, @auxUSD, @auxMN,
DATEADD(yy, -2, @fanalisis), 'INV INICIAL', @tipoanalisis,
@fanalisis)
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
END
--REINICIO LAS VARIABLES DE ANALISIS
SET @parteAnterior = @parte
SET @contador = 0
SET @existenciaAnterior = @existencia
SET @aux = 0
SET @auxMN = 0
SET @auxUSD = 0
END
IF (@existencia - @contador) = 0
BEGIN
FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN,
@fecha, @referencia
CONTINUE
END
IF @cantidad > (@existencia - @contador)
BEGIN
SET @cantidad = (@existencia - @contador)
END
SET @cantidad = ISNULL(@cantidad, 0)
IF @cantidad = 0
BEGIN
SET @cantidad = (@existencia - @contador)
SET @costoUSD = (
SELECT TOP (1)
CostoUSD
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parte
)
SET @costoMN = (
SELECT TOP (1)
CostoMN
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parte
)
SET @fecha = DATEADD(yy, -2, @fanalisis)
SET @referencia = 'INV INCIAL'
END
BEGIN TRY
INSERT INTO @mcCTAntiguedadInventarioTmp (Site, Parte, Cantidad, costoUSD, CostoMN, Fecha,
Referencia, TipoRespaldo, FechaRespaldo)
VALUES (@nSite, @parte, @cantidad, @costoUSD, @costoMN, @fecha, @referencia, @tipoanalisis,
@fanalisis)
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
SET @contador = @contador + @cantidad
---------------------------------------------------------------------------------------------------------------
FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha,
@referencia
END
CLOSE Ccalcula
DEALLOCATE Ccalcula
INSERT INTO [dbo].[mcCTAntiguedadInventarioV3]
SELECT *
FROM @mcCTAntiguedadInventarioTmp
END
El problema radica en que si la ultima fila tiene 200 unidades y la ultima compra fue por 50 no justifica las 150 restantes, únicamente inserta las 50 piezas de la ultima compra y las 150 restantes no las considera.
Espero haber expuesto mi problema con claridad.
Saludos.