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

#6 K
27/01/2005 - 18:06 | Informe spam
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
>> >> >
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#7 MAXI
27/01/2005 - 18:33 | Informe spam
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
>> >> >
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>






Respuesta Responder a este mensaje
#8 K
27/01/2005 - 20:26 | Informe spam
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
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#9 Maxi
28/01/2005 - 21:48 | Informe spam
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
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>






Respuesta Responder a este mensaje
#10 K
29/01/2005 - 19:59 | Informe spam
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
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida