Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

SALDO = DEBE - HABER

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: SALDO = DEBE - HABER Responder citando

Hola amigos:

Se que esto ya se ha contestado, pero las soluciones que hay no me sirven o no he sabido utilizarlas.

Mi problema es el siguiente estoy haciendo un programa paralelo al que tenemos de gestión en la empresa.
Para evitar tener que estar cambiando de un programa a otro, necesito sacar el extracto de TESORERIA de un cliente.

Para ello utilizo la consulta:

Código:

SELECT
   FECHA,
   DESCRIPCION,
   NUMERODOCUMENTO,
   DEBE,
   HABER ,
   DEBE-HABER AS saldo
FROM DIARIOAPUNTES
WHERE (CUENTA=:Cuenta)
ORDER BY FECHA;


Esto me calcula la diferencia entre DEBE y HABER de un registro, pero lo que yo quiero es que que calcule el SALDO acumulado.
He utilizado la funcion SUM, poniendo:

Código:

SELECT
   FECHA,
   DESCRIPCION,
   NUMERODOCUMENTO,
   DEBE,
   HABER ,
   SUM(DEBE) AS DEBE1,
   SUM(HABER) AS HABER1,
   (SUM(DEBE1)-SUM(HABER1)) AS SALDO
FROM DIARIOAPUNTES
WHERE (CUENTA=:Cuenta)
ORDER BY FECHA;


pero me da error.


Dynamic SQL Error
-SQL error code = -104
-invalid column reference


Como puedo solucionarlo?

Muchas gracias
_________________
La pintura es la expresión de la mente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Prueba con esto
Código:

SELECT
   FECHA,
   DESCRIPCION,
   NUMERODOCUMENTO,
   DEBE,
   HABER ,
   (SUM(DEBE)-SUM(HABER)) AS SALDO
FROM DIARIOAPUNTES
WHERE (CUENTA=:Cuenta)
ORDER BY FECHA;

_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Eso tambien lo probe y sigue saliendo el mismo error.

Si escribo

[CODE]
SELECT
SUM(DEBE)-SUM(HABER) AS SALDO
FROM DIARIO APUNTES
[/CODE*]

No da error, pero lo único que saca es un registro con el saldo final.

SALDO
============

125,45

Y esto no es lo que necesito.

Lo que necesito es:

DEBE HABER SALDO
===================
10 0 10
15 0 25
0 20 5
1 0 6
_________________
La pintura es la expresión de la mente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Puedes intertarlo con la clausula group by. No sé; es por darte una pista, ya que no acabo de entender muy bien lo que quieres hacer.
Sum(campo) acumula todo lo que hay en el campo y si quieres obtener un saldo pues es lo adecuado. Si no quieres un saldo total, tendrás que agruparlo por algun otro campo, de ahí mi sugerencia.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

GROUP BY no me soluciona el problema, ya que lo que haría sería agrupar por un campo, pero no me resuelve que por cada línea, SALDO calcule el valor de la diferencia entre DEBE y HABER y la suma del valor anterior de SALDO.

Es decir
Código:

SALDO[N] = SALDO[N-1]+DEBE[N]-HABER[N-1]

No se si lo habré liado mas o he aclarado el problema.

Un saludo
_________________
La pintura es la expresión de la mente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Perdon

Código:
SALDO[N] = SALDO[N-1]+DEBE[N]-HABER[N]
 


_________________
La pintura es la expresión de la mente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

LIGERO escribió:
Perdon

Código:
SALDO[N] = SALDO[N-1]+DEBE[N]-HABER[N]
 



Huy. Eso yo no sé hacerlo con sql. Cuando tengo que hacer cosas así, lo hago mediante código. O sea, leo todos los registros y luego voy uno por uno en un while haciendo las operaciones pertinentes.
Es más, si consigues hacerlo, ponlo en este post por favor. Así aprenderé yo también.
Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cita:

Mi problema es el siguiente estoy haciendo un programa paralelo al que tenemos de gestión en la empresa.
Para evitar tener que estar cambiando de un programa a otro, necesito sacar el extracto de TESORERIA de un cliente.

Para ello utilizo la consulta:

Código:

Código:

SELECT
   FECHA,
   DESCRIPCION,
   NUMERODOCUMENTO,
   DEBE,
   HABER ,
   DEBE-HABER AS saldo
FROM DIARIOAPUNTES
WHERE (CUENTA=:Cuenta)
ORDER BY FECHA;


Esto me calcula la diferencia entre DEBE y HABER de un registro, pero lo que yo quiero es que que calcule el SALDO acumulado.
He utilizado la funcion SUM, poniendo:

Código:


SELECT
   FECHA,
   DESCRIPCION,
   NUMERODOCUMENTO,
   DEBE,
   HABER ,
   SUM(DEBE) AS DEBE1,
   SUM(HABER) AS HABER1,
   (SUM(DEBE1)-SUM(HABER1)) AS SALDO
FROM DIARIOAPUNTES
WHERE (CUENTA=:Cuenta)
ORDER BY FECHA;


ero me da error.


Dynamic SQL Error
-SQL error code = -104
-invalid column reference


Como puedo solucionarlo?

Muchas gracias


Bien, según lo que planteas no necesitas obtener el saldo por registro y utilizas SUM para obtener el saldo acumulado de varios registros. La pregunta es: ¿de que registros?.... es decir, ¿cual es el criterio que utilizas para obtener el listado que necesitas?

Cita:

Lo que necesito es:

DEBE HABER SALDO
===================
10 0 10
15 0 25
0 20 5
1 0 6


Si dices que por registro no te interesa, entonces este listado que muestras (que se supone es un saldo acumulado) es ¿por fecha, por cliente, por mes?.

Según mi apreciación necesitas utlizar la claúsula GROUP BY como te lo recomendo laremi400.

Código:

SELECT
   FECHA,
   SUM(DEBE) AS DEBE1,
   SUM(HABER) AS HABER1,
   (SUM(DEBE)-SUM(HABER)) AS SALDO
FROM DIARIOAPUNTES
WHERE (CUENTA=:Cuenta)
GROUP BY FECHA;


El resultado de esta consulta es la suma del DEBE, la suma del HABER y la diferencia de la suma del DEBE menos la suma del HABER, agrupado por la fecha, es decir, tendrias el saldo acumaldo por dia.

Si no es lo que necesitas explica a mayor detalle tu problema (sobre todo el listado que pretendes obtener).

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Por partes, en primer lugar el error que te dá el Select quizás lo habras deducido por las respuestas: mezclas en un select campos de agrupación como Sum() sin la clausula group by
Por otro lado, te aconsejo que el saldo lo calcules por código como te comenta laremi400, es decir, las consulta la realizaría:

Código:

SELECT
   FECHA,
   DESCRIPCION,
   NUMERODOCUMENTO,
   DEBE,
   HABER
FROM DIARIOAPUNTES
WHERE (CUENTA=:Cuenta)
ORDER BY FECHA;

y rellenaría un stringgrid calculando la columna del saldo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No puedo agrupar por fechas, ya que pueden haber varios movimientos en una misma fecha y necesito verlos.
Al no poder modificar la estructura de la base de datos, tampoco puedo poner un campo autocalculado y agrupar por el.

Además, el código que habeis puesto sólo muestra la diferencia entre DEBE y HABER, agrupada por fechas, pero eso no es el saldo de una cuenta contable.

El saldo de una cuenta contable tiene en cuenta el saldo anterior y le suma o resta la cantidad del DEBE o del HABER respectivamente

Intentaré hacer los cálculos después de repintar la consulta en el DBGrid.

Muchas gracias de todos modos.
Si algún día consigo la CLAUSULA SELECT que realice esta operación, la pondré en el foro.

Un saludo
_________________
La pintura es la expresión de la mente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Definitavemente tendras que optar por buscar otra forma de realizar tu cálculo, y entiendo lo del saldo de la cuenta contable. Mucho depende de la forma en como se haya diseñado la Base de Datos.

Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.