¿Cómo numero las facturas con Nº, Año y Serie?

Tengo un programa que numera las facturas cogiendo el año e incrementando el idFactura.

202100019, 202100020, 202100021...

Lo hago así:

Dim numFactura As String
numFactura = Year(Date) & Format(Nz(DMax("right([IdFactura],5)", "tblFactura", "left([IdFactura],4)=" & Year(Date)), 0) + 1, "00000")

Bien, ¿si le quiero meter también una serie como puedo hacer para que me calcule el dmax teniendo en cuenta la Serie que tengo en el formulario?

1 Respuesta

Respuesta
3

Eloy, la verdad, no he entendido la pregunta, pero si la serie es esa que aparece arriba

202100019, 202100020, 202100021

Puedes usar la función Val que trata un texto como si fuera numérico, por ejemplo, 0015 lo "trata" como si fuera 15 con lo cual ya podrías sumarle 1 o sino, usar la funcion clng, que en esencia hace lo mismo, pero en este caso, si lo convierte.

No la serie nueva seria:

A202100019, A202100020

B202100001, B20210002

Lo que quiero es meter en el código que tenia una opción para que me calcule teniendo en cuenta la serie. No sé si es posible.

La segunda no es serie, pasa de tener cuatro ceros a tener 3 en el siguiente. Pero

¿Cuándo debe empezar con la letra A? ¿Cuándo debe empezar la letra B? Si tengo el formulario

Cuando pulso Enter, hace lo que tu tienes

Si, por ejemplo, quisieras que de la 00001 a la 00020 le pusiera una A delante, de la 00021 a la 00040 le ponga una B delante, etc tendrías que usar algo como

If nz(dcount("*","tabla1","left([numfactura],4)=year(date())")<=20 then

numfactura="A"&Year(date())......

Pero ya te digo que no consigo aclararme.

No creo que me estoy explicando bastante mal.

Yo tengo este formulario:

Lo que quiero es que cuando le cambie la serie me introduzca el nº de factura teniendo en cuenta:

1 el numero máx de esa serie

2  el año actual.

¿Ahora se entiende mejor?. Muchas gracias.

Ya lo voy entendiendo. Te lo pongo en formulario contínuo porque creo que se ve mejor.

Cuando eliges la serie te va aumentando el numfactura, independientemente de que metas otros registros en medio. Tiene en cuenta la serie y el año.

El código del evento Después de actualizar del combinado serie es

Private Sub Serie_AfterUpdate()
NumFactura = Serie & Year(Date) & Format(Nz(DMax("right([numfactura],5)", "tabla1", "mid([numfactura],2,4)=year(date()) and " _
& "left([numfactura],1)='" & Me.Serie & "'")) + 1, "00000")
End Sub

Casi, lo único es que, Serie y NumFactura son campos numéricos y ambos forman la clave principal, por lo que quería que no me metiera la letra en NumFactura, es decir, la tabla quedaría:

Serie numfactura

A                202100020

B                202100001

B                202100002

A                202100021

A                202100022

Admito que Numfactura pueda ser numérico, pero ¡ A o B numéricos !. Ya no comprendo nada. Además cuando hayas anotado 20 facturas de la serie B se repetirá el 202100020. Mira

Estoy presuponiendo(ya no lo sé) que en la serie A las facturas empiezan en el 20, y en la serie B en el 1

El código es

Private Sub Serie_AfterUpdate()
Select Case Serie
Case Is = "A"
If Nz(DCount("*", "tabla1", "serie=""A""")) = 0 Then
NumFactura = CLng(Year(Date) & "00020")
Else
NumFactura = CLng(Year(Date) & Format(Nz(DMax("right([numfactura],5)", "tabla1", "left([numfactura],4)=year(date()) and serie=""A""")) + 1, "00000"))
End If
Case Is = "B"
If Nz(DCount("*", "tabla1", "serie=""B""")) = 0 Then
NumFactura = CLng(Year(Date) & "00001")
Else
NumFactura = CLng(Year(Date) & Format(Nz(DMax("right([numfactura],5)", "tabla1", "left([numfactura],4)=year(date()) and serie=""B""")) + 1, "00000"))
End If
End Select
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas