Como calcular el acumulado en un informe de access

Tengo un informe que toma los datos de una tabla que tiene el formato siguiente:

TABLA BALANCE

IdMes

Ingresos

Acumulado Ingresos

En esta Tabla estoy guardando los resultados del Balance mes por mes

En el primer mes de la tabla el valor de Acumulado Ingresos es el mismo que el de Ingresos, pero en el mes siguiente, el Acumulado Ingresos es el valor Acumulado Ingresos del mes anterior + Ingresos del mes en curso. No necesariamente tengo que guardar estos acumulados en la TABLA BALANCE aunque me gustaría, pero debo reflejarlos en el Informe.

3 respuestas

Respuesta

Puedes crear una consulta basada en tu tabla usando una subconsulta:

SELECT 
    T1. IdMes, 
    T1. Ingresos, 
    (SELECT SUM(T2. Ingresos) 
     FROM [TABLA BALANCE] AS T2 
     WHERE T2.IdMes <= T1.IdMes) AS [Acumulado Ingresos]
FROM [TABLA BALANCE] AS T1
ORDER BY T1.IdMes;

Pasos para usarlo:

  1. Ve a la pestaña Crear > Diseño de consulta (cierra la ventanita de agregar tablas).

  2. Haz clic en el botón SQL en la esquina superior izquierda y pega el código anterior (cambiando TABLA BALANCE por el nombre exacto de tu tabla si es diferente).

  3. Guarda la consulta con un nombre, por ejemplo, consulta_balance_acumulado.

  4. Usa esta consulta como Origen del registro de tu informe en lugar de la tabla original.

  5. En el informe, simplemente arrastra el campo Acumulado Ingresos directamente desde la lista de campos a la sección de Detalle.

Hola Eduardo, probé el código que me envió y funciona perfectamente. En el ejemplo traté de simplificar para que me entendieran mejor. En mi caso real yo debo obtener los acumulados para varios campos, por ejemplo:

TABLA BALANCE

IdMes

Ingresos

Gastos

Impuestos

Acumulado Ingresos

Acumulado Gastos

Acumulado Impuestos

como seria entonces la consulta SQL? 

Gracias de antemano. Saludos Dinorah

Pruebe con esto:

Para incluir los acumulados de Gastos e Impuestos de la misma manera que ya lo tienes hecho para Ingresos, puedes agregar subconsultas adicionales dentro del SELECT.

SELECT 
    T1. IdMes, 
    T1. Ingresos, 
    T1. Gastos,
    T1. Impuestos,
    (SELECT SUM(T2. Ingresos) 
     FROM [TABLA BALANCE] AS T2 
     WHERE T2.IdMes <= T1.IdMes) AS [Acumulado Ingresos],
    (SELECT SUM(T2.Gastos) 
     FROM [TABLA BALANCE] AS T2 
     WHERE T2.IdMes <= T1.IdMes) AS [Acumulado Gastos],
    (SELECT SUM(T2.Impuestos) 
     FROM [TABLA BALANCE] AS T2 
     WHERE T2.IdMes <= T1.IdMes) AS [Acumulado Impuestos]
FROM [TABLA BALANCE] AS T1
ORDER BY T1.IdMes;

¿Qué cambios se realizaron?

Columnas base añadidas: Se incluyeron T1. Gastos y T1. Impuestos en las columnas principales para que se muestren los valores del mes actual.

Nuevas Subconsultas: Se replicó la lógica de la subconsulta de ingresos para los campos Gastos e Impuestos, filtrando siempre por T2.IdMes <= T1. IdMes para mantener el cálculo acumulativo mes a mes.

Una recomendación trate de migrar a una base de datos más potente, por ejemplo, PostgreSQL donde puede realizar consultas complejas que Access no puede hacer. Lo invito a tomar mi curso sobre Access /PostgreSQL.

Muy agradecida Voy a probar el código y le digo. Independientemente de esto me gustaría ver su curso sobre Access /PostgreSQL, si fuera tan amable de indicarme el link.

Le escribo en cuanto pruebe el código

Saludos Dinorah

Estimado Eduardo, ya probé su solución y funcionó perfectamente. Muchísimas gracias.

Me alegro le haya servido. En relación al curso no es por video es presencial por AnyDesk y tiene una intensidad de 250 a 300 horas 2 horas diarias de lunes a viernes, aproximadamente 3 meses. Para más información contácteme a [email protected] o al WhatsApp 057 318 561 2588.

Muchas gracias. Ahora se me ha presentado un problema. Cuando voy a usar un informe para mostrar los valores acumulados calculados en la consulta SQL, al referirme a un campo acumulado me da el siguiente error:

No se permite la clausula GROUP BY de múltiples niveles en una subconsulta

Le agradeceria me indique que hacer. Saludos Dinorah

Este error ocurre porque Access, al momento de generar un informe que intenta agrupar, ordenar o sumar campos de una consulta que ya contiene subconsultas con funciones de agregación (SUM), interpreta esto como un GROUP BY de múltiples niveles, lo cual su motor de base de datos (Jet/ACE) no permite.

La solución más limpia, eficiente y recomendada en Access para evitar este problema es reemplazar las subconsultas correlacionadas por una autoreferencia (un JOIN con la misma tabla). De esta manera, Access maneja el cálculo como una consulta plana y el informe no generará conflictos.

Solución óptima: Reescribir con un JOIN

Modifica la consulta SQL de tu informe de la siguiente manera:

SELECT 
    T1. IdMes, 
    T1. Ingresos, 
    T1. Gastos,
    T1. Impuestos,
    SUM(T2.Ingresos) AS [Acumulado Ingresos],
    SUM(T2.Gastos) AS [Acumulado Gastos],
    SUM(T2.Impuestos) AS [Acumulado Impuestos]
FROM [TABLA BALANCE] AS T1
INNER JOIN [TABLA BALANCE] AS T2 
    ON T2.IdMes <= T1.IdMes
GROUP BY 
    T1. IdMes, 
    T1. Ingresos, 
    T1. Gastos, 
    T1. Impuestos
ORDER BY T1.IdMes;

¿Por qué funciona esto?

Elimina las subconsultas anidadas: Al utilizar un INNER JOIN basado en la condición <=, el motor procesa el acumulado mediante una agregación estándar (GROUP BY) en un solo nivel.

Compatibilidad con Informes: Al no existir subconsultas en la sección de columnas (SELECT), el informe de Access podrá aplicar sus propias agrupaciones, ordenamientos o sumatorios secundarios sin arrojar esto error de "múltiples niveles".

Respuesta

Eduardo,

Echa un vistazo a otros caminos, las funciones personalizadas en Access / VBA.

Crear un campo con suma continua

Respuesta

No se aconseja guardar un dato calculado, cualquier ajuste corrector en un registro implicara el recalculo de la tabla, lo correcto (en un formulario) es crear un campo independiente en un espacio común (cabecera o pie) y en el un campo calculado cuyo origen de datos sea:

= Suma([aquí el nombre del campo a sumar])

El calculo será automático y el el valor se actualizara al guardar el registro (suma solo los registros reales, no incluye el que se esta creado).

Basta guardar el registro (desplazarse a otro es suficiente para activar el guardado automático).

En los informes es mas sencillo (los informes tienen la propiedad 'SUMA CONTINUA') en ellos bastara repetir el campo y activar su propiedad 'suma contina' que presentara el total acumulado registro a registro.

Si aun sigues interesado en emular la suma continua en el formulario, se puede hacer mediante una función de dominio (y sin necesidad de guardar este dato que la función lo calcula en tiempo de ejecución)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas