Factuurnummer genereren op jaar en nummer

Status
Niet open voor verdere reacties.

jvandervliet

Gebruiker
Lid geworden
23 mrt 2006
Berichten
234
Beste mensen,

In mijn factuurdatabase wil ik de factuurnummer genereren op basis van jaar en op een volgende nummer. Voorbeeld: 20171001, 20171002, 20171003, 20181001, 20181002, 20181003 enz.

Hoe ga ik dat doen?
 
Met een aparte functie. Die je vervolgens als standaardwaarde instelt op je formulier bij het veld Factuurnummer.
Code:
Function FactuurNummer() As String
Dim strSQL As String, sWaarde As String, iWaarde As Double

    strSQL = "SELECT TOP 1 Factuurnummer FROM tFacturen ORDER BY Factuurnummer DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If Not .BOF And Not .EOF Then sWaarde = !FactuurNummer.Value
        .Close
    End With
    If sWaarde & "" = "" Then GoTo GeenNummer
    iWaarde = CDbl(sWaarde)
    sWaarde = Left(iWaarde, 4)
    If sWaarde = CStr(Year(Date)) Then
        FactuurNummer = CStr(iWaarde + 1)
    Else
        FactuurNummer = CStr(Year(Date) & "001")
    End If
    Exit Function
    
GeenNummer:
    FactuurNummer = CStr(Year(Date) & "001")

End Function
Die standaardwaarde krijgt dus deze formule: =FactuurNummer()
 
Heb ik al gezegd: de formule zet je in de standaardwaarde van het veld op je formulier. <Eigenschappen>, tabblad <Gegevens>. De functie kun je in een willekeurige module zetten. Of je maakt een nieuwe module als je die nog niet hebt. Dat laatste had ik inderdaad nog niet gezegd :)
 
Een simpele fout; een functie mag nooit dezelfde naam hebben als een module. Ik noem objecten altijd generiek met een voorvoegsel. Dus een tabel noem ik altijd tblFactuur, of tFactuur, een formulier frmFactuur of fFactuur, een module modFuncties, of modDivers etc. en een functie als ik niet lui ben funFactuurNummer, maar soms dus (meestal) bij de naam. Dus FactuurNummer. Jij hebt twee keer Factuurnummer. Verder gaat de functie nog fout op de tabelbnaam, die bij jou Factuur heet en bij mij tFactuur.
 
Waarschijnlijk gebruik je geen tekstveld voor het factuurnummer, maar ik kijk het wel even na.
 
Het was zelfs simpeler, want de veldinstellingen stonden in beginsel goed. Al is een veldlengte van 255 tekens voor een factuurnummer in mijn optiek lichtjes overdreven; volgens mij moet je een factuurnummer binnen de 95 tekens kunnen houden :). Nee, 10 tekens lijkt mij genoeg. EIgenlijk al 8, want er zitten er maar 7 in je factuurcode (jaar = 4 + 3 volgnummer). Maar goed, het probleem is dus dat je al twee testfactuurtjes hebt zonder nummer. De code kan dan niks ophalen. Hij kijkt alleen naar de beginsituatie (=geen records). Daarna gaat de functie er vanuit dat er minstens één factuurnummer te halen is.
 
Dus moet ik alleen bij de eerste factuur zelf een factuurnummer invoeren? Dat lijkt me niet praktisch.
 
Dat is ook niet praktisch en is ook niet nodig. Zoals ik al zei: de functie gaat er vanuit dat er geen records zijn als je begint. Bij het eerste record wordt dan het eerste nummer gegenereerd. Zijn er wél records, dan wordt het hoogste nummer gepakt en op basis daarvan wordt het volgende nummer bepaald. In jouw voorbeeld is die situatie niet van toepassing: je hebt al twee records in de tabel staan, maar ze hebben geen van beide een nummer. Dat genereert dus een fout. Dat kun je oplossen door ze even handmatig een nummer te geven, of de (ongetwijfeld als test bedoelde) records te verwijderen. Als de tabel leeg is, gaat het weer goed.
 
Ik snap niet wat je bedoelt; ik heb het voorbeeldje uitgepakt, ik start de database, maak een nieuw record en krijg keurig het juiste volgnummer. Wel had je in de tabel twee keer 2017002 gebruikt, en twee keer 2017003 en dat kan alleen als je handmatig nummers invoert/plakt. Ik zou, om dat te voorkomen, dus in ieder geval een unieke index leggen op Factuurnummer want dubbele nummers mag natuurlijk niet. Maar de functie werkt als een zonnetje :)
 
Wat ik gedaan heb is alles leeg gehaald en nieuwe facturen gemaakt. nog hetzelfde resultaat.
 
Laatst bewerkt:
Ik krijg hem toch echt niet; alle records verwijderd in je db en formulier geopend, Staat het eerste nummer er netjes in de goede opmaak in.
 

Bijlagen

  • Factuur.zip
    229,8 KB · Weergaven: 67
Als je in de stapmodus werkt, kun je zien waar hij ongeveer de teil in gaat. Maar doet de db het verder wel goed? Ik moet steeds, als jij een nieuwe versie post, allerlei bibliotheken verwijderen die ontbreken. En dat levert doorgaans al gelijk allerlei niet-terzake doende foutmeldingen op.
 
Kan daar niet achterkomen. Geeft geen foutmeldingen. Waar ik ook onderbrekingspunten maak, wordt alleen het onderbrekingspunt aangewezen. DB Werkt verder uitstekend. Zou het niet kunnen komen doordat ik met een gesplitst formulier werk. Ik zie onderaan als ik een nieuwe factuur aanmaak en ik selecteer een klant dat de volgende record al hetzelfde factuurnummer krijgt als waar ik mee bezig ben.
 
Laatst bewerkt:
Als dat zo is, zou hij bij mij ook niet werken. En dat doet hij wel. Maar wat doe je dan precies als je een onderbrekingspunt hebt gezet? Als het goed is stopt de code daar dus, en kun je met <F5> de volgende stappen doorlopen, en controleren of de juiste stappen worden gedaan met de juiste waarden. Volgens mij doe je dat nog niet.
 
Dat heb ik dus wel gedaan, maar kan nog steeds niet goed peilen waar het probleem zit. Welke Office versie gebruik jij?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan