Access - Como cambiar ID al cambiar de año

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 51 puestos en Access (en relación al último mes)
Gráfica de Access

Como cambiar ID al cambiar de año

Publicado por lursaildi (16 intervenciones) el 18/12/2015 10:20:53
Como puedo cambiar el número de ID al cambiar de año automáticamente y me siga manteniendo las Id de años anteriores sin que se modifiquen
ID actual: "HS_15-"0000
ID próxima "HS_16-"0000

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Como cambiar ID al cambiar de año

Publicado por Enrique Heliodoro (1664 intervenciones) el 18/12/2015 14:34:29
Lo ideal seria conocer el actual método que se esta aplicando, para modificar lo mínimo al actual proceso y si es posible que esto no vuelva a ser necesario dentro de trescientos y pico días.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 51 puestos en Access (en relación al último mes)
Gráfica de Access

Como cambiar ID al cambiar de año

Publicado por lursaildi (16 intervenciones) el 18/12/2015 15:30:20
En el Formato del campo poniendo "HS_16-"0000
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como cambiar ID al cambiar de año

Publicado por Enrique Heliodoro (1664 intervenciones) el 18/12/2015 17:25:53
Aclarando el entorno: ¿Qué es lo que se guarda en la tabla?

En principio 'supuse' que se trataba de una simulación de auto numérico, pero la respuesta (añadir una mascara fija) me ha despistado un poco, pues implica:
.- lo mas probable es que solo se guarde el numero
.- es posible que sea un campo 'autonumerico' de Access (no se puede reiniciar y su aplicación para casos como este es problemática)

Si se tratase de un campo de texto (alfanumérico) y se utilizasen unas funciones (o código) para lograr ese resultado, es cuando se podrían mantener los anteriores y añadir (incluso automáticamente) los nuevos cada año sin modificar una coma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 51 puestos en Access (en relación al último mes)
Gráfica de Access

Como cambiar ID al cambiar de año

Publicado por lursaildi (16 intervenciones) el 18/12/2015 18:20:27
Se guarda completo HS_16-0000 ;HS_16-"0001 etc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como cambiar ID al cambiar de año

Publicado por Enrique Heliodoro (1664 intervenciones) el 18/12/2015 18:49:13
De que tipo es el campo en el que se guarda ese dato (con la tabla en vista diseño)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como cambiar ID al cambiar de año

Publicado por Enrique Heliodoro (1664 intervenciones) el 19/12/2015 08:31:50
Un campo autonumerico (su mismo nombre lo indica) lo que guarda es un NUMERO de tipo LONG y a este tipo de campos no se le puede añadir texto.

El que 'obtengas' ese resultado es porque se le da formato y hace la función del envoltorio del paquete (que oculta el contenido real).

Creo que no podrás iniciar una numeración y también que has tenido mucha suerte si en el medio de ese conjunto consecutivo de datos no tiene ningún salto.
La posible salida para continuar con ese método e iniciar en cero, consistiría en volcar esa tabla en otra (para mantener el dato y su envoltorio mejor copiarlo a uno de texto) y ya efectuada la copia, vaciar la tabla, modificar el diseño 'del lazo' (el formato que se le aplica) que actualmente es: "HS_15-"0000 y pasaría a ser: "HS_16-"0000.

La verdadera solución (con presente y con futuro) seria modificar el tipo de dato en la tabla y crear una función (o una línea de código) que generase esa serie incremental en base al numero de registro y al año (que es lo que asumo que representa el dato que se modifica).

Sera mas o menos sencillo, en función de las relaciones que se creasen en base a ese dato, dado que antes era un numero al igual que el resto de los datos con los que se relaciona y después pasaría a ser un texto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 51 puestos en Access (en relación al último mes)
Gráfica de Access

Como cambiar ID al cambiar de año

Publicado por lursaildi (16 intervenciones) el 19/12/2015 09:44:45
Muchas gracias por la respuesta, creo que tendré que crear una nueva para el futuro con las modificaciones que me propones.
Como podría ser la función el código incremental que se modifica anualmente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como cambiar ID al cambiar de año

Publicado por Enrique Heliodoro (1664 intervenciones) el 19/12/2015 14:34:02
El análisis indica que la expresión (HS_15-0000) estaría compuesta de tres partes:
.- Una fija: "HS_"
.- Una variable cada año: 15
.- Una variable incremental para cada subconjunto año: -0000

Como el guion es un texto, podemos despreciarlo sin mas (o crear números negativos ... lo que no merece la pena)

Considerando que seria menos oneroso (o igual de oneroso) el separar la (parte fija + año) que solo el año, optaría en aras de la simplicidad el utilizarlas conjuntamente con lo que resultaría:

Seleccionar al subconjunto formado por parte fija+año que seria = Left ([el_dato], 5)
En una secuencia tal que HS_15-0123 ==> Left("HS_15-0123",5) ==> HS_15

La parte numérica de ese subconjunto se extraería así: Right ([el_dato], 4)
En una secuencia tal que HS_15-0123 ==> Right("HS_15-0123",4) ==> 0123
Como el resultado (0123) es un texto, para evaluarlo como numero le aplicamos a una función (VAL) : Val( Right("HS_15-0123",4)) ==> 123

Ya tenemos un numero para poder seleccionar al mas alto, algo que se hace con la función DMax.

Para 'juntar' todo eso hay que ponerse de acuerdo en el entorno de aplicación, asi que partiremos de un supuesto:
.- Una tabla con los datos (la llamaremos Facturas)
.- Un campo de esa tabla tipo texto y (al que llamaremos Id_Factura)
.- Tendremos en cuenta el cambio de año (para iniciar una nueva serie).

El mayor de la tabla seria:
= Dmax("Val( Right(Id_Factura, 4))","Facturas") , pero aun no es valido del todo, necesitamos el mayor del subconjunto del año actual, asi que aplicamos condición:

Para la condición tenemos (según se aclaro antes) la parte que implica al año
(... Left("HS_15-0123",5) ==> HS_15 ...)

Quedaria algo como: Left(ID_Factura, 5)

Que hay que comparar con el adecuado al año actual (el año actual = Format(Date,"yy") mas la parte fija:
Left(ID_Factura, 5) = "HS_" & Format(Date,"yy")

La añadimos a lo anterior, la condición:
= Dmax("Val( Right(Id_Factura, 4))","Facturas", "Left(ID_Factura, 5) = '" & "HS_" & Format(Date,"yy") & "'")

Al aplicarlo y en tiempo de ejecución, el motor de Access leería esto:
Dmax("Val( Right("HS_15-nnnn", 4))","Facturas", "Left("HS_15-0123", 5) = 'HS_15' ")
Dmax("Val( "nnnn")","Facturas", "HS_15 = 'HS_15' ")
Dmax("nnnn","Facturas", "HS_15 = 'HS_15' ") ==> nnnn

Aparece un problema, cuando se inicie el 2016 el filtro seria asi:
Dmax("nnnn","Facturas", "HS_15 = 'HS_16' ") ==> NULL (no hay registros creados en el año 2016)

Asi que a la expresión le aplicamos la función NZ:
= Nz( Dmax("Val( Right(Id_Factura, 4))","Facturas", "Left(ID_Factura, 5) = '" & "HS_" & Format(Date,"yy") & "'"), 0)

Y el año 2016 como mayor devolvería un CERO

Lo incrementamos:
= Nz( Dmax("Val( Right(Id_Factura, 4))","Facturas", "Left(ID_Factura, 5) = '" & "HS_" & Format(Date,"yy") & "'"), 0) + 1

Pero el numero queremos que tenga cuatro dígitos, le damos formato:
= Format( Nz( Dmax("Val( Right(Id_Factura, 4))","Facturas", "Left(ID_Factura, 5) = '" & "HS_" & Format(Date,"yy") & "'"), 0) + 1,"0000")

Le añadimos la parte fija (y el guion antes despreciado)
= "HS_" & Format(Date,"yy") " -" & Format( Nz( Dmax("Val( Right(Id_Factura, 4))","Facturas", "Left(ID_Factura, 5) = '" & "HS_" & Format(Date,"yy") & "'"), 0) + 1,"0000")

Lo cual daría como resultado el siguiente al mayor (o el primero de ese subconjunto al iniciar el año).

Una observación importante (que suele pasar desapercibida): devuelve el mayor del subconjunto de los datos GUARDADOS EN LA TABLA, mientras no se guarden en la tabla .... no existen
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 51 puestos en Access (en relación al último mes)
Gráfica de Access

Como cambiar ID al cambiar de año

Publicado por lursaildi (16 intervenciones) el 19/12/2015 14:36:46
Muchas gracias lo voy a intentar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar