Campo numérico que reinicie al cambiar de año

Tengo un formulario el cual en el evento "al abrir" tengo estas sentencias.

Me.f_ide = Nz(DMax("[IDE]", "Reporte_tabla"), 0) + 1
Me.txtNo_Informe = "CC/" & Format(Nz(DMax("[IDE]", "Reporte_tabla"), 0) + 1, "0000") & "/" & vAño & ""
          

El formulario me sirve para guardar datos, al momento de crear un nuevo registro en el campo "txtNo_Informe" se escribe automáticamente el valor que va: por ejemplo si el ultimo registro guardado es "CC/0899/2022", el siguiente será "CC/0900/2022".

Lo que quiero es que al momento de cambiar de año (2023) que se reinicie la cuenta: CC/0001/2023...CC/0002/2023

2 Respuestas

Respuesta
1

Yo no lo pondría en el evento Al abrir. Mira, si tengo la tabla Tabla1 como

Y con ella construyo un formulario, te lo pongo continuo porque se ve mejor, pero sería igual si fuera único.

Es decir, cuando cambia el año, se reinicia. El código del evento Al activar registro es

Private Sub Form_Current()
If Me.NewRecord Then
Dim a
a = Nz(DCount("NumInforme", "tabla1", "right([numinforme],4)=year(date())")) + 1
NumInforme = "CC" & Format([a], "00000") & "/" & Year(Date)
IDE = CLng([a])
End If
End Sub

Perdona Alfonso esto que no te va ni te viene pero quiero dirigirme a otro.

EPEREZFER.- Siempre he creído que eras un retrasado mental, pero ahora, además te has convertido en un travesti con nombre artístico Martha. Y mientes muy mal.

Mira imbécil, y te lo digo con todas las letras. Gracias a Dios mis padres me pudieron pagar 3 años de estudio en la Universidad de Carolina del Norte, si, sí en USA, eso de lo que hablas, pero jamás lo has pisado ni como Martha. Te puedo garantizar que ningún estudiante de Estados Unidos se le ocurriría preguntar algo a un foro en castellano, ya que quizá tu única neurona no se ha dado cuenta, pero el lenguaje de programación es en inglés, y hay cien mil foros en ese idioma que resuelven mejor las preguntas.

¿Nos quieres hacer creer que alguien que cuatro días antes no sabía hacer un correlativo, cuatro días después habla de migrar, back end, etc.? Por quien nos has tomado. Sólo un tonto como tú creería que nos lo tragaríamos.?

No sé cuantas respuestas llevas, vamos a suponer que mil. En ninguna de ellas nadie, absolutamente nadie te cita como "gran maestro", y ahora resulta que a una persona a la que sólo le has respondido una pregunta te lo llama así.

Eres tan tonto, que no te das cuenta que cualquier lingüista te diría que la sintaxis y construcción de oraciones son exactamente igual que las tuyas.

Efectivamente, no me considero un experto, nadie lo es pues siempre estamos aprendiendo, pero autotitularte como experto tú, me parece de una soberbia inaudita teniendo en cuenta que te limitas a copiar funciones que encuentras en internet.

Esto era un foro donde todos nos llevábamos muy bien hasta que apareciste tú, y tu insaciable necesidad de que la gente visite tus patéticas páginas de Youtube.

Eperezfer( o martha, como quiera que te llames), no respondo a retrasados mentales como tu.

Respuesta
3

Esto es para el ignorante JULIAN GONZÁLEZ debe ser más respetuoso y no utilizar una pregunta de una persona decente para insultar. Se refiere a que me hago pasar por Martha, miente grandemente, Pues qué pena le robaron la plata de la universidad y deje que Martha opine es problema de ella, ahora, le duele porque respondo sobre PostgreSQL, apréndalo para que no se sienta aislado cuando pregunten sobre este servidor de datos. No sea insolente y mal educado regrese a su universidad "Carolina del Norte" y complemente sus estudios.

Alfonso en la respuesta que le dan ¿Qué pasa si elimina un registro?, por ejemplo, en el ejemplo que le dan si elimina el IDE=3 se va a repetir el último. Con la siguiente función puede obtener el siguiente.

Tengo la siguiente Tabla

Function siguiente(Optional lafecha As Date)
  Dim strSQl As String
  Dim rs As Recordset
  Dim anio As Integer
  If CLng(lafecha) = 0 Then
    lafecha = Year(Date)
  End If
  strSQl = "SELECT Last(Reporte_tabla.txtNo_Informe) AS ultimo" & vbCrLf
  strSQl = strSQl & "           , Mid([ultimo],4,4) AS cons" & vbCrLf
  strSQl = strSQl & "           , ""CC/"" & Format(Nz([cons])+1,""0000"") & ""/"" & Year(Date()) AS sigte" & vbCrLf
  strSQl = strSQl & "        FROM Reporte_tabla" & vbCrLf
  strSQl = strSQl & "       WHERE Right([txtNo_Informe],4)=" & Year(Date) & vbCrLf
  strSQl = strSQl & "    ORDER BY Last(Reporte_tabla.txtNo_Informe);"
 Set rs = CurrentDb.OpenRecordset(strSQl)
 siguiente = rs!sigte
 rs.Close
 Set rs = Nothing
End Function

Por ejemplo, llame la función, así:

Me.txtNo_Informe=siguiente()

Obtengo CC/0890/2022

Ahora voy a retirar el registro IDE=3

LLamo nuevamente la función

Me.txtNo_Informe=siguiente()

Y obtengo CC/0890/2022

Si fuera contando obtendría CC/0002/2022

Y esto sin ir a la universidad "Carolina del Norte" pero si a la "Universidad Nacional de Colombia".

Gracias por responderme a mi correo y aceptar mi solución, creo que era la mejor alternativa por lo expuesto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas