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

#1 MAXI
27/01/2005 - 00:18 | Informe spam
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
#2 K
27/01/2005 - 00:56 | Informe spam
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
#3 MAXI
27/01/2005 - 02:40 | Informe spam
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
#4 K
27/01/2005 - 14:39 | Informe spam
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
#5 Maxi
27/01/2005 - 17:15 | Informe spam
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 Respuesta Tengo una respuesta
Search Busqueda sugerida