Lo que pides lo tienes que hacer en dos pasos:
1º/ Actualizar, por ejemplo mediante una consulta de actualización, los números de factura existentes
2º/ Programar un código que te genere el número de factura (es un falso autonumérico"
Te explico el proceso para la primera parte:
1º/ En tu tabla necesitas crear el nuevo campo Num_Factura, para lo cual, la abres en vista diseño y lo añades, teniendo cuidado de definirlo como texto.
2º/ Creas una consulta sobre tu tabla de facturas, en vista diseño. La conviertes en una consulta de actualización. Arrastras el nuevo campo Num_Factura a la parte inferior de la consulta, y en la fila "actualizar a" le pones esta expresión (suponiendo que los campos se llamen numero, Num_Factura y fecha):
Año([Fecha]) & "-" & [Numero]
3º/ Guardas la consulta, la ejecutas una vez y voilá, ya tienes renumerados todos tus registros.
4º/ Esta consulta ya la puedes borrar, lo mismo que el campo numero.
El proceso para la segunda sería este:
1º/ Crea un formulario sobre la tabla de facturas.
2º/ Ábrelo en vista diseño y saca las propiedades de tu campo fecha (con el botón derecho del ratón)
3º/ Vete a la pestaña "Eventos", localiza la fila "Después de actualizar", y pulsa en le botón de los 3 puntos que aparece a la derecha. Selecciona "Generador de código"
4º/ En el editor de VBA que se te abre, pones este código:
'Declaracion de variables
Dim elAno As Integer
Dim elUltimo As Variant
'Si no hay número de factura
If Nz(Me.Num_Factura, "") = "" And Nz(Me.Fecha, -1) <> -1 Then
'Buscamos la última fact del año de la fecha
elAno = Year(Me.Fecha)
'Buscas el último num fact
elUltimo = DMax("Num_Factura", "TFacturas", "Year(Fecha)=" & elAno)
If IsNull(elUltimo) Then
elUltimo = 0 ' si no hay, lo inicias en 0
Else
'Si lo hay, le quitas los 5 primeros caracteres (año y guión) para quedarte con el número
elUltimo = Right(elUltimo, Len(elUltimo) - 5)
End If
elUltimo = elUltimo + 1 'Le añades uno
Me.Num_Factura = elAno & "-" & elUltimo 'Muestras el numero con el formato
End If
5º/ Guardas y listo. Yo te recomendaría, además, bloquear el campo Num_Factura para que no lo modifiques por accidente
Te adjunto un mini-ejemplo para que lo veas más claro.
Hola, muchas gracias por el ejemplo.Estoy usándolo de forma que mis facturas se componen de FA + AÑO + Secuencia, es decir FA201601 FA201602....Pero tengo un problema y es que la función de DMax al ordenar no lo hace correctamente al ser de tipo texto. ¿Sabéis como podría arreglarlo? - Marcos Sedeño