Con cursores o sin ellos

27/01/2005 - 00:07 por K | Informe spam
Hola grupo quisiera un poquito de ayuda para terminar mi procedimiento

Aqui recupero un indice y agrego los
datos de la vista a mi tabla TemporalKardex...
En la tabla temporalKardex el utlimo campo
tiene el valor de 0 donde deseo generar los saldos
recorriendo las filas, estoy pensando hacerlo con Cursores
aunque leo que es poco recomenado, no se si habria otra
forma, si no es asi igual me falta un poco
de ayuda para la ultima parte donde que creo que
tendria que usar @@FETCH_STATUS ,WHILE y otros ..

Gracias por su ayuda

DECLARE @Indice SMALLINT,@Cantidad INT
-
-

SELECT @IndiceÊSE WHEN MAX(indice)=NULL THEN 1 ELSE MAX(indice) END FROM
TemporalKardex
-
-
INSERT INTO TemporalKardex
SELECT TOP 100 PERCENT @Indice,dbo.MovimientosCompletos.Movimiento as [Nº
Movimiento],
dbo.MovimientosCompletos.TipoMovimiento as [Tipo
Movimiento], dbo.MovimientosCompletos.TipoDocumento + ' ' +
dbo.MovimientosCompletos.NumeroDocumento as Documento,
dbo.MovimientosCompletos.AlmacenOrigen as Origen,
dbo.MovimientosCompletos.AlmacenDestino as Destino,
dbo.MovimientosCompletos.FechaMovimiento as Fecha,
dbo.MovimientosCompletos.[Nº Cotizacion],
dbo.MovimientosCompletos.Cantidad, 0 as Saldo
FROM dbo.MovimientosCompletos
WHERE dbo.MovimientosCompletos.CodigoArticulo = @CodigoArticulo
GROUP BY dbo.MovimientosCompletos.Movimiento,
dbo.MovimientosCompletos.CodigoArticulo,
dbo.MovimientosCompletos.descripcion,
dbo.MovimientosCompletos.TipoMovimiento,
dbo.MovimientosCompletos.TipoDocumento,
dbo.MovimientosCompletos.NumeroDocumento,
dbo.MovimientosCompletos.AlmacenOrigen,
dbo.MovimientosCompletos.AlmacenDestino,
dbo.MovimientosCompletos.FechaMovimiento,
dbo.MovimientosCompletos.Cantidad,dbo.Movimientos.Completos.[Nº
Cotizacion]
ORDER BY
dbo.MovimientosCompletos.FechaMovimiento,dbo.MovimientosCompletos.TipoMovimi
ento,dbo.MovimientosCompletos.Movimiento

Preguntas similare

Leer las respuestas

#11 Maxi
30/01/2005 - 01:29 | Informe spam
Hola, me alegro que te haya sido util :-), ahora la tabla temporal quizas
tambien la podes sacar ;)


"" escribió en el mensaje
news:
Excelente Maxi muchas gracias por la consulta solo tuve que sumar
las cantidades de mi tabla ya que en la temporal ya lo tenia por negativo
o positivo segun el tipo de movimiento.

Te lo agradesco:-) esto me va ahorrar mucho tiempo



"Maxi" escribió en el mensaje
news:
Hola mi amigo, lo prometido es deuda :-), te arme un modelito de ejemplo
para representar el problema, la idea es que lo entiendas y lo puedas
extender a tu modelo.

>>
CREATE TABLE #TR (ID INT IDENTITY, ARTICULO VARCHAR(30), TIPO CHAR(1),
FECHA DATETIME, CANTIDAD FLOAT)
GO

INSERT INTO #TR (ARTICULO,TIPO,FECHA,CANTIDAD) VALUES
('A','I',GETDATE(),100)
INSERT INTO #TR (ARTICULO,TIPO,FECHA,CANTIDAD) VALUES


('B','I',GETDATE(),10)
INSERT INTO #TR (ARTICULO,TIPO,FECHA,CANTIDAD) VALUES
('C','I',GETDATE(),1000)
INSERT INTO #TR (ARTICULO,TIPO,FECHA,CANTIDAD) VALUES
('A','I',GETDATE(),100)
INSERT INTO #TR (ARTICULO,TIPO,FECHA,CANTIDAD) VALUES


('A','O',GETDATE(),50)
INSERT INTO #TR (ARTICULO,TIPO,FECHA,CANTIDAD) VALUES


('B','I',GETDATE(),1)

SELECT #TR.ID,#TR.FECHA,#TR.ARTICULO,#TR.CANTIDAD,#tr.tipo,
sum(case when t2.tipo='i' then
t2.cantidad else (t2.cantidad*-1) end) as saldo
from #tr left join (select cantidad,articulo,id,tipo from #tr) t2 on
t2.articulo = #tr.articulo and
t2.id <= #tr.id
group by #TR.ID,#TR.FECHA,#TR.ARTICULO,#TR.CANTIDAD,#tr.tipo

==>>
Espero sea lo que buscas.




Salu2
Maxi


"" escribió en el mensaje
news:
>
> Si eso es lo que quiero exactamente ...
>
>
> "MAXI" escribió en el mensaje
> news:
>> Hola, a ver si nos explicamos (soy medio lento en algunas
>> cuestiones ),
> por
>> cada transaccion quieres el saldo acumulado por ej
>>
>> transaccion 1 salida 10 saldo 100
>> transaccio 2 salida 20 saldo 80
>> transaccion 3 entrada 100 saldo 180
>>
>> DE ser asi y por articulo digamos se podria implementar con


subconsultas,
>> decime si es asi lo que buscas, asi mañana te armo el query (hoy no


puedo
>> porque me estoy llendo, pero mañana lo tenes :-)))
>>
>> Un abrazo
>>
>>
>>
>> Maxi
>>
>> Buenos Aires - Argentina
>> Desarrollador .NET 3 Estrellas
>> Microsoft User Group (MUG)
>>
>> MSN:
>> "" escribió en el mensaje
>> news:
>> > Ante todo gracias por prestar atencion a mi pregunta paresco
>> > un poco molesto creo yo pero ya probe algo de cursores y
>> > ya veo porque no lo recomiendan se demora una barbaridad en
>> > devolverme datos
>> >
>> > Bueno te paso la forma final en la que tengo mis datos en mi tabla
>> > TemporalKardex .
>> > Nº Mov. Tipo Nº Doc. Origen Destino
>> > Fecha Cantidad
>> > 9702678 Ingreso G 0000000003 BP - ALMACEN CENTRAL


1998-03-31
>> > 3000
>> > 9702720 Salida G 0030002550 ALMACEN CENTRAL -- MORANTE A. Y


CIA.
>> > 1998-04-03 -100
>> >
>> > Solo me faltaria el saldo...
>> >
>> > "Maxi" escribió en el mensaje
>> > news:
>> >> Hola, sacar un saldo por movimiento no cambia mucho de eso. Podrias
>> >> postiarme algun ejemplo de datos y como lo queres asi te lo armo
>> >>
>> >>
>> >> Salu2
>> >> Maxi
>> >>
>> >>
>> >> "" escribió en el mensaje
>> >> news:%
>> >> > Hola Maxi lo que me dices seria si quisiera el saldo final
>> >> > pero sacar un saldo por movimiento
>> >> >
>> >> > En la tabla TemporalKardex esperaba sacar eso para
>> >> > mostrarlo en mi reporte...
>> >> >
>> >> > Pensaba moverme por cada fila para capturar el valor en
>> >> > un variable y sumarlo al movimientos sgte y asi sacar el
>> >> > saldo...
>> >> >
>> >> > TipoMovimiento Cantidad Saldo
>> >> > I 10 10 capturo el
>> >> > saldo
>> >> > S -5 + valor capturado del saldo me
>> >> > daria 5
>> >> >
>> >> > Algo asi era lo que esperaba poder hacer pero por lo que
>> >> > leo en lo hilos no recomiendan el uso de cursores
>> >> >
>> >> > "MAXI" escribió en el mensaje
>> >> > news:
>> >> >> Hola, me imagino que tipo de movimiento indica si es entrada o
> salida
>> >> >> verdad? supongamos que estan asi I - S, entonces para saber el
>> >> >> saldo
>> > por
>> >> >> articulo seria
>> >> >>
>> >> >> select movimiento.codigoArticulo,sum(case when
>> >> >> documento.tipoMovimiento
>> > >> >> >> >> 'I' then movimiento.cantidad else - movimiento.cantidad end) as
> Saldo
>> >> >> from documento inner join movimiento on


movimiento.numeromovimiento
> >> >> >> >> documento.numeromovimiento
>> >> >> group by movimiento.codigoArticulo
>> >> >>
>> >> >>
>> >> >> pd: a esto le puedes agregar todo los campos que necesitas,


quizas
>> > debas
>> >> >> hasta hacer alguna mutiplicacion por unidad de medida, saber


costos
> (o
>> >> >> sea
>> >> >> por precio unitario), etc.
>> >> >>
>> >> >> Espero lo hayas entendido y te sea de utilidad
>> >> >>
>> >> >>
>> >> >>
>> >> >> Maxi
>> >> >>
>> >> >> Buenos Aires - Argentina
>> >> >> Desarrollador .NET 3 Estrellas
>> >> >> Microsoft User Group (MUG)
>> >> >>
>> >> >> MSN:
>> >> >> "" escribió en el mensaje
>> >> >> news:%
>> >> >> > Esta es mi tabla de encabezado
>> >> >> > CREATE TABLE [dbo].[Documento] (
>> >> >> > [NumeroMovimiento] [int] NOT NULL ,
>> >> >> > [TipoDocumento] [char] (1) COLLATE Modern_Spanish_CI_AS NOT


NULL
>> >> >> > ,
>> >> >> > [NumeroDocumento] [char] (10) COLLATE Modern_Spanish_CI_AS NOT
> NULL
>> >> >> > ,
>> >> >> > [FechaDocumento] [smalldatetime] NOT NULL ,
>> >> >> > [AlmacenOrigen] [char] (2) COLLATE Modern_Spanish_CI_AS NOT


NULL
>> >> >> > ,
>> >> >> > [AlmacenDestino] [char] (2) COLLATE Modern_Spanish_CI_AS NOT


NULL
> ,
>> >> >> > [TipoMovimiento] [char] (2) COLLATE Modern_Spanish_CI_AS NOT


NULL
> ,
>> >> >> > [FechaMovimiento] [smalldatetime] NOT NULL ,
>> >> >> > [CodigoCliente] [int] NULL ,
>> >> >> > [CodigoProveedor] [int] NULL ,
>> >> >> > [Estado] [smallint] NOT NULL ,
>> >> >> > [CantidadTotal] [decimal](18, 0) NOT NULL ,
>> >> >> > [CantidadInf] [decimal](18, 0) NOT NULL ,
>> >> >> > [SerieCotizacion] [char] (3) COLLATE Modern_Spanish_CI_AS NULL


,
>> >> >> > [CodigoCotizacion] [char] (7) COLLATE Modern_Spanish_CI_AS
>> >> >> > NULL


,
>> >> >> > [PrecioTotal] [decimal](19, 4) NOT NULL ,
>> >> >> > [PrecioInf] [decimal](19, 4) NOT NULL
>> >> >> > ) ON [PRIMARY]
>> >> >> > GO
>> >> >> >
>> >> >> > ALTER TABLE [dbo].[Documento] ADD
>> >> >> > CONSTRAINT [PK_Documento] PRIMARY KEY CLUSTERED
>> >> >> > (
>> >> >> > [NumeroMovimiento]
>> >> >> > ) ON [PRIMARY]
>> >> >> > GO
>> >> >> > Esta es mi tabla de detalles
>> >> >> > CREATE TABLE [dbo].[Movimientos] (
>> >> >> > [NumeroMovimiento] [int] NOT NULL ,
>> >> >> > [CodigoArticulo] [char] (12) COLLATE Modern_Spanish_CI_AS NOT
>> >> >> > NULL
> ,
>> >> >> > [FechaMovimiento] [smalldatetime] NOT NULL ,
>> >> >> > [Cantidad] [decimal](18, 0) NOT NULL ,
>> >> >> > [CodigoMoneda] [char] (1) COLLATE Modern_Spanish_CI_AS NOT
>> >> >> > NULL


,
>> >> >> > [Precio] [money] NULL ,
>> >> >> > [Costo] [money] NULL ,
>> >> >> > [Descuento1] [money] NULL ,
>> >> >> > [Descuento2] [money] NULL
>> >> >> > ) ON [PRIMARY]
>> >> >> > GO
>> >> >> >
>> >> >> > ALTER TABLE [dbo].[Movimientos] ADD
>> >> >> > CONSTRAINT [PK_Movimientos] PRIMARY KEY CLUSTERED
>> >> >> > (
>> >> >> > [NumeroMovimiento],
>> >> >> > [CodigoArticulo]
>> >> >> > ) ON [PRIMARY]
>> >> >> > GO
>> >> >> >
>> >> >> > ALTER TABLE [dbo].[Movimientos] ADD
>> >> >> > CONSTRAINT [FK_Movimientos_Documento] FOREIGN KEY
>> >> >> > (
>> >> >> > [NumeroMovimiento]
>> >> >> > ) REFERENCES [dbo].[Documento] (
>> >> >> > [NumeroMovimiento]
>> >> >> > )
>> >> >> > GO
>> >> >> >
>> >> >> > Te comento hasta este momento ya tengo los saldos pero yo los
>> >> >> > saco
>> > por
>> >> >> > VB, los cargo en una grilla y ahi los saco que ahi es muy
>> >> >> > sencillo
>> > pero
>> >> >> > tengo que guardarlos otra vez con el saldo ya generado y
>> >> >> > recien
> ahi
>> >> >> > mostrarlos para
>> >> >> > la impresion, a parte jalarlos para otro control y como
>> >> >> > ahora
>> > voy
>> >> >> > a
>> >> >> > trabajar
>> >> >> > con mas de un almacen no queria estar haciendo eso para cada
> almacen
>> >> >> > que
>> >> >> > se fuera a creary me parecio mas facil cargar mi
>> >> >> > consulta
>> >> > que
>> >> >> > no
>> >> >> > tiene
>> >> >> > saldo guardar todos los datos con su indice respectivo (para


que
>> > puedan
>> >> >> > recuperar
>> >> >> > solo los movimientos de ese articulo consultado) en la tabla
>> >> >> > TemporalKardex
>> >> >> > y realizar el calculo de los saldos en el procedimiento todo
>> >> >> > en
>> >> >> > un
>> > solo
>> >> >> > proceso
>> >> >> > ya asi no hago ningun trabajo en el lado del cliente y solo
> muestro
>> > la
>> >> >> > data.
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > "MAXI" escribió en el mensaje
>> >> >> > news:enVHQ1$
>> >> >> >> hHola, seria bueno que nos envies la estructura de las
>> >> >> >> tablas,
> pero
>> > si
>> >> >> > esta
>> >> >> >> bien hecho el diseño no necesitas cursores
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> Maxi
>> >> >> >>
>> >> >> >> Buenos Aires - Argentina
>> >> >> >> Desarrollador .NET 3 Estrellas
>> >> >> >> Microsoft User Group (MUG)
>> >> >> >>
>> >> >> >> MSN:
>> >> >> >> "" escribió en el


mensaje
>> >> >> >> news:ecYXHv$
>> >> >> >> > Hola grupo quisiera un poquito de ayuda para terminar mi
>> >> > procedimiento
>> >> >> >> >
>> >> >> >> > Aqui recupero un indice y agrego los
>> >> >> >> > datos de la vista a mi tabla TemporalKardex...
>> >> >> >> > En la tabla temporalKardex el utlimo campo
>> >> >> >> > tiene el valor de 0 donde deseo generar los saldos
>> >> >> >> > recorriendo las filas, estoy pensando hacerlo con Cursores
>> >> >> >> > aunque leo que es poco recomenado, no se si habria otra
>> >> >> >> > forma, si no es asi igual me falta un poco
>> >> >> >> > de ayuda para la ultima parte donde que creo que
>> >> >> >> > tendria que usar @@FETCH_STATUS ,WHILE y otros ..
>> >> >> >> >
>> >> >> >> > Gracias por su ayuda
>> >> >> >> >
>> >> >> >> > DECLARE @Indice SMALLINT,@Cantidad INT
>> >> >> >>
>> >> >>
>> >>
>>

-










-
> -
>> > -
>> >> > -
>> >> >> >>
>> >> >>
>> >>
>>

-










-
> -
>> > -
>> >> > -
>> >> >> >> >
>> >> >> >> > SELECT @IndiceÊSE WHEN MAX(indice)=NULL THEN 1 ELSE
> MAX(indice)
>> >> >> >> > END
>> >> >> > FROM
>> >> >> >> > TemporalKardex
>> >> >> >>
>> >> >>
>> >>
>>

-










-
> -
>> > -
>> >> > -
>> >> >> >>
>> >> >>
>> >>
>>

-










-
> -
>> > -
>> >> > -
>> >> >> >> > INSERT INTO TemporalKardex
>> >> >> >> > SELECT TOP 100 PERCENT
>> >> >> >> > @Indice,dbo.MovimientosCompletos.Movimiento
>> >> >> >> > as
>> >> >> > [Nº
>> >> >> >> > Movimiento],
>> >> >> >> >
>> >> >> >> > dbo.MovimientosCompletos.TipoMovimiento
>> >> >> >> > as
>> >> >> >> > [Tipo
>> >> >> >> > Movimiento], dbo.MovimientosCompletos.TipoDocumento + ' ' +
>> >> >> >> > dbo.MovimientosCompletos.NumeroDocumento as Documento,
>> >> >> >> > dbo.MovimientosCompletos.AlmacenOrigen


as
>> >> > Origen,
>> >> >> >> > dbo.MovimientosCompletos.AlmacenDestino as Destino,
>> >> >> >> > dbo.MovimientosCompletos.FechaMovimiento as Fecha,
>> >> >> >> > dbo.MovimientosCompletos.[Nº Cotizacion],
>> >> >> >> > dbo.MovimientosCompletos.Cantidad, 0
>> >> >> >> > as
>> >> >> >> > Saldo
>> >> >> >> > FROM dbo.MovimientosCompletos
>> >> >> >> > WHERE dbo.MovimientosCompletos.CodigoArticulo >> >> >> >> >> > @CodigoArticulo
>> >> >> >> > GROUP BY dbo.MovimientosCompletos.Movimiento,
>> >> >> >> > dbo.MovimientosCompletos.CodigoArticulo,
>> >> >> >> > dbo.MovimientosCompletos.descripcion,
>> >> >> >> >


dbo.MovimientosCompletos.TipoMovimiento,
>> >> >> >> > dbo.MovimientosCompletos.TipoDocumento,
>> >> >> >> > dbo.MovimientosCompletos.NumeroDocumento,
>> >> >> >> >
>> >> >> >> > dbo.MovimientosCompletos.AlmacenOrigen,
>> >> >> >> > dbo.MovimientosCompletos.AlmacenDestino,
>> >> >> >> > dbo.MovimientosCompletos.FechaMovimiento,
>> >> >> >> >
>> >> >> >> >


dbo.MovimientosCompletos.Cantidad,dbo.Movimientos.Completos.[Nº
>> >> >> >> > Cotizacion]
>> >> >> >> > ORDER BY
>> >> >> >> >
>> >> >> >
>> >> >
>> >
>


dbo.MovimientosCompletos.FechaMovimiento,dbo.MovimientosCompletos.TipoMovimi
>> >> >> >> > ento,dbo.MovimientosCompletos.Movimiento
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida