Volgnummer toekennnen - bijv. TC1600001

Status
Niet open voor verdere reacties.

jhdw

Gebruiker
Lid geworden
15 dec 2012
Berichten
166
Goedenavond,

Voor de zoveelste keer doe ik weer een beroep op de kennis van de experts die op dit forum behulpzaam zijn.

Ik heb nu een vraag over volgnummers. Het volgnummer zou er zo uit moeten zien: TC1600001
Dit nummer moet dan oplopen en in 2017 beginnen met TC1700001.

Voor de duidelijkheid voeg ik een voorbeeldbestand toe met data. In dit voorbeeld staat het nummer dus verkeerd.

Alle hulp is welkom.

Alvast bedankt

Gr. Jan
 

Bijlagen

  • Registraties.zip
    88,4 KB · Weergaven: 60
Ik snap niet helemaal wat je bedoelt; ik zie nergens een veld waar dat serienummer dan in deze opmaak zou moeten komen. En dan heb ik het uiteraard over de tabel...
 
Ik zie wel in je db dat je een functie van mij hebt gebouwd die je nummer zou moeten genereren. Volgens mij moet die iets anders:
Code:
Function VolgNummer(Veld As String, Tabel As String) As String
Dim strSQL As String, sNum As String
Dim iNum As Integer

    If InStr(1, Veld, " ") > 0 And Left(Veld, 1) <> "[" Then Veld = "[" & Veld & "]"
    If InStr(1, Tabel, " ") > 0 And Left(Tabel, 1) <> "[" Then Tabel = "[" & Tabel & "]"
    
    strSQL = "SELECT TOP 1 " & sVeld & " FROM " & sTabel & " WHERE (" & sVeld & " Is Not Null) ORDER BY " & sVeld & " DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If Not .BOF And Not .EOF Then sWaarde = .Fields(0).Value
        .Close
    End With
    If sWaarde & "" = "" Then GoTo GeenNummer
    
    sNum = Left(sWaarde, 4)
    iNum = CInt(Right(sWaarde, Len(sWaarde) - 4)) + 1
    NieuwVolgNummer = sNum & Right("00000" & iNum, 5)
    Exit Function
    
GeenNummer:
    VolgNummer = "TC" & Left(Year(Date), 2) & "00001"

End Function
 
Bovenstaande functie is niet helemaal juist; zie ik in jouw situatie. Je hebt al een hoop andere nummers ingevoerd. Deze wel:
Code:
Function VolgNummer(Veld As String, Tabel As String) As String
Dim strSQL As String, sWaarde As String, sNum As String
Dim iNum As Long

    If InStr(1, Veld, " ") > 0 And Left(Veld, 1) <> "[" Then Veld = "[" & Veld & "]"
    If InStr(1, Tabel, " ") > 0 And Left(Tabel, 1) <> "[" Then Tabel = "[" & Tabel & "]"
    strSQL = "SELECT TOP 1 " & Veld & " FROM " & Tabel _
        & " WHERE (" & Veld & " Is Not Null AND Left(" & Veld & ",2) = ""TC"") ORDER BY " & Veld & " DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If Not .BOF And Not .EOF Then sWaarde = .Fields(0).Value
        .Close
    End With
    If sWaarde & "" = "" Then GoTo GeenNummer
    
    sNum = Left(sWaarde, 4)
    iNum = CLng(Right(sWaarde, Len(sWaarde) - 4)) + 1
    VolgNummer = UCase(sNum) & Right("00000" & iNum, 5)
    Exit Function
    
GeenNummer:
    VolgNummer = "TC" & Left(Year(Date), 2) & "00001"

End Function
 
Goedenavond Octafish,

Ik zie dat je al geantwoord had, super bedankt.
Het nummer wordt met de vernieuwde functie wel goed aangemaakt. Alleen het nummer wordt niet bij het laatst toegevoegde record gezet maar bij een nieuw record dat er niet is.
Om een nieuw record toe te voegen uit de beschikbare systemen kies ik dus achereenvolgens een model, serienummer (mits op voorraad - anders in de test een ander model kiezen), dealer, Pickbon (willekeurig nummer) en verzenddatum. Dan op Opslaan klikken en de levering is geregistreerd en is toegevoegd aan de detaillijst. In het veld "Volgnr" zou dan het volgnummer moeten komen.
Zie de schermafdruk voor de duidelijkheid.

Ik zal wel iets over het hoofd zien maar ik weet niet wat.
 

Bijlagen

  • Schermafdruk.JPG
    Schermafdruk.JPG
    71,1 KB · Weergaven: 62
Dit type volgnummer móet juist bij een nieuw record worden aangemaakt en de functie doet dat ook automatisch. Een knop <Opslaan> is ongeveer net zo nuttig (want overbodig) als een bord "Niet overheen lopen" bij de Noordzee... Records worden automatisch opgeslagen, dus laat die knop maar zitten :).
 
Goedenavond Octafish,

Bedankt voor de hulp, het is gelukt.:thumb:
Ik heb de functie iets aangepast: het aantal tekens was achteraf toch iets te lang en het nummer begon met TC20... ipv met TC16...
De volgende regel aangepast: VolgNummer = "TC" & Mid(Year(Date), 3) & "0001"

Onder de knop "Opslaan" heb ik de volgende code hangen:

Code:
        With Me
            If (.kzl_model) = vbNullString Or (.kzl_serienummer) = vbNullString Or (.kzl_dealer) = vbNullString Or (.txt_pickbon) = vbNullString Or (.txt_datum) = vbNullString Then
                Call MsgBox("Je hebt niet alle velden ingevuld!", vbExclamation, Application.Name)
                    If (.kzl_model) = vbNullString Then
                        .kzl_model.SetFocus
                    ElseIf (.kzl_serienummer) = vbNullString Then
                        .kzl_serienummer.SetFocus
                    ElseIf (.kzl_dealer) = vbNullString Then
                        .kzl_dealer.SetFocus
                    ElseIf (.txt_pickbon) = vbNullString Then
                        .txt_pickbon.SetFocus
                    ElseIf (.txt_datum) = vbNullString Then
                        .txt_datum.SetFocus
                End If
            End If
            
            If Not (.kzl_model) = vbNullString And Not (.kzl_serienummer) = vbNullString And Not (.kzl_dealer) = vbNullString And Not (.txt_pickbon) = vbNullString And Not (.txt_datum) = vbNullString Then
                DoCmd.SetWarnings False
                DoCmd.RunSQL "INSERT INTO tbl_topcon_serienummers_dealers ( ID_model, ID_Serienummer, ID_dealer, Pickbon, Afleverdatum, Equipment ) values ( " & Me.kzl_model & ", '" & Me.kzl_serienummer & "' , " & Me.kzl_dealer & " , '" & Me.txt_pickbon & "', '" & Me.txt_datum & "', '" & Me.txt_volgnrs & "');"
                DoCmd.SetWarnings False
                .Requery
                .kzl_dealer = ""
                .kzl_model = ""
                .kzl_serienummer = ""
                .kzl_zoek_serienr = ""
                .txt_datum = ""
                .txt_pickbon = ""
                .kzl_model.SetFocus
            End If
        End With

Het is ook al in de productie omgeving.
Voor mij is de vraag opgelost.

Gr. Jan
 
In je code zet je SetWarnings niet terug op True. Je weet dat je jezelf daarmee allerlei ellende op de hals haalt?
 
Goedenavond Octafish,

Bedankt voor de oplettendheid, ik weet dat het zo niet goed is en dat je set warnings altijd weer op true moet zetten.
Soms ben je zo druk met iets dat de je de simpele dingen over het hoofd ziet.

Ik ga het morgen aanpassen op het werk.

Gr Jan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan