Campo que se incremente con nuevo registro y reinicie con un nuevo año

Quisiera crear un campo en formulario que controle numero de oficio que se incremente y reinicie al iniciar un nuevo año y conserve los oficios generados.

Vg.

AGM/01/2016.................. AGM/300/2016

AGM/01/2017.......... 

2 Respuestas

Respuesta
3

estimado Sveinbjorn, he revisado los ejemplos  anteriores que hizo el favor de sugerir, sin embargo, adaptar los código me ha resultado complicado, por desconocer el código VBA. Soy nuevo en esto.

Te explico paso a paso:

1º/ Supondré que tienes un formulario sobre la tabla TDatos, y tienes un campo llamado "NumOficio" tanto en la tabla como en el formulario

2º/ En el evento "Al activar registro" de tu formulario (propiedades->pestaña eventos->al activar registro) le generas el siguiente código (pulsando en el botón de los 3 puntos que aparece a la derecha del evento y eligiendo "Generador de código"):

Private Sub Form_Current()

Dim vUltimo as Long

Dim vContador As String

Dim rst As DAO.Recordset
Const miSQL As String = "SELECT Mid([NumOficio],5,3) AS Expr1 FROM TDatos WHERE ((Right([NumOficio ],4)=Year(Date()))) ORDER BY Mid([NumOficio],5,3)"

If Not IsNull(Me.NumOficio) Then Exit Sub  'Si ya hay un num. oficio, sales sin hacer nada
Set rst = CurrentDb.OpenRecordset(miSQL)
'Si no devuelve registro, inicias el contador
If rst.RecordCount = 0 Then
vUltimo= 0
Else
'Si devuelve registros, coges el último
rst.MoveLast
vUltimo = rst(0)
End If
'Cierras el recordset
rst.Close
Set rst = Nothing
'Le añades uno al contador
vUltimo = vUltimo + 1
'Creas el contador
vContador =  "AGM/" & Format(vUltimo, "000") & "/" & Year(Date)
'Lo muestras en el cuadro de texto:
Me.NumOficio = vContador

End Sub

Solo has de cambiar lo que está en negrita por los nombres que tu tengas.

Un saludo.


¡Gracias!

Estimado Sveinbjorn, su ejemplo ha funcionado a la perfección.

Le agradezco mucho que se haya tomado el tiempo para ayudar a este desconocido que se encuentra hasta México.  Su apoyo es invaluable. Gracias

Me alegra que te sirviera el código. No te olvides de valorar las respuestas.

Un saludo.


Buenas tardes . Siguiendo el código que me proporcionó intente copiarlo en otra base de datos y me aparece la siguientes observación

Tienes que tener registrada la librería Microsoft DAO x.xx Object Library o Microsoft Office x.xx Access database engine Object Library

bien, que proceso realizo para registrar la librería señalada?

Perdona, daba por supuesto que sabías hacerlo...

Abre el editor de VBA (Alt+F11), y vete a Herramientas, luego a Referencias, y ahí la buscas y la marcas. ¡Ojo! Registra solo una de las dos. Los números de versión dependerán de la versión que tengas instalada

Respuesta
1

Vamos a suponer que tienes una tabla llamada Variable con los campos FechaFactura, Numfactura, etc.

Si con esa tabla creas un formulario, puedes poner en la propiedades del cuadro de texto FechaFactura, en el evento Después de actualizar

Dim a
a = (DCount("númfactura", "variable", "year([fechafactura])=year(forms!variable!fechafactura)")) + 1

Numfactura = "AGM" & "/" & Format([a], "0000") & "/" & Format(Date, "yy")

Así, una vez que hayas escrito la fecha de factura, te "contará" los registros que hay, le añade 1 y te pone el numfactura como quieres. Cuando cambie el año, como no hay registros anteriores empezará otra vez de 1.

Sr González agradezco muchísimo su apoyo.

Eh seguido su indicación, sin embargo, no logro que funcione.

Cree los campos como indica en su ejemplo. corregí el numfactura con y sin acento, igual el campo variable, pero al final  no logro que en el campo Numfactura aparezca el código.

Por favor, puede  enviarme un ejemplo. Gracias

Si me dices tu correo o me mandas un mensaje a [email protected]. Si haces esto último, en el Asunto del mensaje pon tu Alias Imer Reyes, por que si no, ni los abro.

¡Gracias! 

Sr González agradezco su tiempo. Muchas  gracias por apoyarme.  Sveinbjorn me hizo un ejemplo que funciona muy bien. Agradezco mucho tu apoyo, sin duda creo que también tu ejemplo funcionaria a la perfección.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas