Volgnummer toevoegen afhankelijk van criteria

Status
Niet open voor verdere reacties.

eurotax

Gebruiker
Lid geworden
27 feb 2007
Berichten
25
bij het toevoegen van een nieuwe record worden volgende gegevens ingegeven :

1. Datum
2. Soort

aan de hand van deze twee waarden wordt een "registratienummer" bijgevoegd aan de record :

"Soort - Jaartal - Volgnummer" (bvb. S1-2010-001)

De volgende record van de soort S1 krijgt dan bij invoer het registratienummer "S1-2010-002" enz...
In 2011 of met een andere soort begint de nummering dan opnieuw.
Hoe moet ik in de database zoeken naar de hoogste volgnummer in de kolom "Registratienummer" corresponderend met het jaar en de soort?

Code:
Volgnummer = ....
Registratienummer = Format(Me.Soort) & "-" & Format(Me.Datum, "yyyy") &"-" Volgnummer
 
Je moet de vraag eigenlijk anders stellen: je wilt, vermoed ik, automatisch het goede nummer automatisch verhogen als je een nieuw record toevoegt. En dan bij voorkeur vanuit een formulier, want op basis van een query wordt het al heel lastig...
 
De bedoeling is dat vanaf dat in een invulformulier het veld "Soort" of "Datum" gewijzigd wordt, dan wordt het registratienummer gegenereerd en nadien met de rest van de gegevens opgeslagen.

Als er reeds registratienummers zijn met de vermelding S1-2010-xxx waarbij xxx als hoogste waarde bvb 010 heeft dan zou de nieuwe 011 als achtervoegsel moeten krijgen.
 
Omdat de hele techniek een beetje lastig uit is te leggen, heb ik maar even een voorbeeldje gemaakt. Hierbij wordt op basis van een keuze in de keuzelijst een volgnummer gegenereerd, waarna je het record kunt opslaan.
Omdat deze techniek niet goed werkt op een formulier dat aan een tabel hangt, is het een niet-gebonden formulier. Het 'voorbewerkte' record wordt daarom met een Toevoegquery aan de tabel toegevoegd, met een extra check om te voorkomen dat je een record dubbel toevoegt. Wat overigens ook niet zou kunnen in het voorbeeld, omdat RecordID ook een sleutelveld is. Kijk maar eensof je er wat mee kunt...
 
Een eigen volgnummer maken gaat eigenlijk best simpel.

Je wilt een eigen volgnummer maken gebaseerd op 2 velden (Soort en Datum) uit een tabel gevolgd door een nummer.
In jouw geval heeft het volgnummer het format van XX-yyyy-000
Dat gaat vrij eenvoudig door in die tabel, voor het veld 'volgnummer', de maximale waarde van de 'laatste 3 cijfers' op te zoeken die voldoen aan een bepaalde 'XX-yyyy'.

Als je uitgaat van een tabel "tblMijnTabel" en de velden "Volgnummer", "Soort" en "Datum", en een formulier met dezelfde veldnamen, dan krijg je als code:
DMax("val(right$(volgnummer,3))", "tblMijnTabel", "left$(Volgnummer,7)='" & Me!Soort & "-" & Format$(Me!Datum,"yyyy") & "'")
Die maximale waarde moet je daarna verhogen met 1

Hoe pas je dat nu toe ?
Maak een functie die het volgnummer berekent adhv de hier boven beschreven maximale waarde, en bedenk daarbij dat de functie DMax bij geen resultaat een 'null' waarde teruggeeft, dus daarvoor moet je de Nz functie toepassen.

Code:
Function fVolgnummer()
    Dim iTel                  As Integer
    Dim sVast     As String

    sVast = Me!Soort & "-" & Format$(Me!Datum, "yyyy")
    iTel = Nz(DMax("Val(right$(Volgnummer,3))", "tblMijnTabel", "left$(Volgnummer,7)='" & sVast & "'"), 0) + 1
    Me!Volgnummer = sVast & "-" & Right$("000" & CStr(iTel), 3)
End Function

Deze functie kun je toepassen in zowel gebonden als ongebonden formulieren
 
Bedankt voor de oplossingen, uiteindelijk voor de oplossing van Harry gegaan. Werkt perfect.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan