Access - Crear consulta saldo acumulado

 
Vista:
sin imagen de perfil

Crear consulta saldo acumulado

Publicado por Nahuel (4 intervenciones) el 27/06/2015 22:23:36
Hola a la comundiad.. Estoy creando una base de cuenta corriente en access 2007 y no me sale.. Soy novato con el tema de la programacion (diria principiante).. Por favor necesito su ayuda..

Esto es lo que tengo hasta ahora:

Tabla Clientes: ID_CLIENTE (Autonumerico); NOMBRE; DIRECCION; TELEFONO; OBSERVACIONES

Tabla Cuentas: ID_CUENTA(Autonumerico,(nose si este campo sea necesario, pero lo puse));NOMBRE(Asistente para busquedas, relacionado con la tabla cliente);FECHA;CONCEPTO;DEBE;HABER.

Lo que quiero hacer es mediante una consulta calcular el [DEBE]-[HABER] y que me de un saldo acumulado, con el campo calculado llamado SALDO. Entonces repasando en limpio como quiero que quede la consulta seria:

NOMBRE FECHA CONCEPTO DEBE HABER SALDO
CLIENTE1 27/06/15 FIADO $ 30 $ 0 $ 30
CLIENTE2 27/06/15 PAGO $ 0 $15 $ 15

Donde el campo NOMBRE, seria el de la tabla cuentas (basicamente todo es de la tabla cuentas por lo que veo).

Asi quiero que quede la consulta.. Despues me gustaria discriminar el cliente, mediante un formulario, seleccionar el CLIENTE1 (por ejemplo) y visualizar su cuenta corriente.

Puse toda la informacion. Espero su ayuda, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Crear consulta saldo acumulado

Publicado por Enrique Heliodoro (1664 intervenciones) el 28/06/2015 09:17:54
Hay a mi parecer dos vías:

.- una de ellas consiste en presentar los datos mediante un informe como objeto del formulario (creo que la versión de A'2007 lo permite), en los informes se dispone de la 'suma continua' que hace ese calculo sin pestañear.

.- la otra es efectuando el calculo en una consulta, pero para ello se precisa un campo con valores únicos (que no tienen por que ser correlativos, basta con que sean ascendentes)

En los datos de muestra la fecha (que podría ser un dato valido además de necesario para ordenar los datos) no cumple las características, le asignaría a las dos entradas el acumulado del dia (el mismo valor a ambas).

Aun asi el esquema seria este:
Saldo: DSum("entradas - salidas","tabla/consulta con los datos","Fecha <=" & [fecha] )

En esta expresión, Access interpretara a 'Fecha' como el campo del dominio y a [fecha] como la fecha del registro que se este procesando.

Nota: Esta expresión (que es totalmente funcional) tiene el inconveniente que tienen todas las funciones de dominio de las que se hace un uso reiterativo: enlentecen el conjunto de forma proporcional al volumen de datos a tratar (una ejecución por cada registro procesado)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear consulta saldo acumulado

Publicado por Nahuel (4 intervenciones) el 29/06/2015 00:58:24
Primero que nada. Gracias por tomarte tu tiempo por responder.

Copie el codigo que mencionaste

Saldo: DSum("entradas - salidas","tabla/consulta con los datos","Fecha <=" & [fecha] )

Reemplaze: Debe x entradas y Haber x salidas. Me genero error. Lo que hice despues fue hacer lo mismo pero tambien cambie el nombre de la tabla x cuentas y consulta x c de consulta quedando de esta manera:

SALDO: DSuma("DEBE - HABER","CUENTAS/C DE CUENTAS con los datos","FECHA <=" & [fecha])

Y me sigue sin funcionar. Este es el mensaje de error que me aparece:

El motor de la base datos no puede encontrar la tabla o consulta 'CUENTAS/C DE CUENTAS con los datos' asegúrese que existe y que su nombre esta escrito correctamente.

Como dije anteriormente soy principiante e intente entender la repuesta pero al parecer no lo he logrado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear consulta saldo acumulado

Publicado por Enrique Heliodoro (1664 intervenciones) el 29/06/2015 09:03:39
Access tiene (como todos los programas) su peculiaridades y además los principios básicos de todo entorno de programación.

En cualquier entorno de programación se recomienda (muchas veces encarecidamente) que no se utilicen libremente las 'palabras reservadas' y suele haber una lista (en esa oculta parte que suele esconder bajo el epígrafe 'ayuda').

Las palabras reservadas no es que tengan nada en especial, solo que las utiliza internamente el programa y pueden dar lugar a errores de interpretación (indecisión sobre quien la usa en esas circunstancias, el usuario o el sistema)

Fecha es una de ellas, te recomendaría que si te es posible la cambiases ligeramente (XFecha, UnaFecha, LaFecha, ....) eso en el presente y futuro te será de gran utilidad.

Queda la parte de las peculiaridades Access, una de ellas es la definición de nombres de los objetos .... en la medida de lo posible se deberían evitar caracteres 'no normalizados' y los espacios entre caracteres, cuando 'no queda otro remedio' (porque modificar un nombre para hacer las cosas de forma correcta implicaría volver al punto cero inicial) se le debe de indicar con corchetes 'que todo lo que va dentro es un solo conjunto'.

Soy consciente de que trabajar con sinónimos o alias es complicado cuando se comienza, pero hacer las cosas bien desde el inicio tiene la ventaja de que siempre se tendrá el control sobre 'con quien se habla, con el usuario o con la maquina' (y en estos casos, 'el que habla' es el programador).

Al motor de Access (por lo mencionado antes) esto:
CUENTAS/C DE CUENTAS con los datos

No lo interpretara bien, le gustaria mas asi (sin espacios: forma un conjunto natural):
CUENTAS/C_DE_CUENTAS_con_los_datos

Y si se llamase Resultado1 también le valdría (mas corto, especifico y manejable en sintaxis erráticas), pero como hay que reutilizar lo que hay, apliquemos el parche que esta a disposición (los corchetes)

Antes:
CUENTAS/C DE CUENTAS con los datos

Lo adecuado:
[CUENTAS/C DE CUENTAS con los datos]

Cuando Access programa algo (por ejemplo las SQL de las consultas) utiliza por defecto los corchetes para intentar adaptarse a cualquier tipo de usuario y sus peculiaridades, en un alto porcentaje de los casos son caracteres que sobran (si se aplica las regla de saber 'con quien se esta hablando', pues en la mayor parte de los casos al usuario los contextos se le dan con etiquetas o contenido de los campos y estos ... son de libre interpretación)

Nota: Access es un poco marciano con los campos de fecha (las fechas en general) dado que estas se presentan en el formato regional de Windows y ello las convierte en texto a interpretar, si aparece algún problema con ella, especifícalo para tratarlo adecuadamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear consulta saldo acumulado

Publicado por Nahuel (4 intervenciones) el 30/06/2015 03:32:58
Lo que me quedo de esta respuesta.. Es que access maneja mejor sin espacios y con palabras que no sean iguales a la del mismo programa.. Siempre es bueno aprender y estoy agradecido por eso.. Lo que hice entonces fue:

Eliminar la consulta C DE CUENTAS (No hubo incoveniente ya que no presentaba un mayor problema en cuanto a empezar de nuevo), Cambie el campo fecha x data (sinonimo) en la tabla de CUENTAS y a la consulta nueva la llame BALANCE

Pasando el limpio el codigo que aplique en el nuevo campo llamado saldo fue:

DSum("DEBE - HABER","[CUENTAS/BALANCE con los datos]","Fecha <=" & [DATA] )

Bien hasta ahi esta todo lo mencionado arriba en tu respuesta el problema es que me sigue apareciendo el mismo error de mi primer respuesta.

Nota: No me queda claro que es o para que sirve [con los datos] por eso aplique el mismo codigo pero de esta manera

[/_con_los_datos]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear consulta saldo acumulado

Publicado por Enrique Heliodoro (1664 intervenciones) el 30/06/2015 09:39:46
Aun con una sintaxis correcta, la expresión es incorrecta en su conjunto.

Para comenzar aclarar la duda con la parte condicional:

Suponiendo una tabla con registros y los campos 'Debe, Haber, Fecha .... ', por lo expuesto la tabla que cumple esas características es 'Cuentas' (aunque lo habitual suele ser 'DIARIO'), a mayores disponemos de un campo autonumerico que nos permitiría un resultado fiel si su orden tiene una relación directa con el de fecha.

Si no ponemos condiciones de fechas, esto es: trabajamos con todos los datos, podríamos crear una consulta en la que (auxiliados por las relaciones) podemos poner los campos que necesitemos de todas las tablas y entre ellos el de 'debe y haber' de la tabla CUENTAS.

El calculo del saldo se ha de hacer tomando como referente 'el origen de los datos' no la consulta actual que mientras esta en tiempo de construcción 'aun no existe' y en el peor de los casos caemos en lo que se conoce como 'una referencia circular' o bucle indefinido (del tipo de: ¿Quién fue antes, la gallina o el huevo?)

Asi pues el calculo del saldo seria asi:
Saldo: DSum ("Debe - Haber", "Cuentas","[nombre del campo fecha de la tabla cuentas] <= " & [nombre del campo fecha en la consulta actual])

Cuando se ejecute la consulta, Access buscara entre los datos que esta procesando a este: [nombre del campo fecha en la consulta actual], si no lo encuentra preguntara por el (como si fuese un parámetro), pero al encontrarlo (porque se supone que esta, es parte de los datos a mostrar) lo que encontrara será un valor (digamos que esta en el tercer registro y la fecha en el es: 5/5/2015)

Para Access la función quedaría algo asi:
DSum ("Debe - Haber", "Cuentas","[nombre del campo fecha de la tabla cuentas] <= #5/5/2015#)

esto es: procesaría y devolvería la diferencia entre el debe y haber de todos los registros iguales o anteriores a la fecha 5/5/2015

Cuando procesase el cuarto mas de lo mismo (pero con la fecha del cuarto registro) y así hasta finalizar con todos (el uno y el dos, también entran en el lote).

Para poder hacerlo con un origen tal como: [CUENTAS/BALANCE con los datos], este debería existir de forma previa (por ejemplo una consulta de selección que acotase las fechas de inicio y final), asi solo procesaría los registros implicados y no todos los de la tabla 'cuentas' que pueden ser el resultado de veinte años de seguimiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear consulta saldo acumulado

Publicado por Nahuel (4 intervenciones) el 01/07/2015 01:20:26
Me costo bastante entender pero para ver si me queda claro:

Primer parrafo:

He cambiado el nombre de la tabla CUENTAS x la de DIARIO, porque quiero hacerlo bien y que mi base este clara.

-''a mayores disponemos de un campo autonumerico que nos permitiría un resultado fiel si su orden tiene una relación directa con el de fecha''

Esta parte no es muy clara para mi, TABLA:DIARIO Y EL TIPO DE DATOS SERIA:

ORDEN (Autonumerico, llave principal, por defecto) (Lo cambie a este nombre tenia otro).
NOMBRE: (Asitente para busquedas).
DATA: (Fecha/Hora-Fecha corta).
CONCEPTO: Texto.
DEBE: Numero.
HABER: Numero.

-''Si no ponemos condiciones de fechas, esto es: trabajamos con todos los datos, podríamos crear una consulta en la que (auxiliados por las relaciones) podemos poner los campos que necesitemos de todas las tablas y entre ellos el de 'debe y haber' de la tabla CUENTAS''

En mi Base de datos tengo unicamente dos TABLAS:

CLIENTES y DIARIO (Con los campos arriba mencionados)

De la tabla CLIENTES la unica relacion con la tabla DIARIO es el campo NOMBRE

En la tabla CLIENTES el tipo de Datos es texto y en la tabla DIARIO es un asistente de busquedas para esta tabla repasando en limpio para que la ayuda sea sobre mi base seria:

TABLA CLIENTES:
ID_CLIENTE (Autonumerico)
NOMBRE (Texto)
DIRECCION (Texto)
TELEFONO (Texto)
OBSERVACIONES (Texto)

Entonces estas dos tablas con los campos mencionados son toda mi base de datos.

-'El calculo del saldo se ha de hacer tomando como referente 'el origen de los datos' no la consulta actual''

-''Asi pues el calculo del saldo seria asi:
Saldo: DSum ("Debe - Haber", "Cuentas","[nombre del campo fecha de la tabla cuentas] <= " & [nombre del campo fecha en la consulta actual])''

Entonces el codigo que escribi fue:

SALDO: DSuma("DEBE - HABER","DIARIO","[DATA] <= " & [DATA])

[Nombre del campo fecha en la tabla cuentas]= [DATA]
[Nombre del campo fecha en la consulta actual]= [DATA]

Lo que nose si esta bien ahi es repetir data, a mi poco entender esta bien, porque en la consulta se selecciona los campos de las tablas, entonces lo unico que hice fue seleccionar.

Ya no me genera error en el campo saldo de la nueva consulta (solo me genera al no seleccionar la fecha en el campo DATA), pero sigue sin aparecer el resultado, en la consulta no lo muestra, solo queda en blanco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar