Cómo crear una relación de ingresos egresos?

Tengo una bd en access muy sencilla hecha por mi, tengo una tabla de ingresos y otra de egresos, en ambas anoto salidas en efectivo o.por banco, quiero hacer un informe donde pueda ver los ingresos y egresos en efectivo sumados cada uno y con el saldo inicial me indique el saldo final. Es una relación de caja, trate con una consulta uniendo los datos de ambas tablas pero me salen siempre datos repetidos. Si alguien me puede dar una orientación.

2 Respuestas

Respuesta

No se necesita relación entre esas tablas, recomendaría un formato normalizado (un clásico: ID, fecha, concepto debe/haber o ingreso/egreso….) y cada movimiento es un registro.
Para obtener (con ese diseño) un resultado, bastaría una consulta de unión (se juntarían todos los datos en un único conjunto) y (según se introdujesen los datos, con signo o sin él) bastaría que al dato de la columna egresos se le multiplicase por (-1) para que se mostrase el saldo correcto.
Si se desea visualizar los datos, se les tendrá que ordenar por fecha para que los resultados sean coherentes.
No se necesita relación entre esas tablas, recomendaría un formato normalizado (un clásico: ID, fecha, concepto debe/haber o ingreso/egreso….) y cada movimiento es un registro.
Para obtener (con ese diseño) un resultado, bastaría una consulta de unión (se juntarían todos los datos en un único conjunto) y (según se introdujesen los datos, con signo o sin él) bastaría que al dato de la columna egresos se le multiplicase por (-1) para que se mostrase el saldo correcto.
Si se desea visualizar los datos, se les tendrá que ordenar por fecha para que los resultados sean coherentes.

Respuesta

Este ejemplo le sirve. Cómo estructurar la relación de caja en Access:

Tiene dos tablas:

TblIngresos

TblEgresos

Ambas deberían tener:

Un campo para el monto

Un campo para el tipo de operación (efectivo o banco)

Un campo de fecha

Quizá una descripción o concepto

Paso 1: Crear consultas independientes de suma por tipo de operación
Primero, haz dos consultas de totales (suma) para cada tabla y solo para las operaciones en efectivo.

Consulta de ingresos en efectivo:

SELECT Sum(TblIngresos.Monto) AS TotalIngresosEfectivo
FROM TblIngresos
WHERE TblIngresos.TipoOperacion = "Efectivo";

Consulta de egresos en efectivo:

SELECT Sum(TblEgresos.Monto) AS TotalEgresosEfectivo
FROM TblEgresos
WHERE TblEgresos.TipoOperacion = "Efectivo";

Paso 2: Crear una consulta de saldo de caja

Ahora, haga una nueva consulta que referencie las dos consultas anteriores o directamente sume desde las tablas como subconsultas. Ejemplo:

SELECT 
    (SELECT Sum(Monto) FROM TblIngresos WHERE TipoOperacion="Efectivo") AS TotalIngresosEfectivo,
    (SELECT Sum(Monto) FROM TblEgresos WHERE TipoOperacion="Efectivo") AS TotalEgresosEfectivo,
    [SaldoInicial] + 
    (SELECT Sum(Monto) FROM TblIngresos WHERE TipoOperacion="Efectivo") - 
    (SELECT Sum(Monto) FROM TblEgresos WHERE TipoOperacion="Efectivo") AS SaldoFinal
FROM 
    (SELECT 1000 AS SaldoInicial) -- Puede cambiar 1000 por el valor real de su saldo inicial
;

Así obtiene:

Total ingresos en efectivo

Total egresos en efectivo

Y el saldo final sumando/restando a partir de un saldo inicial

Si lo quieres por fechas:

Puede hacer una consulta agrupada por fecha:

SELECT 
    Fecha,
    Sum(IIf([TipoOperacion]='Efectivo',[Monto],0)) AS TotalEfectivo,
    Sum(IIf([TipoOperacion]='Banco',[Monto],0)) AS TotalBanco
FROM TblIngresos
GROUP BY Fecha
UNION ALL
SELECT 
    Fecha,
    -Sum(IIf([TipoOperacion]='Efectivo',[Monto],0)) AS TotalEfectivo,
    -Sum(IIf([TipoOperacion]='Banco',[Monto],0)) AS TotalBanco
FROM TblEgresos
GROUP BY Fecha
ORDER BY Fecha;

¿Por quél e salían datos repetidos?
Probablemente intentó hacer una consulta de unión sin unificar bien los criterios, o usó una relación tipo INNER JOIN que cruzaba cada ingreso con cada egreso, generando combinaciones que multiplicaban los resultados. En este caso, no necesita relacionar las tablas directamente, sino sumar por separado y luego combinarlas.

Personalmente no trabajo de esta forma lo hago con 1 sola tabla clasificando por tipo, pero no lo hago con Access sino con PostgreSQL donde hay más posibilidades

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas