Letter toevoegen aan jaar nummer combinatie

Status
Niet open voor verdere reacties.

jo geuens

Gebruiker
Lid geworden
13 feb 2010
Berichten
190
hallo, ik zou een letter willen toevoegen aan volgende combinatie 2015-0001 hier zou ik de letter F willen voor hebben
ik gebruikt nu deze

Code:
Dim Jaar As Integer
Dim Hoogste As String, tmp As Variant
If Me.NewRecord Then
    Jaar = Year(Date)
    Hoogste = Nz(DMax("FactuurnummerId", "tblFacturen", "Left(FactuurnummerId,4)=" & Jaar), 0)
    tmp = Split(Hoogste, "-")
    If CInt(tmp(UBound(tmp))) = 0 Then
      Me.Factuurnummerid = Jaar & "-0001"
    Else
      If CInt(tmp(LBound(tmp))) = Jaar And CInt(tmp(UBound(tmp))) = 9999 Then
         MsgBox "Er zijn geen vrije nummers meer", vbCritical, "Nummers op"
         cancel = True
      Else
        Hoogste = CInt(tmp(UBound(tmp))) + 1
         Me.Factuurnummerid = Jaar & "-" & Right("0000" & Hoogste, 4)
      End If
    End If
    Me.Refresh
 
Die kan je er dan toch gewoon voor plakken?
Code:
Dim Jaar As Integer
Dim Hoogste As String, tmp As Variant
If Me.NewRecord Then
    Jaar = Year(Date)
    Hoogste = Nz(DMax("FactuurnummerId", "tblFacturen", "Left(FactuurnummerId,4)=" & Jaar), 0)
    tmp = Split(Hoogste, "-")
    If CInt(tmp(UBound(tmp))) = 0 Then
      Me.Factuurnummerid = "F" & Jaar & "-0001"
    Else
      If CInt(tmp(LBound(tmp))) = Jaar And CInt(tmp(UBound(tmp))) = 9999 Then
         MsgBox "Er zijn geen vrije nummers meer", vbCritical, "Nummers op"
         cancel = True
      Else
        Hoogste = CInt(tmp(UBound(tmp))) + 1
         Me.Factuurnummerid = "F" & Jaar & "-" & Right("0000" & Hoogste, 4)
      End If
    End If
    Me.Refresh
 
Laatst bewerkt:
hoi

toch te snel geweest bij het maken van een nieuw record krijg ik een fout of volgende regel
Code:
Naam.BackColor = QBColor(15)
Dim Jaar As Integer
Dim Hoogste As String, tmp As Variant
If Me.NewRecord Then
    Jaar = Year(Date)
    [COLOR="#FF0000"]Hoogste = Nz(DMax("FactuurnummerId", "tblFacturen", "Left(FactuurnummerId,4)=" & Jaar), 0)[/COLOR]
    tmp = Split(Hoogste, "-")
    If CInt(tmp(UBound(tmp))) = 0 Then
      Me.Factuurnummerid = "F" & Jaar & "-0001"
    Else
      If CInt(tmp(LBound(tmp))) = Jaar And CInt(tmp(UBound(tmp))) = 9999 Then
         MsgBox "Er zijn geen vrije nummers meer", vbCritical, "Nummers op"
         cancel = True
      Else
        Hoogste = CInt(tmp(UBound(tmp))) + 1
         Me.Factuurnummerid = "F" & Jaar & "-" & Right("0000" & Hoogste, 4)
      End If
    End If
    Me.Refresh
 
Logisch, want de constructie van het nummer is nu anders, die F staat er nu immers voor. Je zal dus Left(FactuurnummerId,4) in die regel er zodanig op moeten aanpassen dat deze niet meer de eerste 4 linker posities pakt maar positie 2 t/m 5.

Dit dus:
Mid(FactuurnummerId, 2, 4)
 
Laatst bewerkt:
jo

aangepast nu de volgende fout nu

fout.png

dan volgende regel aangepast
Code:
Hoogste = Nz(DMax("FactuurnummerId", "tblFacturen", "Left(FactuurnummerId,2,4)=""F" & Jaar), 0)

maar dan deze fout

fout2.png


bij
Code:
Hoogste = Nz(DMax("FactuurnummerId", "tblFacturen", "Mid(FactuurnummerId,2,4)=" & Jaar), 0)


fout op volgende regel If CInt(tmp(LBound(tmp))) = Jaar And CInt(tmp(UBound(tmp))) = 9999 Then
 
Laatst bewerkt:
Je hebt ook niet gedaan wat ik schreef.

En dit kan natuurlijk nooit:
"Left(FactuurnummerId,2,4)=""F"
 
Laatst bewerkt:
jo

had het al gezien maar op de regel waar gekeken word of er nog vrije nummers zijn zit nu nog een fout

Code:
If CInt(tmp(LBound(tmp))) = Jaar And CInt(tmp(UBound(tmp))) = 9999 Then
          MsgBox "Er zijn geen vrije nummers meer", vbCritical, "Nummers op"
          cancel = True
 
Welke melding krijg je dan? En heb je al naar de inhoud van de array tmp gekeken?
 
Code:
Sub M_snb()
  If Me.NewRecord Then
    sn = Split(Nz(DMax("FactuurnummerId", "tblFacturen", "Left(FactuurnummerId,4)=" & Year(Date)), 0), "-")
      
    If UBound(sn) = 9999 Then
      MsgBox "Er zijn geen vrije nummers meer", vbCritical, "Nummers op"
      Cancel = True
    Else
      Me.Factuurnummerid = Year(Date) & "-F" & UBound(sn) + 1
    End If
    Me.Refresh
  End If
End Sub
 
jo

krijg bij deze een andere foutmelding

"ubound" er word een matrix verwacht
 
Deze vraag is in het Access forum een redelijk succes nummer, met (bijna altijd) dezelfde oplossing die perfect werkt. Ook jouw variant (Letter+jaartal+nummer) had je daar kunnen vinden. Ziet er voor jou dus zo uit:
Code:
Function VolgNummerJo() As String
Dim Jaar As Integer, Num As Integer
Dim strSQL As String
Dim tmp As Variant
Dim rs As Recordset

    strSQL = "SELECT Top 1 [FactuurnummerId] FROM [tblFacturen] WHERE Mid([FactuurnummerId], 2, 4)=" _
        & Year(Date) & " ORDER BY [FactuurnummerId] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            tmp = Split(Replace(.Fields(0), "F", ""), "-")
            Jaar = tmp(LBound(tmp))
            If Jaar = Year(Date) And tmp(UBound(tmp)) = 9999 Then
               MsgBox "Er zijn geen vrije nummers meer", vbCritical, "Nummers op"
               Exit Function
            Else
                Num = tmp(UBound(tmp)) + 1
                VolgNummerJo = "F" & Jaar & "-" & Right("0000" & Num, 4)
            End If
        Else
            VolgNummerJo = "F" & Year(Date) & "-0001"
        End If
    End With

End Function
En niet moeilijk doen met checken of je op een nieuw record staat, gewoon als Standaardwaarde gebruiken voor het nummerveld met =VolgNummerJo()
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan