Nummering waarbij KlantID de hoogste waarde bepaald in de nummering

Status
Niet open voor verdere reacties.

Rene71

Gebruiker
Lid geworden
2 aug 2012
Berichten
133
ik weet niet of het mogelijk is en hoe het te maken

voor een nog op te zetten voorraad systeem willen we een nummering
die kijkt naar het gekozen KantID en daar dan kijkt naar de hoogste waarde +1

het idee is
bij nieuw record
kies een Klant
rotatienummer Hoogste waarde (klantID-volgnummer) +1
rotatienummer is dan een cleutelveld

klantID 60 rotatienummer 60-0001 (klantID-volgnummer is dan rotatienummer)
klantID 60 rotatienummer 60-0002
klantID 60 rotatienummer 60-0003
enz
klantID 55 rotatienummer 55-0001
klantID 55 rotatienummer 55-0002
enz
klantID 30 rotatienummer 30-0001

klantID 55 rotatienummer 55-0003

weet iemand een voorbeeld of uileg
 
Rene,

Ik vermoed dat je met het rotatienummer een ordernummer bedoeld.
Mij lijkt een niet doorlopend ordernummer een probleem omdat je nooit zeker kan zijn dat je volledig bent met je orders.
Dit is de reden waarom de meeste systemen een doorlopend ordernummer hebben eventueel vooraf gegaan door een jaartal.
In een order tabel staat dan naast het ordernummer ook de klant ID en een datum vermeld waardoor je met een query
redelijk simpel alle ordernummers van een klant kan zien.
Ik raad je aan om de opbouw van het ordernummer (of rotatienummer) te herzien.

Veel Succes.
 
Het is niet zo moeilijk om een functie te maken die het hoogste nummer op basis van de klantID opzoekt, en daar een volgend nummer voor te maken. Dus je kunt prima met de huidige constructie werken. Een simpele functie ziet er zo uit:
Code:
Function NieuwVolgNummer(KlantNr As Integer) As String
Dim strSQL As String, sNum As String
Dim tmp As Variant

strSQL = "SELECT Top 1 [[B][COLOR="#0000FF"]Rotatienummer[/COLOR][/B]] FROM [[B][COLOR="#0000FF"]Rotaties[/COLOR][/B]] "
strSQL = strSQL & "WHERE [KlantID] =" & Me.KlantID & " Order By [Rotatienummer] Desc"

With CurrentDb.OpenRecordset(strSQL)
    If .RecordCount > 0 Then
        tmp = Split(.Fields(0), "-")
        sNum = Right("0000" & CInt(tmp(UBound(tmp))) + 1, 4)
        NieuwVolgNummer = tmp(LBound(tmp)) & "-" & sNum
    Else
        NieuwVolgNummer = tmp(LBound(tmp)) & "-0001"
    End If
End With
    
End Function
Ik weet uiteraard de naam van je tabel en veld niet, dus die moet je nog even aanpassen.
 
Bedankt Michel

ik ga het bestuderen
heb ik het dan goed dat ik NieuwVolgNummer plaats bij Na Bijwerken van het veld KlantID
zodat de Functie wordt uitgevoerd nadat het KlantID bekend is ?
 
Je kunt hem zelfs als standaardwaarde voor het veld Volgnummer gebruiken op je formulier; dan wordt hij automatisch gevuld bij aanmaken van een nieuw record.
 
Geweldig!

Dit wordt nu obv numerieken gedaan.

Is het mogelijk dat dit gedaan wordt als het klantID tekst is?
 
Maakt niet uit of het numeriek is of tekst. Zolang de procedure maar in staat is om een nieuw nummer te genereren.
 
ik denk dat ik het mijzelf weer te moeilijk wil maken.

Ik wil eerst uit een dropdown menu een klant kiezen, waarna hij een nieuw code moet genereren (code moet dan worden voor klant ICT: ICT001 worden, en voor klant HR: HR001)
Alleen op de een reden pakt hij dat niet.

Gewoon een opvolgend nummer genereren kan hij wel.
 
Als je naar mijn functie kijkt, zie je dat die van de functie SPLIT gebruik maakt om he nummer in het volgnummer te scheiden van het getal. Tekst kun je niet ophogen, getallen (uiteraard) wel. Je moet dus het getal scheiden van de tekst. In jouw opmaak kan dat niet, want je hebt geen scheidingsteken. Wat nog erger is: de lengte van je voorloopcode wisselt. Je kunt dus ook niet zeggen: pak de eerste 2 tekens want dat is de tekst, en gebruik de rest voor het nummer want dat is het getal. Je zult dus je opmaak moeten veranderen, of een andere functie gebruiken die er voor zorgt dat je wél het getal kunt uitlezen. Persoonlijk zou ik gaan voor een uniforme layout, want dit:
Code:
ICT001 
ICT002
HR001
ICT003 
HR002
HR003
ICT004
ziet er toch niet uit? Maak er dan dit van:

Code:
ICT001 
ICT002
HRS001
ICT003 
HRS002
HRS003
ICT004

Dan kun je de code wél netjes uitsplitsen. Of dit:
Code:
ICT001 
ICT-002
HR-001
ICT-003 
HR-002
HR-003
ICT-004
Dat ziet er nog steeds niet uit, maar de functie werkt tenminste weer :)
 
Krijg het niet voor elkaar :(

Heb het vermoeden dat het te maken heeft met de volgorde van invullen.

Ik heb hem ingepakt, wellicht dat het dan wat duidelijker wordt.

Bekijk bijlage data.zip
 
Laatst bewerkt:
Je maakte een paar foutjes. Om te beginnen: het tekstveld
Code:
 moet wel aan het veld [Code] worden gekoppeld, anders heb je geen code in je tabel. Je hebt daar nu de functie staan, maar dat kan dus niet.
Verder zou je de functie wellicht als standaardwaarde willen gebruiken voor het veld, maar dat kan óók niet, want op het moment dat je een nieuw record maakt is er nog geen divisie gekozen, en kan de functie dus geen nummer genereren. Je  kunt dat dus pas doen bij de <Bij klikken> gebeurtenis van de keuzelijst Divisie. Maar dan werkt de functie verder wel, als je de laatste foutjes er uit haalt. Zie bijlage :).
Oh ja: de nummerstijl moet je ook in de tabel nog aanpassen.
 

Bijlagen

Top het werkt!

Begin het inmiddels ook steeds meer te begrijpen!
Dank je wel!!
 
Da' waar ook, heb ik door de drukte gemist. Heb je ongelooflijk gemazzeld, want had ik het gezien, had je geen antwoord gehad ;). Althans: niet in dit topic. Regie weer terug naar René!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan