Creo que has ahorrado tinta donde no deberías....
Esta expresión esta mal construida (independiente de la lógica que se utilice):
INV_INICIAL: SiInm([CALCULAR]="NO";"0";DSuma([ENTRADAS]-[SALIDAS];"Movimientos_Inventario2";[CALCULAR]="SI"))
Las reglas (de Access) exigen que todos los parámetros de las funciones de dominio sean 'expresiones de texto' si me lo permites utilizare tus datos:
[ENTRADAS]-[SALIDAS] ==> MAL
"[ENTRADAS]-[SALIDAS]" ==> BIEN
Si no se cumplen las reglas los resultados (si devuelve alguno) serán imprevisibles (el motor de Access no será capaz de interpretar lo que se le solicita).
Tenemos una fecha, tenemos un autonumerico (o un dato correlativo ascendente), ambos son ascendentes y validos pero ambos imponen condiciones:
El autonumerico: (valor que por ser automático no es modificable ...) si se utiliza como referente y en cualquier momento aparece la necesidad de añadir un dato atrasado .... no dará un resultado correcto
La Fecha si permitirá añadir datos entre medias, pero para dar resultados correctos si hay mas de un dato el mismo dia .... necesitara diferenciarlos (solución: Fecha + hora.....incluso segundo)
Utilizando como referente para el calculo e dato numérico (y correlativo ascendente) lo he bautizado como 'Disponible_0':
Utilizando como referente para el calculo la fecha (no he puesto imaginación así que):"Disponible_1"
Cópialos a la consulta y juega a añadir mas datos, con fechas correlativas, duplicando fechas y con fechas desordenadas (la consulta lo debería permitir)
Compara resultados y analiza cual se adapta mejor a tu aplicación
Unas notas:
En la condición (en ambas expresiones) se utiliza el referente 'dentro' y afuera de la expresión,
.- en el primer ejemplo ==> "[correlativo] <=" & [correlativo]
Access utilizara el que esta 'dentro de las comillas' ==> "[correlativo] <=" como el valor del conjunto de registros y el que esta afuera -unido con (&)- como el valor (del campo) del registro que este tratando (la consulta recorre uno a uno los registros)
La segunda, que utiliza la fecha como referente tiene un pequeño problema y es el formato regional, Access (internamente) utiliza para las fechas el formato regional americano, Access en español no y se genera una discordancia en los datos (mes y día intercambiados = resultados aleatorios)
La solución es consiste en 'traducir' la fecha española a la que Access espera encontrar y suelen utilizar el truco de darle formato ... personalmente (en base a que para Access una fecha es un numero... que luego 'disfraza' según el formato regional) utilizo el truco de darle el numero directamente (cuanto menos traductores, menos traidores) por ello al dato se le dan dos lavados, el primero -CFecha([fecha_mov])- traduce el texto en el idioma local a un dato fecha de Access (debería ser suficiente), pero es un texto y puede ser manipulable asi que a numero -CDoble( ........)- y asi los errores son infimos ==> CDoble(CFecha([fecha_mov]))
El valor de ese campo en el registro anterior, se puede obtener así:
Pregunta: ¿vale la pena guardar datos que se pueden obtener en tiempo de ejecucion y Actualizados?