OK, here is the bullsh** I've written.
Note that values (4) and table names and columns are hardcoded... eh I mean "preconfigured" ;-)
Code:
Private Function getNewNoteNumber() As String
Dim prefix As String, offset As String, off As Integer
Dim rs As Recordset
prefix = variableGet("prefix")
offset = variableGet("offset")
Set rs = CurrentDb.OpenRecordset("delivery_notes", dbOpenDynaset)
Dim num As Integer, max As Integer
Dim code As String
max = Val(offset)
If Not rs.EOF Then rs.MoveFirst
Do While Not rs.EOF
code = Nz(rs!note_number, 0)
If Len(code) > 4 Then
If Left(code, Len(code) - 4) = prefix Then
num = Val(Right(code, 4))
If num > max Then
max = num
End If
End If
End If
rs.MoveNext
Loop
max = max + 1
'convert to string
offset = max
offset = String$(4 - Len(offset), "0") & offset
getNewNoteNumber = prefix & offset
Set rs = Nothing
End Function
It works however. Now I'll consider both of your options.