FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Libro diario y mayor
Hola amigos, les pido por favor me ayuden con este tema ya que no se como ni por donde empezar...
Necesito hacer un libro mayor parecido a esto... paso a "dibujar la pantalla" Seleciconar Cuenta: "compra de inmuebles" <-- elijo yo Fecha desde: 21/10/2010 <-- elijo yo Fecha hasta: 26/10/2010 <-- elijo yo Saldo inicial: ??? <-- lo calcula (no se como) nº asiento | cliente | debe | haber | saldo los valores de "debe y haber" los tengo, ahora el saldo se calcula solo, pero ¿como? lo mismo pasa con el saldo inicial ¿como? mis tablas principales son conta_asientos: id_asiento , fecha , total_debe , total_haber conta_asientos_deta: id_asiento , id_detalle , debe , haber Espero puedan ayudarme. muchas gracias. |
#2
|
||||
|
||||
Antes que nada, creo que en la tabla conta_asientos_deta te falta la cuenta. Sponiendo que la tienes en esta tabla:
Si solo trabajás con estas dos tablas te propongo una solución simple: Creá una tabla temporal con los campos que necesitas mostrar libro_mayor(n_asiento, cliente, debe, haber, saldo) Luego calculas el saldo inicial. Esto es lo que suma la columna debe y lo que suma la columna haber hasta la Fecha_Desde. Recorres el detalle hasta que llegas a la fecha_desde
Luego vas recorriendo las tablas e insertando los registros hasta la Fecha_Hasta y calculando el saldo:
Nota para todo esto, los datos tienen que estar ordenados por fecha! Además de esto, deberás hacer bucles anidados para tomar los datos de la cabecera del asiento y del detalle. La fecha está en la cabecera y si cumple con esta deberás tomar la cuenta del detalle. Si la cuenta es la que buscamos, utilizamos debe y haber para contar el saldo inicial o para rellenar el resto de registros. Última edición por duilioisola fecha: 25-01-2011 a las 01:01:06. |
#3
|
||||
|
||||
Otra opción es utilizar una vista o unir las tablas con JOINs y hacer los bucles directamente con ella. Pero esto depende del motor de base de datos que utilices.
En Firebird (o cualquier otro motor SQL):
Y finalmente (también dependiendo del motor de base de datos) es generar un procedimiento almacenado al cual le pasas los datos (fecha_desde, fecha_hasta y cuenta) y te devuelve los datos que necesitas ordenados y calculados. |
#4
|
|||
|
|||
Cita:
Muchas gracias por responder. |
#5
|
|||
|
|||
Cita:
Hasta el join voy bien, lo que no se es como ir calculando los saldos en base al saldo inicial, ya que supongo y como en tu primer ejemplo debo calcular primero este saldo inicial (hasta la fecha desde) y luego ir calculando los saldos para cada registro... eso se me hace bastante raro de hacer, te agradecería mucho si me ayudas un poco... ...y de nuevo muchas gracias por responder!!!... |
#6
|
||||
|
||||
El saldo a la fecha incial lo puedes calcular con un SUM
Esto te dará los saldos de debe y haber hasta la fecha y el saldo total, que será DEBE-HABER. Luego de eso, con un bucle puedes ir rellenando el resto.
No conozco MySQL, pero no creo que haya una forma de calcular el saldo acumulado con un select... quizás algún gurú de los SQL pueda ayudarte un poco más. De todos modos, puedes ir caclculándolo con Delphi a medida que vas recibiendo los datos, con un campo calculado. |
#7
|
||||
|
||||
Bueno, se puede, pero es complicado...
Primero calculas el saldo inicial con el SQL que te he enviado anteriormente. Luego ejecutas esto pasándole los parámetros (los que tienen ":" delante)
Ten en cuenta que es un select dentro de un select, por lo que según la cantidad de registros y los índices que tengas, puede tardar bastante. Deberás tener (creo que obligatoriamente) un índice en la cabecera (conta_asientos) por [fecha, asiento] y en el detalle conta_asientos_deta por [cuenta,asiento, linea] Última edición por duilioisola fecha: 25-01-2011 a las 09:53:32. |
#8
|
|||
|
|||
Fantástico!!!! es lo que buscaba, gracias.... lo voy a probar y te cuento como me va.. saludos!!
|
#9
|
|||
|
|||
Espero aún estes con el dilema. pero mira tu acomoda con tus tablas y ya esta.
declare @fecha1 datetime, @fecha2 datetime, @id_cuenta int, @saldo money set @fecha1 ='Parmetro fecha 1' set @fecha2 ='Parmetro fecha 2' set @id_cuenta ='Parmetro id de la cuenta contable' -- Calculo del Saldo. Select @saldo =SUM(debe)-sum(haber) From comprobante cb innerjoin comprobante_detalle cbd on cb.id_comprobante = cbd.id_comprobante where cb.fecha < @fecha1 -- Creo aqui tienes que agregar que este entre el como ejemplo 01/01/2010 hasta la @fecha1 solamente -- Osea el 01 de enero del ao o inicio contable. -- si tienes esto en alguna tabla de parmetros sera mejor Select @saldo, cb.nro_asiento, cb.fecha, cd.glosa, pc.codico +'-'+ pc.descripcion, cbd.debe, cbd.haber from comprobante cb innerjoin comprobante_detalle cbd on cb.id_comprobante = cbd.id_comprobante innerjoin plan_cuentas pc on pc.id_cuanta = cbd.id_cuenta where cb.fecha between @fecha1 and @fecha2 and pc.id_cuenta = @id_cuenta Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
El diario de un perro | Lord Delfos | La Taberna | 0 | 17-05-2010 06:54:36 |
Diario de una mujer madura | jcarteagaf | Humor | 6 | 30-07-2008 18:30:20 |
Diario de un cincuentón | egostar | Humor | 5 | 06-11-2007 05:34:43 |
Diario de un Cincuenton | FGarcia | Humor | 0 | 25-09-2007 19:32:54 |
Diario de un lammer | JaMFrY | Humor | 3 | 28-06-2003 14:21:10 |
|