SQL Server - Actualizar registros

   
Vista:

Actualizar registros

Publicado por Victor Elizondo (21 intervenciones) el 09/11/2009 23:42:16
Que tal a todos

Tengo una tabla llamada "pedidos" de la cual me interesan 5 campos campos: Serie, Folio, Linea, Total y MontoPagado y mostraré varios registros del mismo tipo:

Serie Folio Linea Total MontoPagado

AI 4376 1 1200.31 NULL
AI 4376 4 1799.18 NULL
AI 4376 12 1904.14 NULL
AI 4376 13 4707.98 NULL
AI 4376 14 4617.62 NULL
AI 4376 18 1536.30 NULL
AI 4376 19 2528.32 NULL
AI 4376 20 11277.00 NULL
AI 4376 23 49915.54 NULL
AI 4376 25 64314.92 NULL
AI 4376 26 10.00 NULL

Quiero ACTUALIZAR el campo MontoPagado usando un STORED PROCEDURE el cual tiene como parametro de entrada @dblMontoSaldado, el cual por ejemplo si tiene de valor 1000 que se grabe para el primer registro en el campo MontoPagado ese valor de 1000 (Fijarse que en Total está para ese primer registro el valor de 1200.31).

El caso especial seria de que si @dblMontoSaldado fuera de 2000 entonces en MontoPagado en el primer registro seria igual al Total, o sea 1200.31, y para el segundo registro el cual el Total es 1799.18 seria la diferencia de 2000 y 1200.31
( 2000 - 1200.31 = 799.69), entonces MontoPagado para el segundo registro seria 799.69

Mi pregunta es que tendria que hacer para que cada que se capture @dblMontoSaldado y sea muy grande se vaya saldando en cada registro y todo en un mismo paso?

Otro ejemplo de lo mismo: Si @dblMontoSaldado fuera de 10000, entonces montoPagado para el primer registro seria de 1200.31, el segundo 1799.18, el tercero 1904.14 Y EL CUARTO REGISTRO MontoPagado seria de 96.37, o sea, faltaban 96.37 para completar los 10000 que se capturaron inicialmente.

Espero haberme explicado bien y de antemano gracias.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

RE:Actualizar registros

Publicado por Isaias (3180 intervenciones) el 10/11/2009 00:27:25
A ver si entendi

Te dan un MONTO (@dblMontoSaldado) y ese, hay que aplicarlo de maner consecutiva por Folio y Linea, hasta saldar dicho monto (0).

¿Esta aplicando pagos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Actualizar registros

Publicado por Victor Elizondo (21 intervenciones) el 10/11/2009 00:37:53
Hola que tal Isaias

Asi es, se esta aplicando pagos y hay que aplicarlo de manera consecutiva por Folio y Linea, no pudiste haberte explicado mejor.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

RE:Actualizar registros

Publicado por Isaias (3180 intervenciones) el 10/11/2009 23:28:18
Te anexo un ejemplo, adaptalo a tus necesidades:

/*
CREATE TABLE #TablaTemporal (Serie char(2), Folio int, Linea int, Total money, MontoPagado money)

insert into #TablaTemporal values('AI', 4376, 1, 1200.31, NULL)
insert into #TablaTemporal values('AI', 4376, 4, 1799.18, NULL)
insert into #TablaTemporal values('AI', 4376, 12, 1904.14, NULL)
insert into #TablaTemporal values('AI', 4376, 13, 4707.98, NULL)
insert into #TablaTemporal values('AI', 4376, 14, 4617.62, NULL)
insert into #TablaTemporal values('AI', 4376, 18, 1536.30, NULL)
insert into #TablaTemporal values('AI', 4376, 19, 2528.32, NULL)
insert into #TablaTemporal values('AI', 4376, 20, 11277.00, NULL)
insert into #TablaTemporal values('AI', 4376, 23, 49915.54, NULL)
insert into #TablaTemporal values('AI', 4376, 25, 64314.92, NULL)
insert into #TablaTemporal values('AI', 4376, 26, 10.00, NULL)

SELECT * FROM #TablaTemporal

DECLARE @ImporteRecibido money
DECLARE @Serie char(3)
DECLARE @Folio int
DECLARE @Linea int
SET @ImporteRecibido = 50000
-- Tomo el primer registro
SELECT TOP 1 @Serie = Serie, @Folio = Folio, @Linea = Linea
FROM #TablaTemporal
WHERE MontoPagado is null
ORDER BY Serie, Folio, Linea
-- Validar que haya registros a aplicar
IF @@ROWCOUNT = 0
SELECT 'FINALIZARIA PROCESO'
-- Entro al ciclo de aplicar el pago
WHILE @ImporteRecibido > 0
BEGIN
-- Aplico el pago
UPDATE #TablaTemporal SET MontoPagado = CASE WHEN Total < @ImporteRecibido THEN Total ELSE @ImporteRecibido END
WHERE Serie = @Serie AND
Folio = @Folio AND
Linea = @Linea
-- Resto el importe aplicado
SELECT @ImporteRecibido = @ImporteRecibido - MontoPagado FROM #TablaTemporal
WHERE Serie = @Serie AND
Folio = @Folio AND
Linea = @Linea
-- Vuelvo a tomar un registro
SELECT TOP 1 @Linea = Linea
FROM #TablaTemporal
WHERE Serie = @Serie AND
Folio = @Folio AND
Linea > @Linea
IF @@ROWCOUNT = 0 OR @ImporteRecibido <= 0
BREAK
CONTINUE
END

SELECT SUM(MontoPagado) FROM #TablaTemporal
*/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar