Franko
Hola estoy haciendo una prueba final a mi procedimiento, la prueba consiste
en que al momento de ejecutar un store desde Asp me salgo del sistema sin
cerrar la sesion de ASP por motivos de si se cae el sistema y cosas asi
como puedo validar ese tipo de cuestiones el detalle es que cuando quiero
checar manualmente si se realizao el ROLLBACK no me deja checar las posibles
tablas afectadas. el store es el siguiente
ALTER PROCEDURE dbo.spTrasladoRecepcion 140286, 11, 898
@IdTras int,
@IdSuc int,
@IdUsua int
AS
/*
Nombre de Store Procedure: Recepcion de Traslados
Tablas involucradas: PeticionTraslado , ArticulosTraslados , AlmacenT ,
AlmacenC , MovProductos , AlmacenS
Autor: Juan Francisco Vargas Moreno
Fecha: 10/04/2007
*/
transacciones
Declare
@NomUsua varchar (100),
@error int
SET @NomUsua = (SELECT NomUsua FROM Usuarios WHERE IdUsua = 898)
SET NOCOUNT ON
BEGIN TRAN
existen diferencias
los cuales se encuentran en la tabla "ArticulosTraslados"
UPDATE PeticionTraslado SET ExisteDif = 1
FROM PeticionTraslado PT, ArticulosTraslados AT WHERE PT.IdTras = AT.IdTras
AND EstatusRT = 0 AND CanEnv <> CanRec AND AT.IdTras = @IdTras
SET @error = @@error
IF (@error<>0) GOTO TratarError
productos de "AlmacenT" Vs "ArticulosTraslados"
UPDATE AlmacenT SET CantAlmaT = CantAlmaT - AT.CanRec
FROM AlmacenT ALT, ArticulosTraslados AT WHERE ALT.IdProd = AT.IdProd
AND EstatusRT = 0
AND IdTras = @IdTras
SET @error = @@error
IF (@error<>0) GOTO TratarError
IF @IdSuc = 1
BEGIN
recibida
UPDATE AlmacenC SET CantAlmaC = CantAlmaC + CanRec
FROM AlmacenC AC, ArticulosTraslados AT
WHERE AT.IdTras = @IdTras
AND AT.IdProd IN (SELECT AC.IdProd FROM AlmacenC )
SET @error = @@error
IF (@error<>0) GOTO TratarError
INSERT INTO AlmacenC (IdAlmaC,CantAlmaC,IdProd,FechaAlmaC)
SELECT 1,ISNULL(CanRec, 0), IdProd, convert(nvarchar,GETDATE(),101)
FROM ArticulosTraslados
WHERE IdTras = @IdTras
AND IdProd NOT IN (SELECT Idprod FROM AlmacenC)
SET @error = @@error
IF (@error<>0) GOTO TratarError
tabla "MovProductos"
"MovProductos"
sucursal indicada
'IdTras'
INSERT INTO MovProductos(IdMov, TipoMp, DescTipo, IdProd, FechaMp,
EntradaMp, SalidaMp, AExistencia, DExistencia, IdSuc, IdUsua, Precioprod)
SELECT DISTINCT @IdTras, 'T', 'Traslados', AT.IdProd,
convert(nvarchar,GETDATE(),101), AT.CanRec,0, ISNULL(Dexistencia, 0),
(ISNULL(Dexistencia, 0) + AT.CanRec), 1, @IdUsua, 0
FROM ArticulosTraslados AT LEFT OUTER join MovProductos mp on at.idprod =
mp.idprod
AND MP.idmp IN ( SELECT MAX(Idmp) FROM MovProductos where idsuc = 1
AND idprod IN (select idprod from ArticulosTraslados where idtras =
@IdTras) group by IdProd)
WHERE AT.IdTras = @IdTras AND EstatusRT = 0
SET @error = @@error
IF (@error<>0) GOTO TratarError
END
ELSE
BEGIN
UPDATE AlmacenS SET CantAlmaS = CantAlmaS + CanRec
FROM AlmacenS ALS, ArticulosTraslados AT
WHERE AT.IdTras = @IdTras
AND IdAlmaS = @IdSuc
AND AT.IdProd IN (SELECT ALS.IdProd FROM AlmacenS)
SET @error = @@error
IF (@error<>0) GOTO TratarError
INSERT INTO AlmacenS (IdAlmas,CantAlmas,IdProd,FechaAlmas)
SELECT @IdSuc, ISNULL(CanRec, 0),IdProd,CONVERT(nvarchar,getdate(),101)
FROM ArticulosTraslados
WHERE IdTras = @IdTras
AND IdProd NOT IN (SELECT IdProd FROM AlmacenS)
SET @error = @@error
IF (@error<>0) GOTO TratarError
INSERT INTO MovProductos(IdMov, TipoMp, DescTipo, IdProd, FechaMp,
EntradaMp, SalidaMp, AExistencia, DExistencia, IdSuc, IdUsua, Precioprod)
SELECT @IdTras, 'T', 'Traslados', AT.IdProd,
convert(nvarchar,GETDATE(),101), AT.CanRec,0,ISNULL(Dexistencia, 0),
(ISNULL(Dexistencia, 0) + AT.CanRec), @IdSuc, @IdUsua, 0
FROM ArticulosTraslados AT LEFT OUTER join MovProductos mp on at.idprod =
mp.idprod
AND MP.idmp IN ( SELECT MAX(Idmp) FROM MovProductos where idsuc = @IdSuc
AND idprod IN (select idprod from ArticulosTraslados where idtras =
@IdTras) group by IdProd)
WHERE AT.IdTras = @IdTras AND AT.EstatusRT = 0
SET @error = @@error
IF (@error<>0) GOTO TratarError
END
Identificador de traslado(IdTras)
UPDATE ArticulosTraslados SET EstatusRT = 1,DifProd = ABS(DifProd)
WHERE IdTras = @IdTras
AND CanEnv <> 0
SET @error = @@error
IF (@error<>0) GOTO TratarError
OpRecibo , OpcionTras , EstatusRec
traslado(IdTras)
UPDATE PeticionTraslado
SET EntDes = @NomUsua, OpRecibo = 1, OpcionTras = 1, Estatusrec = 1
WHERE IdTras = @IdTras
SET @error = @@error
IF (@error<>0) GOTO TratarError
existirla se realiza un 'ROLLBACK'
TratarError:
If @@Error<>0
BEGIN
PRINT 'Ha ecorrido un error. Abortamos la transacción'
ROLLBACK TRAN
END
COMMIT TRAN
SET NOCOUNT OFF
GO
Alguna Recomendacion.
Leer las respuestas