¿Cómo crear un campo calculado que se reinicie cada año?

En una tabla con un listado de pacientes quiero crear un campo calculado que me genere un número con el formato xxxx-aa, donde xxxx es un número correlativo y aa son los dos últimos dígitos del año en curso.

Hasta aquí lo he conseguido hacer de forma chapucera, pero el problema está en que el número xxxx se ha de reiniciar cada año. Es decir si el último valor del año 2017 es la 4567-17 el siguiente que se cree, que será el primero del año 2018, debería ser 0101-18 (el número xxxx debería ser siempre de 4 dígitos y debería empezar en 0101).

1 Respuesta

Respuesta
2

Por hacerlo puedes hacerlo de muchas formas. Por ejemplo, supongamos que tienes la tabla Clientes, con Idcliente, Nombre, Fecha, etc. Añádele un campo texto, por ejemplo NumCuenta..

Si con ella has hecho un formulario, pon en el evento Al recibir el enfoque del cuadro de texto Numcuenta

If IsNull([NumCuenta]) Then
NumCuenta = Format((DCount("alias", "nocontestar", "year(date())=year([fecha])") + 1), "0000") & "-" & Format(Date, "yy")
End If

Así, cuando escribas el primer registro y el cursor llegue a Numcuenta, contará cuantos registros hay antes de ese. Como es el primero la cuenta es 0 por eso le sumo 1 y te lo pondrá como 0001-17

Cuando cambie el año, contará cuantos registros hay con el nuevo año. Como todavía no hay ningono, al primerp le pondrá 00001-18

No es necesario ponerlo en ese evento. Lo puedes poner, en el evento Después de actualizar del cuadro de texto Fecha o en otro cualquiera

¡Muchas gracias por tu ayuda! Pero necesito un poco más... :)

Estoy ayudando a una amiga que es psicóloga y me ha pedido que le haga una pequeña base de datos para llevar el control de sus pacientes, pero mis conocimientos de Access son limitados.

La tabla con los datos de los pacientes se llama tabPacients, el campo donde tiene que ir el número calculado se llama Historia y el campo con la fecha de alta del paciente se llama Data_alta.

Interpreto que donde pones "alias" debo poner  "[Historia]", donde pones "nocontestar" debo poner "tabPacients" y donde pones [fecha] debo poner [Data_alta]; por lo que el código quedaría de esta manera:

Private Sub Historia_GotFocus()

If IsNull([Historia]) Then
Historia = Format((DCount("[Historia]", "tabPacients", "year(date())=year([Data_alta])") + 1), "0000") & "-" & Format(Date, "yy")
End If
End Sub

Funciona correctamente la numeración, pero no se reinicia al cambiar el año. Es decir, si voy por la ficha con nº de historia 0005-17 y creo otra ficha con fecha de alta de 2018 se crea el nº de historia 0006-17 y no 0001-18.

¿Qué he hecho mal? :(

Gracias de nuevo por tu ayuda... :)

Xavi

Claro que al cambiar el año, empieza con 0001-18. Si te fijas yo he puesto la función Date, que representa EL DÍA QUE TIENE EL ORDENADOR( es decir 19/092017). Cuando estés en el año 2018, el primer registro te lo pondrá como 0001-18. Por tanto mientras no te vayas a panel de control y cambies la fecha del sistema no te modificará nada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas