Crear una numeración de facturas a través de dos tablas de trabajo

Dispongo de una tabla llamada: FACTURASCLIENTES que se van insertando facturas con las ventas realizadas.

La Tabla: PEDIDOSCLIENTES tiene dos Campos destinados a recoger las Facturas Emitidas de aquellos Pedidos que son Facturados:

FechaFactura - NumeroFactura

Hay otra Tabla llamada: CONTADORFACTURAS que es la encargada de dar el numero a los Pedidos que van a ser Facturados.

Han de llevar esta serie de Numeración:

ST21001 -> Serie - Año - NumeroOrden

Estoy utilizando estos pasos:

Dim SECUENCIA As String
Dim SECUENCIAFINAL As String

SECUENCIA = (DCount("[NumeroFac]", "CONTADORFACTURAS", "[NumeroFac] like '" & Format(Date, "yy") & "*'")) + 1
SECUENCIAFINAL = "ST" & Format(Date, "yy") & Format(SECUENCIA, "0000")

Una vez que es recogido el Numero de Factura correspondiente, este ha de pasar y actualizar la Tabla: CONTADORFACTURAS para que el siguiente Numero de Factura sea correlativo.

La tabla CONTADORFACTURAS esta formada por los Campos:

IdTabla -> Autonumérico

NumeroFac -> Texto=8

No se donde esta el error pero no me avanza el Contador de las Facturas.

3 Respuestas

Respuesta
2

Estoy totalmente de acuerdo con la ultima respuesta de Jacinto.

Complemento la respuesta de Jacinto con esta función:

Reemplace el campo texto por la función, algo como:

If Me.NewRecord then

  Me.campoTexto=secuencia

CurrentDb.Execute "INSERT INTO CONTADORFACTURAS (NumeroFac) VALUES ('" & Me.campoTexto  & "')"

No he podido contestar antes a tu respuesta.

He colocado esto con un botón para comprobar que funcionaba y ver el avance del Contador y no me avanza el Numerador de las Facturas:

He hecho una adaptación con la Tabla: PEDIDOSCABECERA colocando un Campo: FacturaSustitutiva que es el que recoge el Numerador de Facturas.

Dim STRSERIE As String
Dim STPERIODO As String
Dim STRNUMERA As String
Dim Secuencia As String

STRSERIE = "ST"
STRPERIODO = Right(Date, 2)
STRNUMERA = Val(Right(Nz(DMax("[FacturaSustitutiva]", "PEDIDOSCABECERA", "Mid([FacturaSustitutiva],3,2)='" & STPERIODO & "'"), 0), 4)) + 1

If STRNUMERA = "" Then
Secuencia = STRSERIE & STPERIODO & "0001"
Else
Secuencia = STRSERIE & STRPERIODO + Format(STRNUMERA, "0000")
End If

Me.FacturaSustitutiva = Secuencia
Me.FechaSustitutiva = Date
Me.FacturaSustitutiva.Visible = True
Me.FechaSustitutiva.Visible = True

Me parece raro, si quiere envíeme la tabla o tablas a [email protected].

Respuesta
1

Bote pronto: Dim Secuencia As Integer o (Long)

DCount por DMax

Saludos >>JTJ

De otro lado, ese LIKE, cuando el NumeroFac "contenga" el numero derecho del año >> Problemas.

Analizo un poco más y si no lo resuelves comentamos. Saludos >> JTJ

Jobe: Para completar tu proceso>> Quizá y sin que sirva de precedente, en éste caso y con el criterio que te cito el DCount funciona. He añadido varios Registros sin problemas.

Private Sub BtnAñadeUno_Click()
Dim Secuencia As Long
Dim SecuenciaFinal As String
Secuencia = Nz(DCount("[NumeroFac]", "CONTADORFACTURAS", "Mid([NumeroFac],3,2)= '" & Format(Date, "yy") & "'"), 0) + 1
SecuenciaFinal = "ST" & Format(Date, "yy") & Format(Secuencia, "0000")
CurrentDb.Execute "INSERT INTO CONTADORFACTURAS (NumeroFac) VALUES ('" & SecuenciaFinal & "')"
End Sub

He supuesto un Botón BtnAñadeUno, pero puedes usar otro Evento en tu Aplicación. Saludos >> JTJ

Jobe: He leído la respuesta de Julián (un saludo) y lleva razón en que si borramos registros de forma accidental o intencionada, habrá problemas con el DCount.

Para evitarlos, sustituye si quieres la línea de Secuencia, por ésta otra:

Secuencia = Val(Right(Nz(DMax("[NumeroFac]", "CONTADORFACTURAS", "Mid([NumeroFac],3,2)= '" & Format(Date, "yy") & "'"), 0), 4)) + 1

Saludos a los dos >> JTJ

Respuesta
1

Jobe, después de la instrucción de Dmax( que es la correcta, no Dcount) tienes que ponerle algo como

docmd.runsql"insert into contadorfacturas(numerofac)values(secuenciafinal)"

Y si no quieres que te aparezca la maldita ventanita de "Va a... antes de todo pon

Docmd.setwarnings False

Si usas Dcount, imagínate que tienes cuatro registros, por tanto el último tendría( para abreviar) un numfactura=4. Si por la razón que sea, voluntariamente, error, etc eliminas uno, cuando vayas a escribir un nuevo registro, él cuenta y dice hay 3, le sumo 1 y por tanto ese nuevo registro tendría como Numfactura el 4 otra vez, y tendrías dos facturas con el mismo número. Mientras que si usas DMax, mira y dice ¿Cuál es el máximo? 4, por tanto al sumarle 1, le pone 5.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas