Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] Cursor no termina análisis en última fila

Estas en el tema de Cursor no termina análisis en última fila en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/01/2015, 09:32
Avatar de 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.
  #2 (permalink)  
Antiguo 20/01/2015, 10:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Cursor no termina análisis en última fila

Por favor, usar el Highlight "SQL" para resaltar el código.
Ayuda a la comprensión y seguimiento de la lógica.

...Y para eso existen.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/01/2015, 15:28
Avatar de Master_gdl  
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Cursor no termina análisis en última fila

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por favor, usar el Highlight "SQL" para resaltar el código.
Ayuda a la comprensión y seguimiento de la lógica.

...Y para eso existen.


Gracias por el consejo gnzsoloyo..!

solo quería acotar un poco el tiempo de análisis para resolverlo . . . Coas que ya ocurrio.


Saludos.!


Etiquetas: campos, cursor, ejemplo, fila
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:51.