Registro contable cuadrado

09/05/2008 - 14:04 por Guillermo Rojas | Informe spam
Dos tablas de un sistema de contabilidad para registros contables:

regConth (registro contable encabezado)
-
regno int -- pk identity
fecha date
...

regContd (registro contable detalle)

regno int
ctano char(10) --cuenta contable
debito decimal
credito decimal
...

Tengo que hacer que cada registro (regno) este cuadrado: que la suma de los
debitos sea igual a la suma de los creditos. Si no esta no debe aceptarlo.
No veo como poner esta restriccion en SQL Server, si un trigger o check, etc
y en cual de las dos tablas o si tengo que validarlo desde la aplicacion.
Que me podrian decir para orientarme?

Preguntas similare

Leer las respuestas

#6 Gux (MVP)
09/05/2008 - 16:58 | Informe spam
En ese caso, la cosa se pone ya más difícil.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alfredo Novoa" wrote:


Hola Gux,

On Fri, 9 May 2008 07:38:02 -0700, Gux (MVP)
wrote:

>Parece ser una tarea típica para un trigger de la tabla de detalles.

Pero mientras vas metiendo los registros detalle el registro contable
puede estar descuadrado.

Solo tiene que estar cuadrado cuando está finalizado.


Saludos
Alfredo

Respuesta Responder a este mensaje
#7 Guillermo Rojas
09/05/2008 - 17:55 | Informe spam
Entiendo y seguramente luego impedir modificaciones con un trigger a los
detalles si el header ya esta finalizado. Digo esto pensando en si alguien
luego trata de seguir agregando o modificando los detalles libremente, ya
que si lo hacen. la base de datos no lo detectaría.

"Alfredo Novoa" escribió en el mensaje
news:
On Fri, 9 May 2008 08:04:06 -0400, "Guillermo Rojas" <grr> wrote:

Dos tablas de un sistema de contabilidad para registros contables:

regConth (registro contable encabezado)
-
regno int -- pk identity
fecha date
...

regContd (registro contable detalle)

regno int
ctano char(10) --cuenta contable
debito decimal
credito decimal
...

Tengo que hacer que cada registro (regno) este cuadrado: que la suma de
los
debitos sea igual a la suma de los creditos. Si no esta no debe aceptarlo.
No veo como poner esta restriccion en SQL Server, si un trigger o check,
etc
y en cual de las dos tablas o si tengo que validarlo desde la aplicacion.
Que me podrian decir para orientarme?



Podrías ponerle al encabezado un campo que indicase que el registro
está finalizado, y al poner el registro en estado finalizado haces que
se compruebe la restricción con un check.


Saludos
Alfredo
Respuesta Responder a este mensaje
#8 Alfredo Novoa
09/05/2008 - 19:16 | Informe spam
Hola Guillermo,

On Fri, 9 May 2008 11:55:26 -0400, "Guillermo Rojas" <grr> wrote:

Entiendo y seguramente luego impedir modificaciones con un trigger a los
detalles si el header ya esta finalizado.



Mejor un check que un trigger.

Digo esto pensando en si alguien
luego trata de seguir agregando o modificando los detalles libremente, ya
que si lo hacen. la base de datos no lo detectaría.



Pues si, y los contables no se van a poner muy contentos con el DBA si
pasa eso :-)


Saludos
Alfredo
Respuesta Responder a este mensaje
#9 Penta
14/05/2008 - 06:43 | Informe spam
Lo del check es una muy buena idea, pero deberas poner especial
atencion en los cambios que pueda tener el detalle, la primera vez que
este cerrado realizara el check, pero que pasaria si luego el sistema
borra algun registro ??, la aplicacion tendra que borrar dicho flag y
asi sucecivamente, no será mejor para ahorrarle "pega" a la BD? Bueno
puede ser poca pero como no tienes el controlo sobre la aplicacion,
dicha responsabilidad recaera sobre el DBA, que mejor que la
aplicación realice el chequeo solo cuando se indique que el detalle
está cerrado ??

Solo una idea,

Atte.
Penta.
Respuesta Responder a este mensaje
#10 Alfredo Novoa
14/05/2008 - 11:13 | Informe spam
On Tue, 13 May 2008 21:43:08 -0700 (PDT), Penta
wrote:

Lo del check es una muy buena idea, pero deberas poner especial
atencion en los cambios que pueda tener el detalle, la primera vez que
este cerrado realizara el check, pero que pasaria si luego el sistema
borra algun registro ??



Pues que el SGBD no te dejaría. Se supone que los registros cerrados
no se pueden modificar.

, la aplicacion tendra que borrar dicho flag y
asi sucecivamente



Si, habría que volver a abrir el apunte contable, con todas las
precauciones que eso requiera.

, no será mejor para ahorrarle "pega" a la BD? Bueno
puede ser poca pero como no tienes el controlo sobre la aplicacion,
dicha responsabilidad recaera sobre el DBA, que mejor que la
aplicación realice el chequeo solo cuando se indique que el detalle
está cerrado ??



No te entiendo muy bien. ¿Estás sugiriendo que el chequeo lo haga la
aplicación en lugar de el SGBD?

Eso va contra los principios más elementales de la gestión de bases de
datos.

De esa forma quedaría abierta la posibilidad de que las aplicaciones o
cualquiera que acceda a la base de datos puedan corromperla.


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