Personalizar orden numérico para un sistema de facturación

Estoy trabajando en una BD i necesitaría saber como puedo hacerlo para que un campo de una tabla tenga una secuencia numérica correlativa sin usar el tipo de campo Autonumérico.

Osea. El número de factura seria año el cual nos encontramos-F001. Vendría a tener este aspecto.

2017-F001

La idea seria que se fuera incrementando cada registro +1 y que cuando cambie el año volvemos a empezar con el año nuevo y des de F001 otra vez.

Yo estaba pensando en algo así: [Fecha(,, aaaa)-F001]+1 pero al cambiar de año no funcionaria!

Entiendo que esta fórmula la pondría en Valor predeterminado

1 Respuesta

Respuesta
2

Mon: Este código que te cito a Continuación está inspirado en uno de Neckkito.

En su Web, encontrará otros ejemplo que te pueden abrir el abanico de posibilidades.

http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/todos 

El extracto que te comento Es:

Private Sub Form_Current()
'Necesitamos declarar 3 Variables
Dim vAutonum As Variant, vUltimo As Variant
Dim vAño As Long
'Le damos a la variable >> vAño el valor del año actual
vAño = Right(Year(Date), 2)
'Cogemos el valor del campo AutoaaGxxxxx
vAutonum = Me.AutoaaGxxxxx.Value
'Si vAutonum no es nulo, es porque ya hay valor en él, entonces salimos del procedimiento
If Not IsNull(vAutonum) Then Exit Sub
'vUltimo es igual al máximo de los 5 últimos caracteres de la derecha del campo AutoaaGxxxxx y cuyo año sea igual al actual
vUltimo = Right(DMax("AutoaaGxxxxx", "TblAutoaa-xxxxx", "Left(AutoaaGxxxxx, 2)=" & vAño), 5)
'Si vUltimo es nulo, es porque no hay ningún AutoaaGxxxxx, entonces le damos valor 0
If IsNull(vUltimo) Then
        vUltimo = 0
End If
'Sumamos 1 al valor anterior
vUltimo = vUltimo + 1
Me.Correlativo = vUltimo
Me.AutoaaGxxxxx = vAño & "-" & Format(vUltimo, "00000")
End Sub

Como puedes apreciar has de ponerlo en el Form_Current, Al actulizar Registro de tu Formulario.

Mis saludos >> Jacinto

¡Gracias! Jacinto.

Voy a probar de hacerlo pero mil gracias por contestar

Hola Jacinto;

Creo que funciona todo bien menos una cosa que quería preguntarte:

Al final de todo pones Me.Correlativo = vUltimo.

¿Correlativo a que se refiere?

Tampoco he entendido mucho esta sentencia aunque creo que funcionará correctamente.

 vUltimo = Right(DMax("Numero_factura", "factura", "Left(Numero_factura, 2)=" & vAño), 5)

Muchísimas gracias por contestarme.

Mon: Para comenzar>>

Correlativo es un TextBox del Formulario, que solo tiene caracter informativo, y que corresponde como ves al "Ultimo" número adjudicado. Sin convertir a Cadena de Texto

La sentencia que comentas: Tomando los nombres que citas

Numero_Factura Campo de tipo Texto en la tabla "Factura" y que en la traducción del Código, también tienes que tener como "Control" en el Formulario

Para lo siguiente: vUltimo como variable, puede tomar un valor numérico o un valor de Texto >> Declarada como tipo Variant

VUltimo >> Pasado a literales, le decimos >> que lo haga = a los cinco(5) dígitos de la derecha, del máximo valor que encuentre en el Campo "Numero_Factura", siendo los dos dígitos de la Izquierda iguales al año actual (Variable vAño) . Si tienes dudas me comentas. Saludos >> Jacinto

Se me ha olvidado comentarte, que el resultado de Numero_Factura será >>

17-00001; 17-00002.... y si quieres 2017-F001; 2017-F002....debes cambiar el 2 por un 4 y el 5 por un 3, y el Resultado final por: Me.AutoaaGxxxxx = vAño & "-F" & Format(vUltimo, "000")

No creo olvidarme nada. Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas