Ver Mensaje Individual
  #6 (permalink)  
Antiguo 04/09/2012, 08:23
Avatar de Jamsito
Jamsito
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

If @@error <> 0
Begin
Close c_COMPRAS_DET1
Deallocate cursor c_COMPRAS_DET1
Exec SPCMSG 'R',@id,'UPDATE MAESTRO PRODUCTOS'
Exec SPCROLLBACKTRAN
Return 1
End

-- Registramos UEPS/PEPS en los lotes
-- ----------------------------------
Update COMPRAS_DET
Set COSTO_PEPS_UEPS_ANT = COSTO_PEPS_UEPS
From LOTES L
Where COMPRAS_DET.PRODUCT0 = @PRODUCT0
And COMPRAS_DET.PRODUCT0 = L.PRODUCT0
And COMPRAS_DET.CODIGO_BODEGA = L.CODIGO_BODEGA
And COMPRAS_DET.CODIGO_DE_UBICACION = L.CODIGO_DE_UBICACION
And COMPRAS_DET.CODIGO_DE_LOTE = L.CODIGO_DE_LOTE
And COMPRAS_DET.CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And COMPRAS_DET.CODIGO_DE_COMPRA = @codigo_compra

If @@error <> 0
Begin
Close c_COMPRAS_DET1
Deallocate cursor c_COMPRAS_DET1
Exec SPCMSG 'R',@id,'Al actualizar costos UEPS/PEPS'
Exec SPCROLLBACKTRAN
Return 1
End

Exec @ok = sp_Cambio_costo_producto
@PRODUCT0 = @PRODUCT0
, @FECHA_ANALISIS = @FECHA_COMPRA

If @ok <> 0
Begin
Close c_COMPRAS_DET1
Deallocate cursor c_COMPRAS_DET1
Exec SPCMSG 'R',@id,'Al analizar cambio de costo'
Exec SPCROLLBACKTRAN
Return 1
End

-- Registramos datos del proveedor
-- -------------------------------
Update PRODUCTO_PROVEEDOR
Set CANTIDAD_PRODUCTO = CANTIDAD_PRODUCTO + @CANTIDAD_A_INGRESAR
, VALOR_PRODUCTO = VALOR_PRODUCTO + @COSTO_TOTAL
Where PRODUCT0 = @PRODUCT0
And CODIGO_PROVEEDOR = @proveedor
And ANO_PRODUCTO_PROVEE = @ano
And MES_PRODUCTO_PROVEE = @mes

Select @errores = @@error
, @rowcount = @@rowcount

If @errores <> 0
Begin
Close c_COMPRAS_DET1
Deallocate cursor c_COMPRAS_DET1
Exec SPCMSG 'R',@id,'No se puede actualiza la informacion del proveedor'
Exec SPCROLLBACKTRAN
Return 1
End

If @rowcount = 0
Begin
-- Si no actualizo ningun registro, lo insertamos
-- ----------------------------------------------
Exec @ok = sp_Alta_PRODUCTO_PROVEEDOR
@PRODUCT0 = @PRODUCT0
, @CODIGO_PROVEEDOR = @proveedor
, @ANO_PRODUCTO_PROVEE = @ano
, @MES_PRODUCTO_PROVEE = @mes
, @CANTIDAD_PRODUCTO = @CANTIDAD_A_INGRESAR
, @VALOR_PRODUCTO = @COSTO_TOTAL

If @ok <> 0
Begin
Close c_COMPRAS_DET1
Deallocate cursor c_COMPRAS_DET1
Exec SPCMSG 'R',@id,'No se puede agregar la informacion del proveedor'
Exec SPCROLLBACKTRAN
Return 1
End
End -- Si no actualizo ningun registro

Fetch c_COMPRAS_DET1 Into @PRODUCT0, @CANTIDAD_A_INGRESAR, @COSTO_TOTAL
End -- Ciclo de productos

Close c_COMPRAS_DET1
Deallocate cursor c_COMPRAS_DET1

End -- Si el tipo de ingreso maneja costos ó si no maneja costos y está actualizando por segunda vez ( costos )

Declare c_COMPRAS_DET2 cursor
For Select PRODUCT0
, CODIGO_UNIDAD_VENTA
, CODIGO_BODEGA
, CODIGO_DE_UBICACION
, CODIGO_DE_LOTE
, CANTIDAD_A_INGRESAR
, CANTIDAD_UNIDAD_VTA
, PESO_MOVIMIENTO
, COST_UNIT_COMPRAS
From COMPRAS_DET
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra
For Read only

Open c_COMPRAS_DET2
Fetch c_COMPRAS_DET2 Into @PRODUCT0, @CODIGO_UNIDAD_VENTA, @CODIGO_BODEGA, @CODIGO_DE_UBICACION, @CODIGO_DE_LOTE, @CANTIDAD_A_INGRESAR
, @CANTIDAD_UNIDAD_VTA, @PESO_MOVIMIENTO, @COST_UNIT_COMPRAS

While ( @@sqlstatus = 0 )
Begin
-- Actualizamos:
-- Cantidad disponible
-- Cantidad ordenado
-- Costo UEPS/PEPS

If @estado = 'P' -- Solo si es la primera o unica actualizacion de la compra ( pede actualizarse dos veces las que NO manejan costos )
Begin
-- Determinamos cuanto hay disponible
-- ----------------------------------
Select @CANTIDAD_DISPONIBLE = CANTIDAD_DISPONIBLE
From LOTES
Where CODIGO_BODEGA = @CODIGO_BODEGA
And CODIGO_DE_UBICACION = @CODIGO_DE_UBICACION
And CODIGO_DE_LOTE = @CODIGO_DE_LOTE
And PRODUCT0 = @PRODUCT0

If @MOV_INVENTARIO_AUX = null
Begin
-- Si no envian tipo de movimiento ( es un ingreso normal, incrementamos disponible
-- y el peso se incrementa en este procedimiento, ya que el trigger del movimiento de
-- inventario no modificara disponibilidad de existencia y peso ).
-- ----------------------------------------------------------------------------------
Select @CANTIDAD_DISPONIBLE = @CANTIDAD_DISPONIBLE + @CANTIDAD_A_INGRESAR
End

-- Registramos cambios en LOTES
-- ----------------------------
Update LOTES
Set CANTIDAD_DISPONIBLE = @CANTIDAD_DISPONIBLE
, CANTIDAD_ORDENADO = IsNull(CANTIDAD_ORDENADO, 0) - @CANTIDAD_A_INGRESAR -- Siempre rebajamos ordenado
, CODIGO_TIPO_COMPRA = @codigo_tipo_compra -- Registramos ultimo ingreso
, CODIGO_DE_COMPRA = @codigo_compra
Where CODIGO_BODEGA = @CODIGO_BODEGA
And CODIGO_DE_UBICACION = @CODIGO_DE_UBICACION
And CODIGO_DE_LOTE = @CODIGO_DE_LOTE
And PRODUCT0 = @PRODUCT0

If @@error <> 0
Begin
Close c_COMPRAS_DET2
Deallocate cursor c_COMPRAS_DET2
Exec SPCMSG 'R',@id,'UPDATE LOTES'
Exec SPCROLLBACKTRAN
Return 1
End

-- Actualizamos costo UEPS/PEPS solo cuando el ingreso maneja costos ( costo mayor a cero )
-- ----------------------------------------------------------------------------------------
If @COST_UNIT_COMPRAS > 0
Begin
Update LOTES -- Actualizamos TODOS lo lotes con el mismo costo
Set COSTO_PEPS_UEPS = @COST_UNIT_COMPRAS
Where PRODUCT0 = @PRODUCT0
And CODIGO_DE_LOTE = @CODIGO_DE_LOTE

If @@error <> 0
Begin
Close c_COMPRAS_DET2
Deallocate cursor c_COMPRAS_DET2
Exec SPCMSG 'R',@id,'UPDATE LOTES'
Exec SPCROLLBACKTRAN
Return 1
End
End -- Si existe costo
End -- Solo si es la primera o unica actualizacion de la compra

-- GENERACION DE INVENTARIO
-- - - - - - - - - - - - - -
If @lBODEGA <> @CODIGO_BODEGA
Begin
-- Generamos un encabezado por bodega
-- ----------------------------------
If @estado <> 'E' -- Solo si es la primera o unica actualizacion de la compra
Begin
Select @NUMERO_MOV_INVENTARIO = IsNull(CORR_INVE_ING_COSTO, 0) + 1
From PARAMETRO_GENERALES
Where COMPANIA = 'GA'

-- Reservamos correlativo
-- ----------------------
Update PARAMETRO_GENERALES
Set CORR_INVE_ING_COSTO = @NUMERO_MOV_INVENTARIO
Where COMPANIA = 'GA'

If @@error <> 0
Begin
Close c_COMPRAS_DET2
Deallocate cursor c_COMPRAS_DET2
Exec SPCMSG 'R',@id,'UPDATE PARAMETRO GENERALES'
Exec SPCROLLBACKTRAN
Return 1
End

Exec @ok = sp_Alta_MOV_INVENTARIO_ENC
@CODIGO_MOV_INVEN = @TIPO_MOV_INVENTARIO
, @NUMERO_MOVIMIENTO = @NUMERO_MOV_INVENTARIO
, @FECHA_MOVIMIENTO = @FECHA_COMPRA
, @USUARIO_INGRESO_MOEN = @USUARIO
, @FECHA_INGRESO_MOEN = @FECHA_SIS
, @CODIGO_BODEGA_MOV = @CODIGO_BODEGA
, @SERIE_DOCUMENTO_REF = Null
, @DOCUMENTO_REF = @codigo_compra
, @TIPO_DOCUMENTO_REF = @codigo_tipo_compra
, @CODIGO_DIVISION = @codigo_division

If @ok <> 0
Begin
Close c_COMPRAS_DET2
Deallocate cursor c_COMPRAS_DET2
Exec SPCMSG 'R',@id,'INSERT MOV_INVENTARIO_ENC'
Exec SPCROLLBACKTRAN
Return 1
End
End -- Solo si es la primera o unica actualizacion de la compra
Else
Begin
-- Si esta actualizando los costos en ingresos que NO manejan costos
-- -----------------------------------------------------------------
Select @NUMERO_MOV_INVENTARIO = NUMERO_MOVIMIENTO
, @TIPO_MOV_INVENTARIO = CODIGO_MOV_INVEN
From MOV_INVENTARIO_ENC
Where CODIGO_BODEGA_MOV = @CODIGO_BODEGA
And TIPO_DOCUMENTO_REF = @codigo_tipo_compra
And DOCUMENTO_REF = @codigo_compra
End

Select @lBODEGA = @CODIGO_BODEGA -- Variable de control de encabezado
End -- Si cambia la bodega


-- Obtenemos costo alterno ( no utilizamos Obtiene_costo_alterno, porque este
-- verifica que sea mayor a cero y en los ingresos puede ser cero )
-- --------------------------------------------------------------------------
Exec @ok = Costea_movimiento_inventario
@PRODUCT0 = @PRODUCT0
, @CODIGO_BODEGA = @CODIGO_BODEGA
, @CODIGO_DE_UBICACION = @CODIGO_DE_UBICACION
, @CODIGO_DE_LOTE = @CODIGO_DE_LOTE
, @COSTO_UNITARIO = Null -- No utilizamos el unitario
, @COSTO_ALTERNO = @COSTO_ALTERNO_ANT OutPut

If @ok <> 0
Begin
Close c_COMPRAS_DET2
Deallocate cursor c_COMPRAS_DET2
Exec SPCMSG 'R',@id,'Recuperacion costo alterno'
Exec SPCROLLBACKTRAN
Return 1
End