Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/06/2005, 11:48
VaRg@S
 
Fecha de Ingreso: abril-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
Hola, disculpa que no tenga tanto tiempo para analizar tu caso pero te dejo en ejemplo de como lo hago yo

Ojala te sirva

Código:
-- AUTOR: GVV. OBJETO: Eliminar una venta, su detalle, y los abonos en caso de ser un crédito
-- También Actualiza lotes

ALTER  PROCEDURE Elimina_Venta 
(@Venta INT, @Sucursal INT, @Band INT, @Motivo nvarchar(150) = null, @Fecha datetime = null)
/*@Band = 1 Elimina la venta completamente
  @Band = 0 Reactualiza lotes, no elimina encabezado de venta pero pone status en 2 (Cancelado) */
AS
DECLARE @Cant INT, @Prod NVARCHAR(4), @Compra INT

DECLARE	DetVta CURSOR 
		FOR SELECT DetConCan, CatProIde, CatComIde FROM DetVtaCon WHERE VtaConIde = @Venta
OPEN DetVta
	FETCH NEXT FROM DetVta INTO @Cant, @Prod, @Compra

WHILE (@@fetch_status <> -1)
BEGIN
	IF (@@fetch_status <> -2)
	BEGIN
		UPDATE TblCatLot
		SET CatLotCan = CatLotCan + @Cant
		WHERE CatLotCve = @Prod + '-' + CAST(@Compra AS NVARCHAR)
		AND CatSucIde = @Sucursal
	END
	FETCH NEXT FROM DetVta INTO @Cant, @Prod, @Compra
END

CLOSE DetVta
DEALLOCATE DetVta

if (@Band = 1)
	BEGIN
		DELETE FROM DetVtaCon WHERE VtaConIde = @Venta	--Se Borra el detalle de la venta

		DELETE FROM TblCatAbo WHERE CatVtaIde = @Venta	--Se Borra cualquier abono en caso de ser
														--un crédito
														
		DELETE FROM TblVtaCon Where Id = @Venta			--Se Borra el encabezado de la venta
	END
ELSE IF (@Band = 0)
	BEGIN
		UPDATE TblVtaCon 
		SET VtaConSta = 2, VtaConObs = VtaConObs + ' *** ' + @Motivo, FecMovCan = @Fecha
		WHERE Id = @Venta
	END
Saludos