Problemas al filtrar formulario continuo

Tengo un formulario continuo FC_LibroContable_2023, que depende de la tabla T_Contabilidad_2023.

En el encabezado del formulario tengo un campo TxtSaldoAnterior. Donde se consigna el valor correspondiente una vez filtrado el formulario por rango de fechas.

En el evento "Despues de Actualizar" del campo fecha Inicio le tengo puesto el siguiente código

Me.TxtSaldoAnterior = DLast("saldoAnterior", "T_Contabilidad_2023", "fechamov=forms!FC_LibroContable_2023!Inicio")

El problema se me plantea al filtrar el formulario por rango de fechas cuando el usuario introduce una fecha en la que no se produjo ningún movimiento, Entonces no me devuelve nada.

Agradecería ayuda para solucionar el problema, y creo que se deberia codificar de manera que si en la fecha inicio no hay movimiento, tome la inmediatamente posterior en la si hubo movimiento.

Pero no se como hacerlo.

Respuesta
1

Pruebe con este código

Me.TxtSaldoAnterior = DLast("saldoAnterior", "T_Contabilidad_2023", "fechamov<=forms!FC_LibroContable_2023!Inicio")

2 respuestas más de otros expertos

Respuesta
1

Es muy sencillo. Fíjate en la tabla, en la fecha señalada con la flecha, y en el valor del Cargo en fecha inmediatamente anterior. Puedes ver que el día 14 no está. La flecha debería estar en 148,33. Por eso en el bachillerato me suspendían el dibujo.

En el formulario, o donde sea, escribo una fecha

Fecha que no está. Al pulsar Enter

El código del evento Después de actualizar del cuadro de texto FechaI es

Private Sub FechaI_AfterUpdate()
Cargo = DLast("cargo", "pedidos", "fechapedido<=#" & Me.FechaI & "#")
End Sub

En resumen, te falta el símbolo < 

Gracias Julian. 

Ya lo había probado con el  símbolo  < y no es eso lo que necesito. a ver si me explico mejor?

la estructura de la tabla para cada registro es así:

No se trata de obtener el valor del cuadro de texto del registro anterior a la fecha de inicio, sino del primer registro que coincida con la fecha de inicio,  y si no hay ninguna coincidencia en esa fecha, entonces que coja en del mas cercano.

Por ejemplo. en la tabla de la imagen  si ponemos como fecha de inicio el día 06/01/2023  que no tiene registro no tiene registro, entonces debería coger el valor del campo SaldoAnterior del día 07/01/2023

Eso puede hacerse?

Creo que ya lo he entendido. Si tengo el formulario donde escribo una fecha que no está

Puedes ver que el cursor aún está en el control Fecha. Cuando pulso Enter

Me pone el saldo anterior a esa fecha, en este caso la del día 01/01/2023. Vamos a suponer que escribo una fecha que si está.

Cuando pulso Enter

Me pone como saldo anterior el mismo que corresponde al día 05

En este caso, en el evento Después de actualizar del cuadro de texto Fecha le tengo puesto

Private Sub Fecha_AfterUpdate()
If Nz(DCount("*", "tabla1", "fecha=forms!tabla1!fecha")) = 0 Then
SaldoAnterior = DLast("saldoanterior", "tabla1", "fecha<forms!tabla1!fecha")
Else
SaldoAnterior = DLast("saldoanterior", "tabla1", "fecha=forms!tabla1!fecha and saldoanterior is not null")
End If
End Sub

Le tengo que poner lo de Saldoanterior is not null, porque en el momento que se pulsa Enter ese es el último registro y su saldo anterior es nulo todavía.

Amigo perdona que no te haya dado las gracias antes, pero he tenido unos días complicados, fruto de mis obligaciones béticas.

A ver. siguiendo tus indicaciones he puesto el siguiente codigo:

If Nz(DCount("*", "T_Contabilidad_2023", "FechaMov=forms!FC_LibroContable_2023!Inicio")) = 0 Then
Me.TxtSaldoAnterior = DLast("SaldoAnterior", "T_Contabilidad_2023", "fechaMov<forms!FC_LibroContable_2023!Inicio")
Else
SaldoAnterior = DLast("SaldoAnterior", "T_Contabilidad_2023", "fechaMov=forms!FC_LibroContable_2023!FechaMov and SaldoAnterior is not null")

Pero no  funciona. No se si me he dejado algo atrás. 

Imagen del formulario:

La idea es que en el evento "Después de Actualizar" del Cuadro de texto con la etiqueta "Desde" Me ponga el valor del Saldo Anterior correspondiente al primer registro que coincida con la fecha introducida y,, en su defecto, porque no haya fecha coincidente, me ponga el valor  del mismo campo  mas cercano  a la fecha introducida, pero dentro del rango de fechas. es decir, si la fecha introducida en inicio es 15/01/2023 que no existe, me ponga el valor correspondiente al registro inmediatamente posterior a la fecha introducida y que sí exista.

Por otro lado, me gustaría que los cuadros combinados que tengo a la izquierda del formulario, que van en cascada y me filtran el formulario,, también me filtren según el rango de fechas Introducido  Si no es mucha molestia para ti, Dime como puedo hacerlo.. GRACIAS JULIAN

José María, acabo de volver después de estar el fin de semana esquiando en Sierra Nevada. Bueno, si a lo que hago se le puede llamar esquiar, porque hasta los niños más pequeños se avergüenzan, oros se descojonan, de mis conocimientos.

Mira, si quieres, creo que lo mejor es que me mandes, si no tienes datos confidenciales, una copia de la tabla y como en la imagen que has puesto ya veo el formulario te hago un ejemplo y te lo mando.

Respuesta
1

Si se aplica 'un rango' de fechas' no es necesario que la fecha concreta exista, se mostrarán todas las que cumplan las condiciones sean a partir de la siguiente o la anterior a la ultima, aunque no comparto ese concepto, prefiero considerar que la ultima es la mayor del conjunto.

Normalmente el saldo es un campo calculado y guardarlo no es lo correcto, se debería calcular en tiempo de ejecución y 'el saldo anterior' es la resta de las sumas del debe/haber cuya fecha sea inferior a la de comienzo del rango.

Si se desea continuar en esa línea (obtener un saldo anterior ya calculado) se puede modificar el calculo publicado en base a que el dia del dato a obtener sea el mayor de los inferiores a la fecha de inicio del rango (creo que será mas rápido volver a hacer la suma).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas