Autonumérico con formato específico access

Primeramente felicitarles por compartir sus conocimientos, he aprendido mucho aquí. Mí consulta la hago porque he leído muchas respuestas pero ninguna logra resolver mi problema. Como puedo crear un autonumérico que tenga el siguiente formato 4 dígitos del año 2 del mes 2 de la quincena y 4 del incrementable, ejemplo: 2020-07-01-0001, 0002, 0003, etc, pero que al cambiar de mes o quincena el contador se reinicie a 1, ejemplo quincena (02) 2020-07-02-0001, 0002, 0003, 0004, etc y si se cambia de mes suceda lo mismo ejemplo mes (08) 2020-08-01-0001. Ya consigo obtener el año mes y quincena, lo único es que el contador no se reinicia sigue incrementando sin importar el mes o quincena.

1 respuesta

Respuesta
2

Vamos a ver si me explico. Si tengo una tabla Tabla1 con dos campos idloquesea, que lógicamente no puede ser autonumérico, sino texto-Indexado sin duplicados y otro campo Campo1y con ellos tengo hecho un formulario, da igual que sea único o continuo, pero así se ve mejor

El control Idloquesea, le tengo puesto que no sea punto de tabulación y bloquedado=Sí De forma que a medida que voy poniendo valores en el control Campo1 me va rellenando el control Idloquesea. El código del evento Después de actualizar del control Campo1 es

Private Sub Campo1_AfterUpdate()
Dim quincena As Byte, primera As String, segunda As String
quincena = (DateSerial(Year(Date), Month(Date) + 1, 0) - DateSerial(Year(Date), Month(Date), 1)) / 2
primera = Format(Nz(DCount("*", "tabla1", "left([idloquesea],4)=format(year(date()),""0000"") and mid([idloquesea],6,2)=format(date(),""mm"") and mid([idloquesea],9,2)<=" & quincena & "")) + 1, "0000")
segunda = Format(Nz(DCount("*", "tabla1", "left([idloquesea],4)=format(year(date()),""0000"") and mid([idloquesea],6,2)=format(date(),""mm"") and mid([idloquesea],9,2)>" & quincena & "")) + 1, "0000")
If Day(Date) <= " & quincena & " Then
Idloquesea = Year(Date) & "-" & "" & Format(Date, "mm") & "" & "-" & Day(Date) & "-" & "" & primera & ""
ElseIf Day(Date) > " & quincena & " Then
Idloquesea = Year(Date) & "-" & "" & Format(Date, "mm") & "" & "-" & Day(Date) & "-" & "" & segunda & ""
End If
End Sub

Las dos primeras líneas son para averiguar cual es el día central del mes, tanto, si tiene 28,30,31 días.

Y si no me equivoqué, funciona

Gracias por tu pronta respuesta. Creo que no me explique bien Veo que en tu ejemplo las quincenas se especifican de acuerdo a que quincena es la de el año conforme a la fecha actual pero yo necesito que la quincena no sea mayor de dos (porque cada mes solo tiene dos quincenas) un ejemplo 2020-07-01-0001, 0002, 0003, 0004 y seguimos en el mismo mes(07)  pero en la segunda quincena 2020-07-02-0001, 0002, 0003, etc y cambiamos de mes e iniciamos nuevamente la quincena (01) pero en un nuevo mes (08) ejemplo 2020-08-01-0001, 0002, 0003, etc

Para que te quede así

Deja el código como

Private Sub Campo1_AfterUpdate()
Dim primera As String, segunda As String
If Day(Date) <= 15 Then
primera = Format(Nz(DCount("*", "tabla1", "left([idloquesea],4)=format(year(date()),""0000"") and mid([idloquesea],6,2)=format(date(),""mm"") and mid([idloquesea],9,2) like ""01""")) + 1, "0000")
Idloquesea = Year(Date) & "-" & "" & Format(Date, "mm") & "" & "-" & "01" & "-" & "" & primera & ""
ElseIf Day(Date) > 15 Then
segunda = Format(Nz(DCount("*", "tabla1", "left([idloquesea],4)=format(year(date()),""0000"") and mid([idloquesea],6,2)=format(date(),""mm"") and mid([idloquesea],9,2) like ""02""")) + 1, "0000")
Idloquesea = Year(Date) & "-" & "" & Format(Date, "mm") & "" & "-" & "02" & "-" & "" & segunda & ""
End If

Grande Julián... muchas gracias, es justo lo que estaba tratando de realizar pero no lo conseguía y no había encontrado la solución por ningún lado

Julián he probado lo que me respondiste y funciona excelente pero funciona con la fecha del sistema, y te quiero molestar con que me apoyaras explicándome como lo hago desde una caja de texto donde introduzco la fecha del año

No hay problema, sólo tienes que sustituir Date() ó Date por el nombre del cuadro de texto. Mira, si tengo el formulario, donde tengo un cuadro de texto, que después de muchas horas estrujándome el cerebro, he decidido ponerle un nombre original, Fecha, donde voy a escribir la que quiera

A medida que voy rellenando. Si ahora cambio de mes

Y si cambio de año

De todas formas, el código es

Private Sub Cliente_AfterUpdate()
Dim primera As String, segunda As String
If Day([Fecha]) <= 15 Then
primera = Format(Nz(DCount("*", "tabla1", "left([Nregistro],4)=format(year([fecha]),""0000"") and mid([Nregistro],6,2)=format([fecha],""mm"") and mid([Nregistro],9,2) like ""01""")) + 1, "0000")
NRegistro = Year([Fecha]) & "-" & "" & Format([Fecha], "mm") & "" & "-" & "01" & "-" & "" & primera & ""
ElseIf Day([Fecha]) > 15 Then
segunda = Format(Nz(DCount("*", "tabla1", "left([Nregistro],4)=format(year([fecha]),""0000"") and mid([Nregistro],6,2)=format([fecha],""mm"") and mid([Nregistro],9,2) like ""02""")) + 1, "0000")
NRegistro = Year([Fecha]) & "-" & "" & Format([Fecha], "mm") & "" & "-" & "02" & "-" & "" & segunda & ""
End If
End Sub

¡Gracias! Excelente Julián me salvaste la vida... yo lo intenté pero no me funcionaba porque donde tu pones Registro yo siempre coloca el nombre de la caja de texto de fecha

La pregunta no admite más respuestas

Más respuestas relacionadas