ot: AYUDA SOBRE COMO HACER ESTE DISEñO ?

13/12/2004 - 23:28 por Luis Nivar | Informe spam
Hola amigos,

Estoy disenando una nueva aplicacion de gestion y contabilidad para sql
server y tengo una gran confusion en lo siguiente:
El sistema manejara varios modulos auxiliares de la contabilidad
(inventario, cuentas por cobrar, cuentas por pagar, bancos, etc.) y esta el
modulo de Mayor general que se alimenta en linea desde cada modulo.. En cada
modulo se generan o digitan diferentes tipos de transacciones o documentos.
El problema es que por requerimiento del cliente nos piden que cada
transaccion de cada modulo auxiliar genere o pida las cuentas contables para
fines de postearse en linea al mayor general con su numero original de modo
que en cualquier momento se puedan consultar desde el modulo mayor general
todos los movimientos detallados con sus documentos origen (su numero) no
importa el modulo. Por ejemplo si se registra un debito en el modulo
auxiliar de CXC se generen los asientos contables en el mayor general
detallados, no en resumen como uno suele hacerlo.
El problema que veo es que como uno normalmente tiene tablas separadas para
cada tipo de transaccion, ejemplo: una para cheques, otra para depositos,
otra para facturas de compra, otra para facturas de venta, otra para recibos
de ingreso, otra para conduces de inventario, etc...etc.. la tabla de
asientos contables deberia entonces relacionarse a todas esas tablas y a la
vez no relacionarse a ninguna lo cual como que no me cuadra mucho con un
diseño de BD por aquello de la integridad referencial. Incluso cuando en el
mayor general se consulten los movimientos de una cuenta tendria que accesar
varias tablas header para ver la informacion especial de cada documento.

He estado pensando algunas cosas como: a) tener una sola tabla encabezado
con todos los datos que usan todos los tipos de documentos (que pueden ser
muy disimiles entre si) y entonces tener la tabla general de asientos
contables relacionada a esta tabla. Esto haria crecer mucho en columnas sin
uso la tabla encabezado pues para cada tipo de doc. solo se llenaran las
columnas que utilice ese tipo.

b) Otra alternativa seria crear una tabla de asientos nueva para cada tipo
de transaccion de cada modulo y tener un par encabezado-detalle contable
para cada tipo de documento, sin embargo implicaria que para cuando en
contabilidad vayan a consultar los movimientos de una cuenta o listar las
transacciones entre fechas, tendria que hacer una UNION de todas estas
tablitas, locual pienso podria ser muy lento, o no serlo, realmente no se.
Pense tambien en vistas pero como no estoy muy claro.


Me podrian dar una opinion o recomendacion respecto a este diseño ? o si han
visto alguno similar por alli referirme para ver como es una forma mas o
menos aceptable de manejarlo y que no degrade significativamente el
performance.


Muchas Gracias por la ayuda

Luis Nivar
CYC sistemas
Puerto Plata
Rep. Dom.

Preguntas similare

Leer las respuestas

#1 Javier Loria
14/12/2004 - 00:28 | Informe spam
Hola:
Es mi opinion, que aun cuando un Cheque/Deposito genera un asiento, no
son lo mismo. O sea desde el punto de vista de diseno relacional esta bien
mantener una entidad independiente para cada uno de los documentos de los
diferentes modulos y luego mantener por separado la tabla de Asientos.
Dicho de otra forma este es un caso donde esta bien NO EVITAR LA
REDUNDANCIA que produce mantener la informacion en 2 tablas. Si los
documentos (Cheques, Depositos, Facturas, Recibos, etc.) producen
movimientos contables estos documentos son "independientes".
Es por supuesto un problema coordinar las transacciones para evitar que
quede algun documento sin contabilizar o mal contabilizado, pero esto es
codigo que se puede manejar "facilmente" en procedimientos almacenados de
mantenimiento o incluso en triggers.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Luis Nivar" wrote in message
news:#
Mostrar la cita
el
Mostrar la cita
cada
Mostrar la cita
documentos.
Mostrar la cita
para
Mostrar la cita
modo
Mostrar la cita
para
Mostrar la cita
recibos
Mostrar la cita
la
Mostrar la cita
el
Mostrar la cita
accesar
Mostrar la cita
sin
Mostrar la cita
han
Mostrar la cita
#2 Luis Nivar
14/12/2004 - 02:18 | Informe spam
Hola y gracias por la respuesta.

A ver si entendi bien: Te refieres a la opcion de tener los headers de los
documentos en tablas separadas y una tabla unica para los asientos ? o tener
tanto una tabla de asientos para c/documento y una general (redundante) de
asientos ?


Saludos


"Javier Loria" wrote in message
news:
Mostrar la cita
que
Mostrar la cita
general
Mostrar la cita
no
Mostrar la cita
depositos,
Mostrar la cita
a
Mostrar la cita
encabezado
Mostrar la cita
ser
Mostrar la cita
tipo
Mostrar la cita
las
Mostrar la cita
se.
Mostrar la cita
#3 Javier Loria
14/12/2004 - 14:12 | Informe spam
Hola:
Tal vez es es mas claro si escribo el SQL, pero me gustaria enfatizar
que este diseno no es mas una opinion:
=CREATE TABLE AsientosContables(
CodigoAsiento CHAR(8) NOT NULL
PRIMARY KEY
, FechaAsiento SMALLDATETIME NOT NULL
, FechaRegistro SMALLDATETIME NOT NULL
Otras Columnas
)

CREATE TABLE DetalleAsientosContables(
CodigoAsiento CHAR(8) NOT NULL
FOREIGN KEY REFERENCES AsientosContables(CodigoAsiento)
, NumeroMovimiento INT NOT NULL
, CodigoCuentaContable CHAR(10) NOT NULL
FOREIGN KEY REFERENCES CatalogoContable(CodigoCuentaContable)
, TipoDocumento INT
NOT NULL
CHECK(TipoDocumento IN (1,2,3,4,5))
, NumeroDocumento VARCHAR(15) NOT NULL -- Puede ser nulo?
, MontoMovimiento DECIMAL(15,2) NOT NULL
, CONSTRAINT PKDetalleAsientosContables
PRIMARY KEY (CodigoAsiento, NumeroMovimiento)
)

CREATE TABLE Facturas( -- O cualquier otro Documento
NumeroFactura CHAR(8) NOT NULL
CHECK(NumeroFactura LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
PRIMARY KEY
, FechaFacturacion SMALLDATETIME NOT NULL
, MontoFacturado DECIMAL(15,2) NOT NULL -- Puede ser Nulol?
, AsientoContable CHAR(8) NOT NULL
FOREIGN KEY REFERENCES AsientosContables(CodigoAsiento)
)
== Asientos Contables y Detalle de Asientos no tienen relacion con las
Tablas de Documentos (no por SQL), unicamente tienen una referencia del
origen del asiento en TipoDocumento, NumeroDocumento. En este caso asumi que
en un solo asiento pueden contabilizarse multiples documentos por eso el
estas columnas estan en el detalle del asiento. Si decides hacer un asiento
por cada documento entonces deben ir las columnas en la tabla de asientos
contables.
Por otra parte la tabla de documentos (en este caso facturas) SI tiene
relacion con Asientos Contables, en este caso la defini "floja", en el
sentido que no hace referencia exacta al movimiento donde fue registrada.
Si quieres hacerla "fuerte" me parece deberias hacer una tabla para cada
documento que detalle la forma en que fue contabilizado. Esta tabla NO puede
ser Detalle de Asientos, ya que lo Asientos NO deben "conocer" de los
documentos, los documentos si deben conocer de los asientos.
Espero haberme explicado y que espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Luis Nivar" wrote in message
news:
Mostrar la cita
tener
Mostrar la cita
no
Mostrar la cita
bien
Mostrar la cita
los
Mostrar la cita
de
Mostrar la cita
sql
Mostrar la cita
esta
Mostrar la cita
En
Mostrar la cita
contables
Mostrar la cita
y
Mostrar la cita
un
Mostrar la cita
en
Mostrar la cita
documento.
Mostrar la cita
columnas
Mostrar la cita
las
Mostrar la cita
contable
Mostrar la cita
si
Mostrar la cita
o
Mostrar la cita
#4 Luis Nivar
14/12/2004 - 15:33 | Informe spam
Muchas gracias Javier por tu valiosa ayuda.


"Javier Loria" wrote in message
news:%
Mostrar la cita
que
Mostrar la cita
asiento
Mostrar la cita
cada
Mostrar la cita
puede
Mostrar la cita
los
Mostrar la cita
de
Mostrar la cita
asiento,
Mostrar la cita
evitar
Mostrar la cita
es
Mostrar la cita
de
Mostrar la cita
numero)
Mostrar la cita
modulo
Mostrar la cita
general
Mostrar la cita
separadas
Mostrar la cita
de
Mostrar la cita
tablas
Mostrar la cita
con
Mostrar la cita
cuando
Mostrar la cita
pueden
Mostrar la cita
asientos
Mostrar la cita
cada
Mostrar la cita
en
Mostrar la cita
listar
Mostrar la cita
estas
Mostrar la cita
no
Mostrar la cita
o
Mostrar la cita
mas
Mostrar la cita
#5 Pedro Jose Caceres
15/12/2004 - 13:33 | Informe spam
Hola.

A mi tambien me interesa ese tema. Una pregunta ya a nivel educativo: Cual
serian los pros y contras de tener para cada entidad de tipo de documento un
para de tablas encabezado y detalle(esta para las cuentas contables). Ej.
facturaE y facturaD, chequeE y chequeD, reciboE y reciboD, y asi por el
estilo ?

Mi opinion es que si es para fines contables cuando se quieran consultar los
movimientos de una cuenta podria recorrerse cada tabla de detalles buscando
la cuenta o haciendo una UNION ALL. O es que esto seria muy lento ? Favor
aclararme, no es contradiciendo tu opinion es solo para aprender un poco mas
al respecto.

Gracias
Pedro Jose Caceres





"Javier Loria" wrote in message
news:%
Mostrar la cita
que
Mostrar la cita
asiento
Mostrar la cita
cada
Mostrar la cita
puede
Mostrar la cita
los
Mostrar la cita
de
Mostrar la cita
asiento,
Mostrar la cita
evitar
Mostrar la cita
es
Mostrar la cita
de
Mostrar la cita
numero)
Mostrar la cita
modulo
Mostrar la cita
general
Mostrar la cita
separadas
Mostrar la cita
de
Mostrar la cita
tablas
Mostrar la cita
con
Mostrar la cita
cuando
Mostrar la cita
pueden
Mostrar la cita
asientos
Mostrar la cita
cada
Mostrar la cita
en
Mostrar la cita
listar
Mostrar la cita
estas
Mostrar la cita
no
Mostrar la cita
o
Mostrar la cita
mas
Mostrar la cita
Ads by Google
Search Busqueda sugerida