Cómo crear un campo nº factura a posteriori en access

Tengo que hacer a posteriori un supuesto de facturas de los últimos cinco años en ACCESS, para ello tengo un campo nº (numérico) un campo fecha_factura y datos factura... Mi pregunta es si existe la posibilidad de enumerar la factura según el año que figura en fecha_factura

Ejemplo

Factura 1 de 01-01-2014 que lo convierta a nº fra: 2014-1

Factura 2 de 02-01-2014 que lo convierta a nº fra: 2014-2

Factura 1 de 30-03-2015 que lo convierta a nº fra: 2015-1

Factura 2 de 30-4-2015 que lo convierta a nº fra: 2015-2

Pero si ahora introdujese en fecha factura 03-01-2014 el formulario automáticamente sepa que me toca la 3 de 2014 es decir que convierta a nº fra: 2014-3

2 respuestas

Respuesta
1

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.

Respuesta

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 cómo podría arreglarlo?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas