Hola lordcortes:
En lo particular, cuando se trata de reportes de entradas salidas nunca manejo fechas, sino consolidados, es decir sumando las entradas y salidas para obtener el total de existencias para una fecha determinada... más no sé si esto te sirva, en estos momentos no tengo modo de probar con ACCESS, pero te dejo el ejemplo de más o menos lo que hago son SQL Server, la sintaxis sería muy parecida y creo que se puede entender:
Código SQL:
Ver originalDECLARE @Entradas TABLE (fecha datetime, producto VARCHAR(15), cantidad INT)
INSERT INTO @Entradas VALUES ('2011-07-25', 'TRICLOSAN', 10)
INSERT INTO @Entradas VALUES ('2011-07-27', 'TRICLOSAN', 5)
INSERT INTO @Entradas VALUES ('2011-07-29', 'TRICLOSAN', 15)
INSERT INTO @Entradas VALUES ('2011-07-26', 'OTRO', 10)
INSERT INTO @Entradas VALUES ('2011-07-27', 'OTRO', 1)
INSERT INTO @Entradas VALUES ('2011-07-28', 'OTRO', 4)
INSERT INTO @Entradas VALUES ('2011-07-28', 'UNO MÁS', 10)
SELECT * FROM @Entradas
/*
fecha producto cantidad
----------------------- --------------- -----------
2011-07-25 00:00:00.000 TRICLOSAN 10
2011-07-27 00:00:00.000 TRICLOSAN 5
2011-07-29 00:00:00.000 TRICLOSAN 15
2011-07-26 00:00:00.000 OTRO 10
2011-07-27 00:00:00.000 OTRO 1
2011-07-28 00:00:00.000 OTRO 4
2011-07-28 00:00:00.000 UNO MÁS 10
*/
DECLARE @Salidas TABLE (fecha datetime, producto VARCHAR(15), cantidad INT)
INSERT INTO @Salidas VALUES ('2011-07-26', 'TRICLOSAN', 7)
INSERT INTO @Salidas VALUES ('2011-07-27', 'TRICLOSAN', 3)
INSERT INTO @Salidas VALUES ('2011-07-27', 'OTRO', 8)
INSERT INTO @Salidas VALUES ('2011-07-30', 'OTRO', 7)
SELECT * FROM @Salidas
/*
fecha producto cantidad
----------------------- --------------- -----------
2011-07-26 00:00:00.000 TRICLOSAN 7
2011-07-27 00:00:00.000 TRICLOSAN 3
2011-07-27 00:00:00.000 OTRO 8
2011-07-30 00:00:00.000 OTRO 7
*/
SELECT
T1.producto,
T1.total_entradas,
isnull(T2.total_salidas, 0) total_salidas,
T1.total_entradas - isnull(T2.total_salidas, 0) existencia
FROM
(SELECT E.producto, SUM(E.cantidad) total_entradas FROM @Entradas E GROUP BY E.producto) T1
LEFT JOIN
(SELECT S.producto, SUM(S.cantidad) total_salidas FROM @Salidas S GROUP BY S.producto) T2
ON T1.producto = T2.producto
/*
producto total_entradas total_salidas existencia
--------------- -------------- ------------- -----------
TRICLOSAN 30 10 20
OTRO 15 15 0
UNO MÁS 10 0 10
*/
Es decir, toma cada tabla por separado y hace subconsultas agrupando por producto para obtener los totales, esos subconsultas son utilizados en una consulta "externa" para obtener las existencias por productos. observa que la fecha no es utilizada en ningún momento, y no importa si por ejemplo en un día no hubo sólo entradas, sólo salidas o entradas y salidas.
No sé si esto sea más o menos lo que necesites, sino habría que revisar tu lógica de negocios, para revisar los criterios de elaboración del reporte.
Dale un vistazo y nos comentas:
Saludos
Leo