Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con Store Procedure VB2010 express

Estas en el tema de Problema con Store Procedure VB2010 express en el foro de .NET en Foros del Web. Que tal señores, de antemano gracias por contestar. el problema es el siguiente tengo un store procedure al cual le envio dos parametros, y este ...
  #1 (permalink)  
Antiguo 04/09/2012, 08:04
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Problema con Store Procedure VB2010 express

Que tal señores, de antemano gracias por contestar.

el problema es el siguiente
tengo un store procedure al cual le envio dos parametros, y este actualiza y mete en inventario las compras realizadas.

el problema es que cuando lo corro en VB2010 express desde mi programa me dice que estoy intentando meter un valor NULO en una columna que no acepta nulos, este valor se genera dentro del mismo store procedure, no tiene nada que ver con los parametros que envio que son unicamente la compra y el tipo de compra.

Lo raro es que si lo corro desde VB5 el procedimiento se ejecuta correctamente.
Si lo ejecuto desde SQL Advantage osea a puro codigo SQL "exec nombre_procedimiento 1, 3323" tambien me lo acepta y corre.

me da error solo en mi programa corriendo en VB2010 express.

la pregunta es tendra algo que ver que sea Express el VB ????
por que ocurre esto, que logica hay que ?????

estoy intentando ver donde se pierde el valor pero no tengo un programa para debuggear procedimientos almacenados paso a paso y ver bien su ejecucion

Alguien ha pasado por esto???

la BD es Sybase
la conexion es por medio de ODBC y en otros store procedure no me ha tirado problemas solo con este que si esta grandecito.

Saludos
  #2 (permalink)  
Antiguo 04/09/2012, 08:12
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: Problema con Store Procedure VB2010 express

Hola Jamsito, podrías colocarnos tu store procedure y el código que haces desde tu aplicación para hacer tu actualización. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #3 (permalink)  
Antiguo 04/09/2012, 08:14
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

Ok, la cuestion es que el Store Procedure es muy grande (yo no lo hice, yo lo estoy analizando) pero bueno ahorita pego mi codigo de como lo llamo y el store procedure
  #4 (permalink)  
Antiguo 04/09/2012, 08:16
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

Codigo para llamar el store procedure:

Dim conexionODBC7 As New OdbcConnection
Dim cadenaConexion As String = ("dsn=" & varGlobalServer & ";uid=" & varGlobalUsuario & ";pwd=" & varGlobalContrasena & ";")
conexionODBC7.ConnectionString = cadenaConexion
conexionODBC7.Open()
Dim comandoODBC7 As OdbcCommand = New OdbcCommand("exec inve_actualiza_compras4 1,12345678", conexionODBC7)

comandoODBC7.ExecuteNonQuery()
MsgBox("Termino con Exito")
conexionODBC7.Close()
  #5 (permalink)  
Antiguo 04/09/2012, 08:22
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

Este es el Store Procedure,,,, ahi por la tercera parte del codigo identifique donde es que da error, dice que se esta intenando ingresar un valor Nulo en "NUMERO_MOVIMIENTO" en la tabla "MOV_INVENTARIO_DET"

Create Proc inve_actualiza_compras4

@codigo_tipo_compra int = 0
, @codigo_compra int = 0
, @MOV_INVENTARIO_AUX int = null
As
/* ======================================= */
/* Actualizacion de compras de inventario */
/* ======================================= */
/* Creado por: CARLOS ECHEVERRIA */
/* Fecha: 18-Jan-1994 */
/* Modificado por: Julio López */
/* Fecha: 03-Sep-2012 */
/* Asunto: Actualización de tablas de */
/* historico de costos */
/* ======================================= */

Declare @MANEJO_COSTOS char(1)
, @TIPO_MOV_INVENTARIO int
, @NUMERO_MOV_INVENTARIO int
, @FEC_VENCIMIENTO_LOTE datetime
, @CANTIDAD_DISPONIBLE numeric(18,8)
, @CANTIDAD_A_INGRESAR numeric(18,8)
, @COSTO_TOTAL float
, @COSTO_UNITARIO_ANT float
, @COSTO_ALTERNO_ANT float
, @CODIGO_BODEGA char(2)
, @CODIGO_DE_UBICACION char(8)
, @CODIGO_DE_LOTE char(5)
, @COST_UNIT_COMPRAS float
, @TIPO_COSTO char(1)
, @DESCRIPCION_LOTE char(40)
, @FECHA_INGRESO_LOTE datetime
, @CANTIDAD_ORDENADO numeric(18,8)
, @CANTIDAD_RESERVADA numeric(18,8)
, @FECHA_COMPRA datetime
, @codigo_division char(10)
, @TIPO_COSTO_A_VALUAR char(1)
, @COSTO_ALTERNO float
, @CODIGO_DE_LOTE_MAX char(5)
, @CODIGO_UNIDAD_VENTA char(2)
, @CANTIDAD_UNIDAD_VTA numeric(18,8)
, @PESO_MOVIMIENTO numeric(18,8)
, @USUARIO_ACTUALIZA char(10)
, @FECHA_ACTUALIZACION datetime

Declare @timestamp timestamp
, @lBODEGA char(2)
, @PRODUCT0 char(25)
, @tocaestado char(1)
, @mes int
, @ano int
, @proveedor int
, @unidades numeric(18,8)
, @valor money
, @ok int
, @id varchar(50)
, @estado char(1)
, @USUARIO char(10)
, @FECHA_SIS datetime
, @errores int
, @rowcount int

Select @id = 'inve_actualiza_compras'
, @USUARIO = suser_name()
, @FECHA_SIS = getdate()
, @FECHA_COMPRA = FECHA_COMPRA
, @estado = ESTADO_COMPRA
, @codigo_division = CODIGO_DIVISION
, @USUARIO_ACTUALIZA = USUARIO_ACTUALIZA
, @FECHA_ACTUALIZACION = FECHA_ACTUALIZACION
, @mes = datepart(mm,FECHA_COMPRA)
, @ano = datepart(yy,FECHA_COMPRA)
, @proveedor = CODIGO_PROVEEDOR
From COMPRAS_ENC
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra

IF @USUARIO="FILEMON" OR @USUARIO="PEDROL" OR @USUARIO="MARLON" OR @USUARIO="ANGELINA" OR @USUARIO="GUSTAVO"
BEGIN
Exec SPCMSG 'R',@id,'USTED NO TIENE AUTORIZACION PARA GENERAR MOVIMIENTOS DE INVENTARIO'
Return 1
END

If @FECHA_COMPRA Is Null
Begin
Exec SPCMSG 'R',@id, 'No existe el ingreso con costo que desea actualizar'
Return 1
End

-- Manejo de costos
-- ----------------
Select @MANEJO_COSTOS = MANEJO_COSTOS
From COMPRAS_TIPO
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra

-- Debe tener detalles
-- -------------------
If Exists( Select 1 From COMPRAS_DET
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra )
Select @id = @id
Else
Begin
Exec SPCMSG 'R',@id, 'El ingreso con costo no tiene detalles. IMPOSIBLE ACTUALIZARLO'
Return 1
End

-- Validamos que si el estado es E - Actualizadas existencias
-- y se desea actualizar la compra, que todos sus productos tengan costo
-- ---------------------------------------------------------------------
If @estado = 'E'
Begin
If Exists( Select 1 From COMPRAS_DET
Where COST_UNIT_COMPRAS <= 0
And CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra )
Begin
Exec SPCMSG 'R',@id, 'Para actualizar los costos en un ingreso con existencias actualizadas, TODOS los productos deben tener costo ( EL COSTO DEBE SER MAYOR A CERO )'
Return 1
End
End

-- Validamos tipo de mov de inventario para ingreso con costo
-- ----------------------------------------------------------
Select @TIPO_MOV_INVENTARIO = MOV_INVE_ING_COSTO
From PARAMETRO_GENERALES
Where COMPANIA = 'PA'

-- Si envian tipo de movimiento a generar NO se asigna el de parametros
-- --------------------------------------------------------------------
If @MOV_INVENTARIO_AUX Is Not Null
Select @TIPO_MOV_INVENTARIO = @MOV_INVENTARIO_AUX

If @TIPO_MOV_INVENTARIO Is Null
Begin
Exec SPCMSG 'R',@id, 'No se ha definido tipo de movimiento de inventario para actualizar ingresos con costo. DEFINALO EN ADMINISTRACION DE GENERALES PARA PODER ACTUALIZAR'
Return 1
End

If Exists( Select 1 From MOV_INVENTARIO_TIPO
Where CODIGO_MOV_INVEN = @TIPO_MOV_INVENTARIO
And INDICADOR_MOV_INVEN = 'S' )
Begin
Exec SPCMSG 'R',@id, 'Se detecto que el tipo de movimiento de inventario que se desea utilizar para registrar el ingreso con costo es salida, debe utilizar ENTRADA AL INVENTARIO.'
Return 1
End

-- T R A N S A C C I O N A L
-- - - - - - - - - - - - - -
Begin Transaction

If @MANEJO_COSTOS = 'S' -- Si el tipo de ingreso maneja costos, siempre se calcula
Or @estado = 'E' -- ó si no maneja costos y está actualizando por segunda vez ( costos )
Begin
Declare c_COMPRAS_DET1 cursor
For Select PRODUCT0
, Sum(CANTIDAD_A_INGRESAR)
, Sum(CANTIDAD_A_INGRESAR * COST_UNIT_COMPRAS )
From COMPRAS_DET
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra
Group By PRODUCT0
For Read Only

Open c_COMPRAS_DET1
Fetch c_COMPRAS_DET1 Into @PRODUCT0, @CANTIDAD_A_INGRESAR, @COSTO_TOTAL

While ( @@sqlstatus = 0 )
Begin
-- Datos del producto
-- ------------------
Select @COSTO_UNITARIO_ANT = IsNull(COSTO_UNITARIO, 0)
, @COSTO_ALTERNO_ANT = IsNull(COSTO_ALTERNO , 0)
, @COSTO_ALTERNO = IsNull(COSTO_ALTERNO , 0)
, @TIPO_COSTO_A_VALUAR = TIPO_COSTO_A_VALUAR
From MAESTRO_PRODUCTOS
Where PRODUCT0 = @PRODUCT0

-- Actualizamos los costos anteriores
-- ----------------------------------
Update COMPRAS_DET
Set COSTO_UNITARIO_ANT = @COSTO_UNITARIO_ANT
, COSTO_ALTERNO_ANT = @COSTO_ALTERNO_ANT
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra
And PRODUCT0 = @PRODUCT0

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

-- Disponibilidad en producto
-- --------------------------
Select @CANTIDAD_DISPONIBLE = Sum(CANTIDAD_DISPONIBLE)
From LOTES
Where PRODUCT0 = @PRODUCT0

-- Si el producto maneja costo alterno = ULTIMO COSTO, reemplazamos valor de costo alteno
-- --------------------------------------------------------------------------------------
If @TIPO_COSTO_A_VALUAR = 'U'
Begin
-- Buscamos ultimo lote
-- --------------------
Select @CODIGO_DE_LOTE_MAX = Max( CODIGO_DE_LOTE )
From COMPRAS_DET
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra
And PRODUCT0 = @PRODUCT0

-- Recuperamos costo
-- -----------------
Select @COSTO_ALTERNO = COST_UNIT_COMPRAS
From COMPRAS_DET
Where CODIGO_TIPO_COMPRA = @codigo_tipo_compra
And CODIGO_DE_COMPRA = @codigo_compra
And PRODUCT0 = @PRODUCT0
And CODIGO_DE_LOTE = @CODIGO_DE_LOTE_MAX
End

-- Cuando se calcula para un ingreso que SOLO actualiza los costos, se rebaja la disponibilidad
-- Por que en su actualizacion anterior ( parcial ) solo se incrementa la disponibilidad
-- --------------------------------------------------------------------------------------------
If @estado = 'E'
Select @CANTIDAD_DISPONIBLE = @CANTIDAD_DISPONIBLE - @CANTIDAD_A_INGRESAR

-- Calculamos el nuevo costo promedio y alterno ( ya analizado )
-- ----------------------------------
Update MAESTRO_PRODUCTOS
Set COSTO_UNITARIO = ( @COSTO_TOTAL + ( @CANTIDAD_DISPONIBLE * @COSTO_UNITARIO_ANT ) ) / ( @CANTIDAD_DISPONIBLE + @CANTIDAD_A_INGRESAR )
, COSTO_ALTERNO = @COSTO_ALTERNO
Where PRODUCT0 = @PRODUCT0
  #6 (permalink)  
Antiguo 04/09/2012, 08:23
Avatar de 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
  #7 (permalink)  
Antiguo 04/09/2012, 08:23
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

-----------------------------------------------------------------------------------------------------------
----------------------------ZONA DEL PROBLEMA---------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------


If @estado <> 'E'
Begin
-- Si no estamos actualiando los costos para tipo de ingreso con costo que NO manejan costo generamos detalle
-- ----------------------------------------------------------------------------------------------------------

End -- Si no estamos actualiando los costos ...
Else
Begin
-- Registramos los costos en el movimiento generado anteriormente
-- --------------------------------------------------------------
Update MOV_INVENTARIO_DET
Set COSTO_UNITARIO_MOV_I = @COST_UNIT_COMPRAS
, COSTO_UNITAR_ALTERNO = @COSTO_ALTERNO_ANT
Where CODIGO_MOV_INVEN = @TIPO_MOV_INVENTARIO
And NUMERO_MOVIMIENTO = @NUMERO_MOV_INVENTARIO
And PRODUCT0 = @PRODUCT0
And CODIGO_UNIDAD_VENTA = @CODIGO_UNIDAD_VENTA
And CODIGO_BODEGA = @CODIGO_BODEGA
And CODIGO_DE_UBICACION = @CODIGO_DE_UBICACION
And CODIGO_DE_LOTE = @CODIGO_DE_LOTE

If @@error <> 0
Begin
Close c_COMPRAS_DET2
deallocate cursor c_COMPRAS_DET2
Exec SPCMSG 'R',@id,'INSERT MOV_INVENTARIO_DET 2'
Exec SPCROLLBACKTRAN
Return 1
End
End -- Si registramos costos...


-----------------------------------------------------------------------------------------------------------
----------------------------ZONA DEL PROBLEMA---------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------


Exec @ok = sp_Cambio_costo_lote
@PRODUCT0 = @PRODUCT0
, @CODIGO_BODEGA = @CODIGO_BODEGA
, @CODIGO_DE_UBICACION = @CODIGO_DE_UBICACION
, @CODIGO_DE_LOTE = @CODIGO_DE_LOTE
, @FECHA_ANALISIS = @FECHA_COMPRA

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

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

End -- Ciclo de productos para existencias y movimientos de inventario

Close c_COMPRAS_DET2
Deallocate cursor c_COMPRAS_DET2

-- Modificamos el estado de la compra ( despues de procesar todos los detalles )
-- -----------------------------------------------------------------------------
If @MANEJO_COSTOS = 'S'
Select @tocaestado = 'A' -- Si es ingreso normal asignamos ACTUALIZADA
Else
If @estado = 'P' -- Si el ingreso no maneja costos
Select @tocaestado = 'E' -- Esta pendiente, asignamos EXISTENCIAS ACTUALIZADAS
Else
Select @tocaestado = 'A' -- Esta con existencias actualizadas, asignamos ACTUALIZADA

If @estado = 'P' -- Solo la primera o única ejecucion obtenemos datos de auditoria
Select @USUARIO_ACTUALIZA = @USUARIO
, @FECHA_ACTUALIZACION = @FECHA_SIS

Update COMPRAS_ENC
Set ESTADO_COMPRA = @tocaestado -- Analizado en bloque anterior
, USUARIO_ACTUALIZA = @USUARIO_ACTUALIZA -- Puede ser el del sistema o el que actualizo primera vez
, FECHA_ACTUALIZACION = @FECHA_ACTUALIZACION -- Puede ser el del sistema o cuando se actualizo primera vez
, CODIGO_MOV_INVEN = @TIPO_MOV_INVENTARIO -- Siempre es el mismo
, NUMERO_MOVIMIENTO = @NUMERO_MOV_INVENTARIO -- Siempre es el mismo
Where @codigo_tipo_compra = CODIGO_TIPO_COMPRA
and @codigo_compra = CODIGO_DE_COMPRA

If @@error <> 0
Begin
Exec SPCMSG 'R',@id,'No se pudo registrar DATOS DE AUDITORIA Y MOVIMIENTO DE INVENTARIO en el ingreso con costo'
Exec SPCROLLBACKTRAN
Return 1
End

-- Contabilizacion del ingreso con costo si no envian tipo de movimiento a generar
-- -------------------------------------------------------------------------------
If @MOV_INVENTARIO_AUX = null
Begin
Exec @ok = PARTIDA_CONTABLE_ING_COSTO
@CODIGO_TIPO_COMPRA = @codigo_tipo_compra
, @CODIGO_DE_COMPRA = @codigo_compra
, @CONTRAPARTIDA = 0

If @ok <> 0
Begin
Exec SPCMSG 'R',@id,'No se puede contabilizar el ingreso con costo'
Exec SPCROLLBACKTRAN
Return 1
End
End

-- Si todo OK
-- ----------
Commit Transaction
  #8 (permalink)  
Antiguo 04/09/2012, 08:24
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

Arriba donde dice ZONA DEL PROBLEMA ahi esta el error supuestamente, como les digo , este mismo procedimiento corre perfecto en VB5 o si uno lo llama directamente en SQL
  #9 (permalink)  
Antiguo 04/09/2012, 08:54
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: Problema con Store Procedure VB2010 express

mmmm creo que mejor no miro el procedure... no pense que fuera tan largo... jajajaja Pero creo que acabo de ver tu error... Porqué no intentas mandarselos como parametro del odbc en ves de colocarlo como cadena ??
Te adjunto el link : Pasando parametros por Store Procedures con Command
Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #10 (permalink)  
Antiguo 04/09/2012, 09:21
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

Cita:
Iniciado por Aquaventus Ver Mensaje
mmmm creo que mejor no miro el procedure... no pense que fuera tan largo... jajajaja Pero creo que acabo de ver tu error... Porqué no intentas mandarselos como parametro del odbc en ves de colocarlo como cadena ??
Te adjunto el link : [URL="http://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.71).aspx"]Pasando parametros por Store Procedures con Command[/URL]
Saludos!.
ya lo intente y el error es el mismo :(
  #11 (permalink)  
Antiguo 04/09/2012, 09:28
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema con Store Procedure VB2010 express

Que tal codigo de Stored Procedure mal ordenado, usa cursores una mal estructuracion por lo que veo.

Solo una consulta cual es el codigo de error que te vota o el mensaje completo de error que te genera al ejecutar este stored procedure desde VISUAL STUDIO EXPRESS
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #12 (permalink)  
Antiguo 04/09/2012, 09:36
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

Cita:
Iniciado por Dradi7 Ver Mensaje
Que tal codigo de Stored Procedure mal ordenado, usa cursores una mal estructuracion por lo que veo.

Solo una consulta cual es el codigo de error que te vota o el mensaje completo de error que te genera al ejecutar este stored procedure desde VISUAL STUDIO EXPRESS
Creeme que yo tambien estoy asi como que loco de ver como se programaba antes, ese codigo es de 1994 y a mi me toco meterle mano

este es el codigo que tira de error
ERROR [HY000] [INTERSOLV][ODBC SQL Server driver][SQL Server]Attempt to insert NULL value into column 'NUMERO_MOVIMIENTO', table 'MOV_INVENTARIO_DET'; column does not allow nulls. Update fails.

dice que se esta insertando un nulo pero no deberia de insertar nulo , es como que a medio programa se pierde el valor de esa variable...
  #13 (permalink)  
Antiguo 04/09/2012, 10:01
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema con Store Procedure VB2010 express

Revisando tu STORED PROCEDURE al OJO pude encontrar en donde mas o menos esta el error revisa esta parte de tu STORED PROCEDURE

Código SQL:
Ver original
  1. SELECT @id = 'inve_actualiza_compras'
  2. , @USUARIO = suser_name()
  3. , @FECHA_SIS = getdate()
  4. , @FECHA_COMPRA = FECHA_COMPRA
  5. , @estado = ESTADO_COMPRA
  6. , @codigo_division = CODIGO_DIVISION
  7. , @USUARIO_ACTUALIZA = USUARIO_ACTUALIZA
  8. , @FECHA_ACTUALIZACION = FECHA_ACTUALIZACION
  9. , @mes = datepart(mm,FECHA_COMPRA)
  10. , @ano = datepart(yy,FECHA_COMPRA)
  11. , @proveedor = CODIGO_PROVEEDOR
  12. FROM COMPRAS_ENC
  13. WHERE CODIGO_TIPO_COMPRA = @codigo_tipo_compra
  14. AND CODIGO_DE_COMPRA = @codigo_compra;

En esta parte capturas el @estado con esta variable estas validando un monton de cosas como la variable @NUMERO_MOV_INVENTARIO en donde te genera el error

Código SQL:
Ver original
  1. IF @estado <> 'E' -- Solo si es la primera o unica actualizacion de la compra
  2. BEGIN
  3. SELECT @NUMERO_MOV_INVENTARIO = IsNull(CORR_INVE_ING_COSTO, 0) + 1
  4. FROM PARAMETRO_GENERALES
  5. WHERE COMPANIA = 'GA'

Verifica lo siguiente

- Si @estado te devuelve la variable correcta E si en caso no te devuelve eso entonces te generara el error nulo ya que no capturara el valor que le debe corresponder a @NUMERO_MOV_INVENTARIO.
- En otro caso valida si el select siguiente genera el valor adecuado para @NUMERO_MOV_INVENTARIO ya que en esta consulta generara de todas maneras nula si la consulta no devuelve algun registro, esto es diferente a devolver una columna nula OJO

Código SQL:
Ver original
  1. IF @estado <> 'E' -- Solo si es la primera o unica actualizacion de la compra
  2. BEGIN
  3. SELECT @NUMERO_MOV_INVENTARIO = IsNull(CORR_INVE_ING_COSTO, 0) + 1
  4. FROM PARAMETRO_GENERALES
  5. WHERE COMPANIA = 'GA'
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #14 (permalink)  
Antiguo 04/09/2012, 10:35
Avatar de Jamsito  
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con Store Procedure VB2010 express

Cita:
Iniciado por Dradi7 Ver Mensaje
Revisando tu STORED PROCEDURE al OJO pude encontrar en donde mas o menos esta el error revisa esta parte de tu STORED PROCEDURE

Código SQL:
Ver original
  1. SELECT @id = 'inve_actualiza_compras'
  2. , @USUARIO = suser_name()
  3. , @FECHA_SIS = getdate()
  4. , @FECHA_COMPRA = FECHA_COMPRA
  5. , @estado = ESTADO_COMPRA
  6. , @codigo_division = CODIGO_DIVISION
  7. , @USUARIO_ACTUALIZA = USUARIO_ACTUALIZA
  8. , @FECHA_ACTUALIZACION = FECHA_ACTUALIZACION
  9. , @mes = datepart(mm,FECHA_COMPRA)
  10. , @ano = datepart(yy,FECHA_COMPRA)
  11. , @proveedor = CODIGO_PROVEEDOR
  12. FROM COMPRAS_ENC
  13. WHERE CODIGO_TIPO_COMPRA = @codigo_tipo_compra
  14. AND CODIGO_DE_COMPRA = @codigo_compra;

En esta parte capturas el @estado con esta variable estas validando un monton de cosas como la variable @NUMERO_MOV_INVENTARIO en donde te genera el error

Código SQL:
Ver original
  1. IF @estado <> 'E' -- Solo si es la primera o unica actualizacion de la compra
  2. BEGIN
  3. SELECT @NUMERO_MOV_INVENTARIO = IsNull(CORR_INVE_ING_COSTO, 0) + 1
  4. FROM PARAMETRO_GENERALES
  5. WHERE COMPANIA = 'GA'

Verifica lo siguiente

- Si @estado te devuelve la variable correcta E si en caso no te devuelve eso entonces te generara el error nulo ya que no capturara el valor que le debe corresponder a @NUMERO_MOV_INVENTARIO.
- En otro caso valida si el select siguiente genera el valor adecuado para @NUMERO_MOV_INVENTARIO ya que en esta consulta generara de todas maneras nula si la consulta no devuelve algun registro, esto es diferente a devolver una columna nula OJO

Código SQL:
Ver original
  1. IF @estado <> 'E' -- Solo si es la primera o unica actualizacion de la compra
  2. BEGIN
  3. SELECT @NUMERO_MOV_INVENTARIO = IsNull(CORR_INVE_ING_COSTO, 0) + 1
  4. FROM PARAMETRO_GENERALES
  5. WHERE COMPANIA = 'GA'
Ok voy a verificar lo que dices, a la hora de consultar el estado en la BD es "P" osea diferente a "E" por lo que si entra y obtiene el numero de movimiento, pero verificare lo de abajo.

Habra alguna forma de desplegar un cuadro de texto cuando se ejecute el procedimiento almacenado?

Etiquetas: procedimiento, procedure, store, almacenar
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 03:27.