Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/01/2015, 14:39
Avatar de Master_gdl
Master_gdl
 
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Cursor devuelve valores erróneos al ordenar datos por fecha

Libra Gracias por interesarte en mi mensaje,

Este es el código del cursor que estoy utilizando:

DECLARE 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 @mcCTAntiguedadInventario (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
--REINICIA LAS VARIABLES DEL 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 @mcCTAntiguedadInventario (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].[mcCTAntiguedadInventario]
SELECT *
FROM @mcCTAntiguedadInventario

Última edición por Master_gdl; 19/01/2015 a las 10:17 Razón: por error precione guardar antes de terminar