Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/01/2015, 09:32
Avatar de Master_gdl
Master_gdl
 
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 3 meses
Puntos: 0
Busqueda Cursor no termina análisis en última fila

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 original
  1. DECLARE Ccalcula CURSOR
  2.       FOR
  3.       SELECT    Site, Parte, Existencias, Cantidad, CostoUSD, CostoMN, Fecha, Referencia
  4.       FROM      @mcCTAntiguedadInventarioAux
  5.       ORDER BY Site,Parte,Fecha DESC
  6.  
  7.       OPEN Ccalcula
  8.  
  9.       FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha, @referencia
  10.  
  11.       WHILE @@fetch_status = 0
  12.             BEGIN
  13. ----------------------------------------------------------------------------------------------------------------
  14.                   IF @parteAnterior <> @parte
  15.                      BEGIN
  16.                            IF @contador < @existenciaAnterior
  17.                               BEGIN
  18.                                     SET @aux = (@existenciaAnterior - @contador)
  19.                                                                        
  20.                                                    
  21.                                     SET @auxUSD = (
  22.                                                    SELECT TOP (1)
  23.                                                             CostoUSD
  24.                                                    FROM     @mcCTAntiguedadInventarioAux
  25.                                                    WHERE    Site = @nSite AND
  26.                                                             Parte = @parteAnterior
  27.                                                   )
  28.                                     SET @auxMN = (
  29.                                                   SELECT TOP (1)
  30.                                                             CostoMN
  31.                                                   FROM      @mcCTAntiguedadInventarioAux
  32.                                                   WHERE     Site = @nSite AND
  33.                                                             Parte = @parteAnterior
  34.                                                  )
  35.  
  36.                                     BEGIN TRY
  37.                                           INSERT    INTO @mcCTAntiguedadInventarioTmp (Site, Parte, Cantidad, costoUSD,
  38.                                                                                        CostoMN, Fecha, Referencia,
  39.                                                                                        TipoRespaldo, FechaRespaldo)
  40.                                           VALUES    (@nSite, @parteAnterior, @aux, @auxUSD, @auxMN,
  41.                                                      DATEADD(yy, -2, @fanalisis), 'INV INICIAL', @tipoanalisis,
  42.                                                      @fanalisis)
  43.                                                            
  44.                                                            
  45.                                     END TRY
  46.                                     BEGIN CATCH
  47.                                           PRINT ERROR_MESSAGE()
  48.                                     END CATCH
  49.                               END
  50.                 --REINICIO LAS VARIABLES DE ANALISIS                   
  51.                            SET @parteAnterior = @parte
  52.                            SET @contador = 0
  53.                            SET @existenciaAnterior = @existencia
  54.                            SET @aux = 0
  55.                            SET @auxMN = 0
  56.                            SET @auxUSD = 0             
  57.                      END
  58.                                                    
  59.                   IF (@existencia - @contador) = 0
  60.                      BEGIN
  61.                            FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN,
  62.                                  @fecha, @referencia
  63.                            CONTINUE
  64.                      END
  65.            
  66.                   IF @cantidad > (@existencia - @contador)
  67.                      BEGIN
  68.                            SET @cantidad = (@existencia - @contador)
  69.                      END
  70.            
  71.                   SET @cantidad = ISNULL(@cantidad, 0)
  72.                   IF @cantidad = 0
  73.                      BEGIN
  74.                                                    
  75.                            SET @cantidad = (@existencia - @contador)
  76.                                                        
  77.                                                        
  78.                            SET @costoUSD = (
  79.                                             SELECT TOP (1)
  80.                                                     CostoUSD
  81.                                             FROM    @mcCTAntiguedadInventarioAux
  82.                                             WHERE   Site = @nSite AND
  83.                                                     Parte = @parte
  84.                                            )
  85.                            SET @costoMN = (
  86.                                            SELECT TOP (1)
  87.                                                     CostoMN
  88.                                            FROM     @mcCTAntiguedadInventarioAux
  89.                                            WHERE    Site = @nSite AND
  90.                                                     Parte = @parte
  91.                                           )
  92.                                                    
  93.                            SET @fecha = DATEADD(yy, -2, @fanalisis)
  94.                            SET @referencia = 'INV INCIAL'
  95.                                                        
  96.                                                        
  97.                      END
  98.                   BEGIN TRY
  99.                                                
  100.                         INSERT  INTO @mcCTAntiguedadInventarioTmp (Site, Parte, Cantidad, costoUSD, CostoMN, Fecha,
  101.                                                                    Referencia, TipoRespaldo, FechaRespaldo)
  102.                         VALUES  (@nSite, @parte, @cantidad, @costoUSD, @costoMN, @fecha, @referencia, @tipoanalisis,
  103.                                  @fanalisis)
  104.                                                
  105.                                                
  106.                   END TRY
  107.                   BEGIN CATCH
  108.                         PRINT ERROR_MESSAGE()
  109.                   END CATCH
  110.                   SET @contador = @contador + @cantidad
  111.     ---------------------------------------------------------------------------------------------------------------
  112.                   FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha,
  113.                         @referencia
  114.             END
  115.        
  116.       CLOSE Ccalcula
  117.       DEALLOCATE Ccalcula
  118.  
  119.  
  120.        
  121.       INSERT    INTO [dbo].[mcCTAntiguedadInventarioV3]
  122.                 SELECT  *
  123.                 FROM    @mcCTAntiguedadInventarioTmp
  124.                
  125. 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.

Última edición por gnzsoloyo; 20/01/2015 a las 10:10 Razón: Sin etiquetar.