Calculo de días entre fechas de varias etapas de un proceso

Estoy desarrollando un aplicativo en access para mi oficina para poder seguir y controlar unos expedientes. Actualmente tengo la tabla expedientes (donde esta el id, numero de expediente, objeto, área solicitante y fecha de inicio), la tabla estados ( donde esta el id y la descripción del estado) y la tabla detalles de expedientes ( donde esta el id, id expediente, id estado, fecha de inicio del estado y observaciones). Los estados en total son 9 y a medida que voy cambiando de estado al expediente, este se guarda en detalles de expedientes. Lo que quiero saber es como hacer para que de un expediente me calcule los días transcurridos entre los distintos estados.

Respuesta
1

En base a estos comentarios:

... Donde esta el id, id expediente, id estado, fecha de inicio del estado y observaciones ...
... Y a medida que voy cambiando de estado al expediente, este se guarda en detalles de expedientes. ...

Si la fecha del inicio del cambio de estado se guarda, no veo que impedimento existe para el calculo, la primera fecha (por ser la primera) se compara consigo misma (resultado cero) y a partir del segundo registro con la fecha del registro anterior, resultado = la diferencia en días (o el intervalo de calculo).

2 respuestas más de otros expertos

Respuesta
1

Sería conveniente una imagen del formulario, para abreviar, si tengo el formulario Tabla2, donde escribo un Idexpediente y elijo un Estado

Cuando ponga la fecha de inicio, lógicamente en Dias Intervalo no me pondrá nada, ya que no hay nada anterior, pero a medida que vaya rellenando

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

Private Sub FechaInicioEstado_AfterUpdate()
DiasIntervalo = FechaInicioEstado - DLast("fechainicioestado", "tabla2", "idexpediente=" & Me.IdExpediente & " and id<" & Me.Id & "")
End Sub

Y no tendrías problemas en intercalar otros expedientes ya que el criterio lo que tiene en cuenta es el IdExpediente.

Excelente! Ya mismo lo pruebo y te comento. Esto lo estoy arrojando en un formulario que me abre otro formulario que me tira el avance del expediente. La idea es llevar registro, por que se demoran demasiado. 

la idea es de una pantalla principal en la que se lista. Los expedientes ( formulario continuo) hacer clic en el botón correspondiente al expediente y que abra el detalle del expediente y el listado de estados y los pasos por los que ha pasado y cantidad de días entre ellos. Estoy viendo cómo hacer el formulario de cambio de estado. Imagino que lo mejor es hacer un combo con todos los expedientes, otro con los estados y que al salvar ponga en un tercer campo la fecha now

Ajunto imagenes para que me entiendas mejor.

Esta es la pantalla principal, ahi esta calculando los dias de los expedientes, por que basicamente ninguno se ha cerrado. Con esto sabemos que hace 100 dias el primer expediente esta en curso.

Al hacer click en el boton de la lupa, se debe abrir la siguiente ventana (que no se como hacer para que me tome el id del expediente que seleccione. A este le adjunte un subformulario donde realiza un filtro de los estados por expediente y los lista. De esta manera, puedo ver la evolucion de cada expediente.

me falta agregarle el boton de nuevo estado para que cuando se produce un cambio, puedan registrarlo. y creo que con eso estaria listo! Lo que si deberia hacer es traerme el id del expediente para no tener que cargarlo y evitar asi errores.

No se si fui claro con la explicacion.

Muchas Gracias por su ayuda!

Puedes hacerlo de muchas formas, todo depende de que es lo que vayas a hacer una vez abierto en segundo formulario, si editar, si añadir, si modificar valores, etc.. Por ejemplo, supongamos que tengo un formulario Clientes con el botón que citas

Y voy a presionar el botón de Antonio. De forma que me abra el formulario Tabla1 y que me rellene algunos datos que ya están en el formulario Clientes. Cuando pulso el botón

Me abre el formulario Tabla1 y me rellena lo que ya está en el formulario Clientes

En este caso, en el evento Al hacer clic del botón le pongo

Private Sub Comando19_Click()
DoCmd.OpenForm "tabla1", , , , acFormAdd, acDialog
End Sub

Y en el evento Al cargar del formulario Tabla1( pero ya te digo de que dependerá de lo que vayas a hacer)

Private Sub Form_Load()
If CurrentProject.AllForms("clientes").IsLoaded Then
IdCliente = Forms!Clientes!IdCliente
NombreCliente = Forms!Clientes!Cliente
Direccion = Forms!Clientes!Direccion
End If
End Sub

Es decir, si el formulario Clientes está cargado, que si lo está, ya que accedes a Tabla1 desde Clientes), entonces, el valor del control Id cliente sea igual al que figura en ese momento en el registro activo de Clientes.

Se podría hacer también con Idcliente. Deafultvalue, pero esto tiene el inconveniente de que si abrieras el formulario Tabla1 sin haber abierto antes Clientes te saldrá mensaje de error, mientras que de la otra forma, si Clientes no estuviera abierto no hace absolutamente nada.

De todas formas, si quieres, repito, si quieres, mándame un mensaje( sólo el mensaje) a [email protected] y te envío un par de ejemplos.

Si lo haces, en el asunto del mensaje pon tu alias Juan Markan, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Estoy de acuerdo con la respuesta de Julián y muy bien explicada, no obstante, el cálculo recomiendo hacerlo es en una consulta y utilizando SQL, el problema de hacer el cálculo de estas forma se ve afectado cuando el volumen de registros es bastante grande, ahí es donde se puede utilizar lo propuesto por el maestro JESUS MANSILLA. Tecsys Proyectos Informáticos S.L. (accessaplicaciones.com)

Especialmente el apartado "Funciones personales en SQL (II). Calcular una diferencia entre dos registros". No obstante, para su caso recomiendo la respuesta de Julián González.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas