¿Cómo hago una macro para generar un número de registro en función del año fiscal? (Acceso 2013)

¿Cómo hago una macro para generar un número de registro en función del año fiscal? (Acceso 2013)

Me gustaría crear un número de registro que se base en el año fiscal y avance automáticamente... Algo como: 2015001, 2015002, 2015003, 2015004; 2016001, 2016002, etc.

Ya tengo un campo [FiscalYr] (tipo de datos calculado) en mi tabla [Proyectos] basado en la siguiente expresión:

IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate])).  

El campo [Fecha de entrada] es un campo de fecha/hora con un valor predeterminado de Fecha(). Esto está funcionando como me gustaría.

¿Hay alguna manera de tomar ese número [FiscalYr] y ponerlo delante de un número de 3 dígitos que comienza con 001 y se incrementa en 1 según el registro anterior, con el número restableciéndose a 001 al comienzo de cada nuevo año fiscal? Nuestro año fiscal comienza el 1 de octubre y finaliza el 30 de septiembre.

Quiero que se genere el número ya sea que la información se ingrese en la tabla [Proyectos] o en el formulario [Formulario de Proyectos]. No quiero que se genere solo si se ingresa información en el formulario. Vi algunas publicaciones en línea que sugerían que la mejor manera de hacer algo como esto sería usar una macro Antes del cambio, pero la mayoría de los ejemplos que puedo encontrar basan una parte importante de su código de macro en una fecha, y ya obtuve la El problema de la fecha se resolvió (creo).

Estaría bien con una macro que creara el año fiscal a partir de [EntryDate] y creara el número al mismo tiempo, si eso es más fácil que trabajar con mi campo [FiscalYr] existente. Sólo soy un usuario ocasional de Access, así que si hablo tonterías, lo siento mucho; creo que sé lo suficiente como para ser peligroso.

Muchas gracias andrea


Actualización 9/12/2015:

He abandonado la idea macro.

Usando los consejos del blog de Scottgem (https://scottgem.wordpress.com/2009/11/25/sequential-numbering/), he podido poner en funcionamiento un sistema de numeración secuencial, pero todavía estoy luchando mucho para que el número se restablezca en 1 al comienzo de un nuevo año fiscal. No estoy seguro de si el problema es cómo estoy generando el valor de mi año fiscal o algo completamente distinto.

Esto es lo que tengo:

Nombre de la tabla: Proyectos

Dentro de Proyectos, tengo los siguientes campos relacionados con este tema:

  • ProjectNo: número - entero largo
  • Secuencia: número - entero largo
  • EntryFiscalYr: calculado - entero largo; expresión dice lo siguiente:IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
  • Fecha de entrada: fecha/hora; valor predeterminado: Fecha()

Nombre del formulario: Formulario de proyectos

Dentro de mi Formulario de Proyectos, tengo los siguientes controles:

  • Secuencia: cuadro de texto, la fuente de control es el campo Secuencia en la tabla Proyectos, configurado como no visible
  • CreateProjNo: botón, evento al hacer clic:

     Private Sub CreateProjNo_Click()
        Me.Sequence = Nz(DMax("[Sequence]", "Projects"), 0) + 1
        DoCmd.RunCommand acCmdSaveRecord
     End Sub
    
  • ProjectNo: cuadro de texto, fuente de control de datos:

     =[EntryFiscalYr] & Format([Sequence],"000")
    

Esto se muestra como me gustaría: 2016001, 2016002, etc.

Probé varias iteraciones de los códigos en el blog de Scottgem para incorporar el campo EntryFiscalYr a la declaración DMax para ver si el número de secuencia debería continuar incrementándose para el año fiscal actual o comenzar de nuevo para el nuevo año fiscal, pero ninguno de mis intentos. estan trabajando.

Yo he tratado:

 Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”,”[EntryFiscalYr]) = “ &(Me.[EntryFiscalYr])),0)+1

 Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”, ” [EntryFiscalYr] = ‘“ & Me.[EntryFiscalYr] & “’”),0)+1

También lo intenté con Me.[txtEntryFiscalYr]en lugar de Me.[EntryFiscalYr]. Ninguno de estos intentos ha funcionado.

Supongo que mis problemas podrían deberse a cómo se genera EntryFiscalYr para cada registro, pero no tengo idea de cómo solucionar esto. Lo intenté con la fecha generada por EntryDate y eso hace un gran trabajo con el año calendario, pero es importante basarlo en el año fiscal y restablecerlo al comienzo de cada nuevo año fiscal.

Además, el número de proyecto que se genera en el formulario de proyectos no se actualiza en el campo número de proyecto en la tabla de proyectos, pero tengo entendido que este es el punto. ¿Es esto correcto?

Se agradecería enormemente cualquier ayuda para que esto funcione correctamente con el año fiscal.

¡Gracias!

Respuesta1

Este es el código que finalmente elegí. Utiliza un botón dentro de mi formulario. Espero que esto ayude a otras personas que puedan estar luchando con los mismos problemas.

Private Sub CreateProjNo_Click()
Me.EntryFiscalYr = IIf(Month([EntryDate]) >= 10, Year([EntryDate]) + 1, Year([EntryDate]))
Me.Dirty = False

If IsNull(Me.Sequence) Then
Me.Sequence = Nz(DMax("[Sequence]", "Projects", "[EntryFiscalYr] = " & Me.[EntryFiscalYr]), 0) + 1
Me.Dirty = False
End If

End Sub

Para obtener más información sobre cómo llegué a esta solución, sugeriría visitar este enlace: http://answers.microsoft.com/en-us/office/forum/office_2013_release-access/access-2013-how-do-i-generate-a-record-number/22fa42e1-dd89-4683-b1d0-72b112281c1c

información relacionada