"contador automatico" en formulario de Access
Expresiones como 1/xx deberían ir en un campo alfanumérico o de lo contrario Access efectuara la operación matemática y ... comienza el lio.
Por la descripción parece que se compone de tres partes:
.- la unidad o valor incremental
.- el separador (la barra o lo que se utilice)
.- una constante (que puede ser a su vez variable).
Lo indispensable:
Antes de calcular 'el siguiente' hay que definir cual es la constante común de ese rango (dado que el rango puede ser variable)
Para obtener la parte incremental nos basaríamos en el separador y aplicaríamos la función InStr que si lo localiza devuelve su posición en la cadena de texto pasada como argumento y si no lo localiza ... un cero (indicador de que no existe)
Conocida la posición del marcador, la parte incremental seria la que comenzando por la izquierda acabase en la posición del marcador menos uno, la parte fija (que define al grupo) comenzaría en la posición del marcador mas uno haste el final de la expresión.
Un dato tal como 7854/55 se desglosaría así:
Incremental = Left ("7854/55", InStr("7854/55","/") -1) ==> "7854"
.. InStr("7854/55","/") devolvería el numero cinco que es la posición del marcador, si el dato fuera "12/55" devolvería el numero tres
Grupo = MID("7854/55", InStr("7854/55","/") + 1) ==> "55"
Ambos son texto, pero un texto no se incrementa numéricamente, asi que lo convertimos a numero:
Incremental =Incremental = Left ("7854/55", InStr("7854/55","/") -1) ==> 7854==> 7854
Localizamos el mayor en el conjunto (función DMax) y el dato sera el valor del campo en la tabla (le denominare 'UnCodigo'
Mayor = Dmax("Left ([uncodigo], InStr([uncodigo],"/") -1)", "[aquí la tabla]")
Hay que condicionarla para que solo obtenga el mayor de un subconjunto (el grupo, que a estas alturas ha de ser conocido y esta en ..¿GrupoAlmacen?...
Mayor = Dmax("Left ([uncodigo], InStr([uncodigo],"/") -1)", "[aquí la tabla]", " MID([uncodigo], InStr([uncodigo],"/") + 1) = '" & me.GrupoAlmacen & "'")
Ya tendríamos al mayor de los '55' (o '44' o '123' o '999') , lo incrementamos para obtener el siguiente:
Siguiente = Dmax("Left ([uncodigo], InStr([uncodigo],"/") -1)", "[aquí la tabla]", " MID([uncodigo], InStr([uncodigo],"/") + 1) = '" & me.GrupoAlmacen & "'") +1
Y le añadimos el separador y grupo al que pertenece:
Siguiente = Dmax("Left ([uncodigo], InStr([uncodigo],"/") -1)", "[aquí la tabla]", " MID([uncodigo], InStr([uncodigo],"/") + 1) = '" & me.GrupoAlmacen & "'") +1 & "/" & me.GrupoAlmacen
En siguiente y partiendo de supuesto inicial (7854/55) estaría el nuevo dato (7855/55) el cual asignaríamos donde nos pareciese oportuno.
Quzas tengas alguna duda, pero ANTES de plantearla ojea en la ayuda de Access lo mas básico de las funciones expuestas (MID, InSTR, Left, Val, DMax ....) posiblemente se aclararan la mayor parte de ellas y si algo queda y tras 'la ardua meditación' solo queda un dolor de cabeza, tras la correspondiente aspirina: esa pequeña duda ==> pregunta