Cómo formar un código en base de datos Access

Quiero formar un código que aclaro no será el campo clave, que contenga el siguiente formato:

año actual + Especialidad + Consecutivo dentro de la Especialidad.

Las personas tienen un Año de inscripción (actual) además en un campo que se llama Especialidad que es un combobox se puede clasificar como que es especialista en:

Medicina Interna - MI

Ortopedia - OR

Oftalmología - OF

El Consecutivo dentro de la especialidad sería el número que se le asigna como tal, si es la SEGUNDA persona que se ingresa al sistema como especialista de Oftalmología en el presente año tendría el siguiente código:

2016 OF 2

Lo más complicado creo que es el tema del consecutivo..

1 respuesta

Respuesta
1

En la web de Neckkito tienes ejemplo de como crear consecutivos alfanuméricos, y si mal no recuerdo, en la de Angeles Sebas, también.

Un saludo.


Un nuevo foro de access, visítanos: http://nksvaccessolutions.com/Foro/ 

Descargué el ejemplo que está muy bueno y bien explicado, pero no concuerda exactamente con lo que deseo, quizás con algunas modificaciones como que la serie no empiece por "A"..  sino en dependencia de la especialidad seleccionada para el registro, ... porque el autonumérico que necesito no es tan continuo como este, ya que puedo ingresar el segundo especialista en oftalmológica del 2016 (2016 OF 2) y apto seguido ingresar el quinto  especialista de medicina interna del 2016.. (2016 MI 5)... espero haberme explicado bien.. gracias..

El funcionamiento es el mismo, en el código, en vez de "A","B", has de hacer referencia a tu cuadro combinado, para que coja el valor que tiene.

Y para seguir el autonumérico, has de buscar los últimos números del año y especialidad.

Estoy intentando eso.. pero entre comillas no me deja hacer la referencia puse ME.Espelialidad y como seguro lo toma por una cadena no hace nada, si le quito las comillas me da un error que no es un valor para una constante....

¿Qué código tienes escrito? Si lo haces bien, funciona 100%

Lo puse todo ahí.. también para ponerle el año de la fecha actual lo puse donde creo debía ir.. pero me da error...

___________________________________

'Declaramos las variables
            'Con la constante miSerie indicaríamos qué letras hay que añadir antes del
            'número. Yo he situado la serie en "Axxxx", pero si quisiéramos "PPxxx" simplemente
            'escribiríamos <Const miSerie As String = "PP">
    Const miSerie As String = Me.Especialidad
    Dim miAN As String, ultimoAN As String
    Dim ultimoANNum As Long
        'Comprobamos si hay valor en [Autonum]. Si lo hay es que estamos recorriendo
        'los registros, por lo que no necesitamos calcular nada. En este caso salimos
    If Not IsNull(Me.Autonum.Value) Then Exit Sub
        'Comprobamos cuál es el último [Autonum] introducido a través de DLast()
    ultimoAN = Nz(DLast("Autonum", "TDatos"), "")
        'Si no hay registros obtendríamos una cadena vacía (""). En este caso tendríamos
        'que empezar por el primero
    If ultimoAN = "" Then
            'Escribimos directamente el primer valor. Lo escribiremos en función del
            'tamaño de campo que hayamos establecido
        Me.Autonum.Value = Año(Fecha()) & miSerie & "0001"
        Exit Sub
    End If
        'Si ha devuelto un valor vamos a coger su parte numérica. Como hemos definido el tamaño
        'del campo en 5 debemos coger los últimos 4 caracteres. Si hubiéramos definido el tamaño
        'del campo en 8, por ejemplo, deberíamos coger los últimos 7, así:
        '<ultimoANNum = CLng(Right(ultimoAN, 7))>
            'Convertimos al mismo tiempo ese valor en un entero largo
    ultimoANNum = CLng(Right(ultimoAN, 4))
        'Le añadimos una unidad
    ultimoANNum = ultimoANNum + 1
        'Si el valor superara 9999 avisamos y reiniciamos el contador. Lógicamente, si hubiéramos
        'fijado un tamaño de campo de 7, por ejemplo, el valor a comprobar sería 999999
    If ultimoANNum > 9999 Then
        MsgBox "Se ha llegado al límite del contador. Este se reiniciará", vbInformation, "AVISO"
        ultimoANNum = 1
    End If
        'Reconstruimos el alfanumérico teniendo en cuenta que debemos añadir los ceros anteriores
        'al número. Eso lo hacemos con la adición de cuatro ceros (la parte numérica) y la
        'función right()
    miAN = miSerie & Right("0000" & ultimoANNum, 4)
            'Si hubiéramos fijado el tamaño del campo en 7, por ejemplo, debemos:
            '***Quitar una unidad para respetar la serie, por lo que nos quedan 6
            '***En lugar de escribir 4 ceros escribiríamos 6 ceros, y cogeríamos los 6
            '    últimos caracteres de la derecha, así:
            '<miSerie & Right("000000" & ultimoANNum, 6)
        'Escribimos el valor en el campo del formulario
    Me.Autonum.Value = miAN

MiSerie no es una constante, sino una variable, por eso te da error. Hazlo así:

Dim miSerie as string

miSerie = Me.Especialidad

Va saliendo, toma bien el valor del campo Me. Especialidad, lo que poner detrás 0001 para todo el mundo... no hace autonomerico y no se donde poner el año.. o como ponerlo mejor dicho.. gracias..

Ya tengo Year(date)... solo va faltando autonumerar..

En esta línea:

ultimoAN = Nz(DLast("Autonum", "TDatos"), "")

Te falta indicarle los criterios para que te filtre por año y especialidad. Mira la ayuda de la función DLast()

Bdias.. he hecho y deshecho y no logro aún el resultado deseado, dígame si puedo enviarle el fichero a algún correo para que me lo revise a ver que puede estar faltando o sobrado.. saludos..

Dim ultimoAN as String

Dim ultimoANNum As Long

If Not IsNull(Me.Autonum.Value) Then Exit Sub
    ultimoAN = Nz(DMax("Autonum", "TDatos","Año=" & Year(Date) & " AND Especialidad='" & Me.Especialidad & "'"), "")
    If ultimoAN = "" Then
        Me.Autonum= Año(Fecha()) & Me.Especialidad & Format(1,"0000")
        Exit Sub
    End If
    ultimoANNum = CLng(Right(ultimoAN, 4))
    ultimoANNum = ultimoANNum + 1
    Me.Autonum= Año(Date) & Me.Especialidad & Format(ultimoANNum ,"0000")
   

Así te debería funcionar. Tendrás que revisar y adaptar los nombres de tus campos

Hola, hoy no he podido dedicar todo el tiempo que quisiera a este tema y es lo que me va faltando...

Me da un error aquí:

ultimoAN = Nz(DMax("Autonum", "Colaboradores", "Año=" & Year(Date) & " AND Especialidad='" & Me.Programa & "'"), "")

Cambié bien las cosas... pero nada.. lo otro es que dejándolo así:

ultimoAN = Nz(DMax("Autonum", "Colaboradores") , "")

Corre pero no hace el autonumético....

Saludos..

Dariel, el código lo acabo de probar y funciona perfectamente (solo había un pequeño fallo, hay que cambiar Año() por Year())

http://www.filebig.net/files/3ad25HQJy2 

No dices qué error te da, por lo que no te puedo decir cómo solucionarlo, pero como te digo (y adjunto en el ejemplo) funciona perfectamente.

Muy bien!, tenía varios errores, estaba asignando el código al formulario, además de que no tenía el año como un campo si no que lo tomaba directamente del código... voy a probarlo y te cuento.. solo queda un detalle por lo que veo y es que si por error selecciono una especialidad incorrecta y pone el alfanumerico, al seleccionar otra no lo cambia hay que borrarlo, pero creo puedo resolverlo con limpiando el campo siempre antes... saludos

Siempre puedes hacer eso, lo de borrar el campo, o elimina la linea que comprueba si el campo tiene valor, de esa forma, siempre que actualices el combo, te actualizará el autonumérico. Pero ¡Ojo!, si ya tienes un número (por ej, el 10) y modificas un registro anterior (por ej el 3), el autonumérico te devolverá el siguiente (11)

¡Gracias!  Hoy fue que pude después de varios días sin poder trabajar sobre el tema lograr el resultado deseado... muchísimas gracias !!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas