Power Builder - Ayuda n Sistema

 
Vista:

Ayuda n Sistema

Publicado por Jery (30 intervenciones) el 19/09/2005 18:21:52
Hola a todos quisiera si alguien m puede ayudar o me puede mandar una ayuda de como hacer un sistema de Kardex es q no tengo ni idea de como hacer uno por fa si alguien m puede ayudar dandome las pautas o imagenes de un sistema d Karex a mi correo estaria muy agradecido

[email protected]

Lima
Peru
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda n Sistema

Publicado por Carlos Gil (124 intervenciones) el 19/09/2005 19:59:48
Hola Jordi

Disculpa que no responda de inmediato pero tengo unas preguntas.

¿Ingresaras los datos directamente al Kardex?
o
¿Los datos desde ingresan a travez de un sistema transaccional (por ejemplo un sistema comercial) que registra compras y ventas ????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda n Sistema

Publicado por Jery (30 intervenciones) el 19/09/2005 22:40:01
sistema comercial que registra compras y ventas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda n Sistema

Publicado por Carlos Gil (124 intervenciones) el 20/09/2005 18:36:27
Bueno la solución más efectiva pasa por el diseño de tu Base de datos, te explico. Tienes que crear una tabla padre (la podrías llamar Transaccion) esta tabla padre tendría varias tablas hijas: Compras, Ventas, Transferencias de Ingreso, Transferencia de Salida, etc. Además debes tener una tabla de Articulos y una tabla entre Articulos y Transacción (por ejemplo DetalleTransaccion).
Muchas veces los Contadores manejan cierre de kardex anuales, otros prefieren cierres mensuales, por lo tanto creo que lo mejor es dejar abierta ambas posibilidades, por eso diseñe mi tabla Kardex de la siguiente manera:

CREATE TABLE [dbo].[Kardex] (
[key_kar] [numeric](10, 0) IDENTITY (1, 1) NOT NULL ,
[key_art] [numeric](10, 0) NOT NULL ,
[fecape_kar] [datetime] NOT NULL ,
[feccie_kar] [datetime] NULL ,
[fecreg_kar] [datetime] NOT NULL ,
[karant_kar] [numeric](10, 0) NULL ,
[activo_kar] [char] (10) NOT NULL ,
[cantcierre_kar] [numeric](14, 3) NULL
) ON [PRIMARY]

Te explico el porque de cada campo, para que lo tengas claro
key_kar : Clave primaria de la tabla Kardex
key_art : Codigo del Articulo
fecape_kar : Fecha de apertura del kardex
feccie_kar : Fecha de cierre del kardex ( puede ser nulos para los que aun están abiertos)
fecreg_kar : Fecha de creación del registro ( automáticamente con Getdate() )
karant_kar : Código del Kardex Precedente ( si, es una relación circular)
activo_kar : Campo que indica si el kardex esta activo o no.
cantcierre_kar : Cantidad de cierre del kardex (( puede ser nulos para los que aun están abiertos )

Además tienes que crear la siguiente tabla:

CREATE TABLE [dbo].[DetalleKardex] (
[key_dk] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
[key_kar] [numeric](10, 0) NOT NULL ,
[key_dt] [numeric](18, 0) NULL ,
[fecreg_dk] [datetime] NOT NULL ,
[descrip_dk] [varchar] (100) NULL ,
[ingresa_dk] [numeric](14, 3) NULL ,
[sale_dk] [numeric](14, 3) NULL ,
) ON [PRIMARY]

key_dk : Clave primaria de la tabla DetalleKardex
key_kar : Código de la tabla Kardex
key_dt : Código de la tabla DetalleTransaccion
fecreg_dk : Fecha de creación del registro ( automáticamente con Getdate() )
descrip_dk : Descripción del movimiento en el kardex
ingresa_dk : que cantidad ingresa al kardex
sale_dk : que cantidad sale del kardex.
Ahora solo falta complementar ideas……

¿Por qué diseñe mis tablas de esta forma?
R: Porque diseñe un Procedimiento Almacenado que se ejecuta desde los Triggers (Insert, Delete y Update) de la tabla DetalleTransaccion. Es decir cada vez que realizas compras, ventas o algun movimiento de mercadería.

¿Qué ventajas te ofrece esta forma de trabajo?
R: Cero programación en PowerBuilder, solo programas en la capa del servidor. En PB solo programas la interfaz de usuario.

¿Qué función cumple el Procedimiento Almacenado?
R: Básicamente el procediendo almacenado, identifica que tipo de transacción se realiza (ingreso o salida) e Inserta un registro en la Tabla de DetalleKardex.

Si te sirve de algo te pongo el dichoso SP:
CREATE Procedure sp_ActualizaKardex @key_art numeric(10) , @key_dt numeric(18) , @cantidad numeric(14,3) , @tipo_mov char(1) AS
--Actualizando el Kardex del articulo
Declare @key_kar numeric(10) --codigo del Kardex
Declare @key_tra numeric(12) -- codigo de Transaccion
Declare @nombre_td varchar(30) -- nombre del documento (factura, boleta, guia)
Declare @serie_tra numeric(6) -- serie del documento
Declare @numero_tra numeric(10) --numero del documento
Declare @tipo_tra char(1) -- tipo de transacción
Declare @descrip varchar(100) -- descripción del movimiento de kardex

/*El tipo_tra es un campo de la tabla Transaccion, que identifica de que tabla proviene; es llamado elemento discriminador y por ejemplo cuando la transacción es una Venta se estable en ‘V’, cuando es Compra ‘C’, etc. */

Select @key_kar = key_kar From Kardex Where key_art = @key_art and activo_kar = 'S'

Select @nombre_td = nombre_td , @serie_tra = serie_tra , @numero_tra = numero_tra , @tipo_tra = tipo_tra , @key_tra = dt.key_tra
From DetTrans dt
Inner Join Transaccion t on t.key_tra = dt.key_tra
Left Outer Join TipoDoc td on td.key_td = t.key_td
Where key_dt = @key_dt

If @tipo_tra = 'V'
Select @descrip = 'SALIDA - VENTA --> TICKET ' + Cast ( key_tic as varchar(5) ) + ' - ' + Cast ( numero_tic as varchar(10) )
From Venta Where key_ven = @key_tra
Else If @tipo_tra = 'D'
Select @descrip = 'INGRESO - DEVOLUCION --> NOTA ABONO ' + Cast ( numabono_di as varchar(10) )
From DevIng Where key_di = @key_tra
Else
Select @descrip = Case @tipo_tra
when 'C' Then 'INGRESO - COMPRA'
when 'T' Then 'INGRESO - TRANSFERENCIA'
when 'S' Then 'SALIDA - TRANSFERENCIA'
when 'R' Then 'SALIDA - DEVOLUCION'
end
+ ' --> ' + @nombre_td + ' ' + Cast ( @serie_tra as Varchar(6) ) + ' - ' + Cast ( @numero_tra as varchar(10) )

If @tipo_mov = 'I'
Insert DetalleKardex ( key_kar , key_dt , key_ra , descrip_dk , ingresa_dk , key_pack) Values ( @key_kar , @key_dt , @key_ra , @descrip , @cantidad , @key_pack )
Else
Insert DetalleKardex ( key_kar , key_dt , key_ra , descrip_dk , sale_dk , key_pack ) Values ( @key_kar , @key_dt , @key_ra , @descrip , @cantidad , @key_pack )

If @@error = 0
COMMIT TRANSACTION
Else
ROLLBACK TRANSACTION
Go

Bien ahora espero tus preguntas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda n Sistema

Publicado por Jery (30 intervenciones) el 21/09/2005 01:24:27
Miles de gracias por el tiempo amigo Carlos Gil, te pasastes brother cualquier duda que tenga sobre esto te digo.. voy a implementar lo que me aconsejas y gracias otra vez...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar