 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
LIGERO Cmdr


Registrado: 13 May 2004Mensajes: 134Ubicación: Granada
|
Publicado: Lun 13 Feb, 2006 7:48 pm Asunto: SALDO = DEBE - HABER |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Lun 13 Feb, 2006 8:43 pm Asunto: |
|
|
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 |
|
 |
LIGERO Cmdr


Registrado: 13 May 2004Mensajes: 134Ubicación: Granada
|
Publicado: Mar 14 Feb, 2006 8:32 am Asunto: |
|
|
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 |
|
 |
laremi400 Master

Registrado: 12 May 2004Mensajes: 179
|
Publicado: Mar 14 Feb, 2006 11:58 am Asunto: |
|
|
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 |
|
 |
LIGERO Cmdr


Registrado: 13 May 2004Mensajes: 134Ubicación: Granada
|
Publicado: Mar 14 Feb, 2006 12:15 pm Asunto: |
|
|
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 |
|
 |
LIGERO Cmdr


Registrado: 13 May 2004Mensajes: 134Ubicación: Granada
|
Publicado: Mar 14 Feb, 2006 12:16 pm Asunto: |
|
|
Perdon
| Código: | SALDO[N] = SALDO[N-1]+DEBE[N]-HABER[N]
|
_________________ La pintura es la expresión de la mente. |
|
| Volver arriba |
|
 |
laremi400 Master

Registrado: 12 May 2004Mensajes: 179
|
Publicado: Mar 14 Feb, 2006 2:23 pm Asunto: |
|
|
| 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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mar 14 Feb, 2006 4:59 pm Asunto: |
|
|
| 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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mar 14 Feb, 2006 5:47 pm Asunto: |
|
|
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 |
|
 |
LIGERO Cmdr


Registrado: 13 May 2004Mensajes: 134Ubicación: Granada
|
Publicado: Mar 14 Feb, 2006 7:49 pm Asunto: |
|
|
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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mar 14 Feb, 2006 8:14 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|