Numerar registros de una tabla según un campo especifico

tengo una tabla FACTURAS con los campos id_Cliente, Tipo_fc, Numero_fc

El campo Numero_fc esta en blanco y quisiera poder numerarlo mediante un procedimiento según las facturas sean de un tipo u otro (en el ejemplo son A o B). La idea es llamar este procedimiento desde con un evento click.

1 respuesta

Respuesta
1

Supongo que el correlativo es de cinco cifras, del modo:

A0001, A0002...

B0001, B0002 ...

El código sería:

'Declaramos las variables:
Dim db As Database

Dim rs1 As Recordset

Dim rs2 As Recordset

Dim rs3 As Recordset

Dim vCorr As Integer
Set db = CurrentDb
'Vemos los tipos de factura que puede haber
Set rs1 = db.OpenRecordset("Select TipoFc from Facturas group by TipoFc")

'Recorremos el recordset:
Do While Not rs1.EOF
'Vemos el máximo para el tipo de factura
Set rs2 = db.OpenRecordset("Select Max(NumeroFc) as MáxNumFc from Facturas where TipoFc='" & rs1!TipoFc & "'")
'Si existe, el correlativo será este máximo más 1, si no existe será 1
If IsNull(rs2!MáxNumFc) = False Then
vCorr = Val(Right(rs2!MáxNumFc, 4)) + 1
Else
vCorr = 1
End If
'Vemos, para actualizarlos, los registros de ese tipo de factura que no tienen número de factura
Set rs3 = db.OpenRecordset("Select NumeroFc from Facturas where NumeroFc is null and TipoFc='" & rs1!TipoFc & "'")
Do While Not rs3.EOF
rs3.Edit

rs3!NumeroFc = rs1!TipoFc & String(4 - Len(Trim(Str(vCorr))), "0") & Trim(Str(vCorr)) rs3.Update

vCorr = vCorr + 1

rs3.MoveNext

Loop
rs1.MoveNext

Loop

Muchas gracias Angeles!!! Es excelente lo que me pasaste!!!

Lo adapte a mi base de datos y logre reducir el proceso de facturación, ya que antes lo hacia para cada tipo de factura y numeraba, con tu aporte, agrupo por tipo y numero los distintos grupos en un solo proceso.

Es genial y no tiene precio lo que hacen expertos como vos por principiantes como nosotros. me gusta mucho access y hace un tiempo estoy intentando y logrando de a poco automatizar mis aplicaciones.

Gracias de nuevo!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas