Acces, specifieke autonummering

Status
Niet open voor verdere reacties.

DVE75

Gebruiker
Lid geworden
9 okt 2005
Berichten
32
Hallo allemaal,

ik weet niet of het mogelijk is daarom wil ik het aan de experts hier voor leggen.


De autonummering van acces kun je vanaf elk getal laten beginnen die je leuk vind, tot zover geen probleem.
Nu wil ik een autonummering hebben op basis van een bepaalde productgroep en categorie hebben.
Ik heb een aantal groepen, voor het gemak groep 10, 20, 30, 40 en categorie A, B, C en D.
Als ik een nieuw artikel aanmaak zal een keuze gemaakt moeten worden in welke productgroep en categorie dit nummer moet komen.

Wat ik zou willen is dat bij het aanmaken van een nieuw artikel de productgroep en catewordt gekozen door middel van een drop-down waarin dit onderdeel valt en dan automatisch
het eerst volgende nummer hier wordt aangekoppeld.

Voorbeeld
Ik maak de keuze dat het artikel onder groep 10 en categorie B moet vallen en het eerst volgende nummer is dan 6. (er zijn al 5 artikelen in deze groep)
Het nummer zal er dan als volgt uit moeten zien, 10B06.

Is dit mogelijk?


Er zal voor de groepen en categorieën een tabel aangemaakt moeten worden.


Met vriendelijke groet en dank,

Daniel
 
Vergeet Autonummering, want dat kan daar niet mee. Je zult een eigen functie moeten maken/gebruiken die een volgnummer genereert op basis van de keuzelijsten. Gelukkig is dat niet zo heel moeilijk (meer) want jouw vraag komt regelmatig voorbij in het forum, en ik heb dus al verschillende varianten gemaakt en gepost.
Als je in het forum zoekt op de tekst 'volgnummer' dan kom je wel een paar varianten tegen. Kom je er niet uit, dan is het handig als je een bruikbaar voorbeeldje post, dan maak ik hem wel voor je. Zoals ik al zei: ik heb verschillende varianten klaar liggen :).
 
Hallo OctaFish,

Bedankt voor uw reactie

Ik heb een simpele opzet wat ik verder ga uitbreiden, de basis zeg maar.
Als u er na wilt kijken en een mij hiermee opgang wilt helpen is mij dank super groot :thumb:
Kan ik deze naar uw mailen?


Met vriendelijke groet,

Daniel
 
Zal er vandaag even naar proberen te kijken, maar ben wel druk dus je zult even geduld moeten hebben!
 
Ik heb je keuzelijsten voor het gemak maar even logische namen gegeven, want dan zie je in de code tenmiste wat wat is. Dan ziet de code er zo uit:

Code:
Private Sub cboCat_Click()
    Volgnummer
End Sub

Code:
Private Sub cboProduct_Click()
    Volgnummer
End Sub

Code:
Function Volgnummer()
Dim strSQL As String
Dim rs As DAO.Recordset
Dim sNum As String

    If Not Me.cboCat & "" = "" And Not Me.cboProduct & "" = "" Then
        strSQL = "SELECT TOP 1 Artikelnummer FROM Artikelen WHERE Left(lcase(Artikelnummer),5) = """ _
            & Me.cboProduct & Me.cboCat & """ Order By Artikelnummer DESC"
        Set rs = CurrentDb.OpenRecordset(strSQL)
        With rs
            If .RecordCount = 0 Then
                sNum = Me.cboProduct & Me.cboCat & "01"
            Else
                sNum = Me.cboProduct & Me.cboCat & Right("00" & CInt(Right(rs!Artikelnummer, 2) + 1), 2)
            End If
            .Close
        End With
        Me.Artikelnummer = sNum
    End If
End Function

De code wordt dus getriggerd door de 2 keuzelijsten, en er wordt alleen een volgnummer bepaald als beide keuzelijsten zijn ingevuld.
 
Goedemorgen OctaFish,

Super bedankt voor de tijd die je hebt vrij gemaakt om dit te doen.

Ik heb nog één kleine vraag, waar moet ik de code invoegen :eek:?


Met vriendelijke groet,

Daniel
 
Op je formulier :). De functie is autonoom, dus die kun je onderaan plakken. De eerste twee codes zijn bedoeld voor je keuzelijsten, dus daar is alleen de tweede regel (de opdrachtregel Volgnummer) van belang. Als jouw keuzelijsten een andere naam hebben, dan hoef je daar dus alleen de tweede regel in de gebeurtenis <Bij klikken> te plakken.
 
ik loop te klungelen en krijg het niet voor elkaar.
Moet eerlijk bekennen dat het een tijd geleden is dat ik met access bezig ben geweest en probeer het weer op te pakken.

Mag ik nog één beroep op jou doen om dit voor elkaar te krijgen, bij voorkeur dat je code in het voorbeeld bestandje plak.
Maar alleen als dit niet te veel moeite voor u is.

Met vriendelijke groet,

Daniel
 
Ik had het voorbeeld uiteraard al aangepast, anders had ik je de code niet kunnen geven :). Hier de werkende versie.
 

Bijlagen

  • Artikel DB.zip
    40,4 KB · Weergaven: 55
Helemaal super! :thumb::thumb:

Super bedankt


Met vriendelijke groet,

Daniel
 
Hallo OctaFish,

Nog een klein verzoekje/vraagje.

Het werkt allemaal super alleen wil ik dit nogmaals toepassen allen op basis van één opgegeven waarde.
Om dit voor elkaar te krijgen dacht ik slim te zijn door de code aan te passen en één van de gegevens te verwijderen.
Alles gegevens van cboProduct weg halen en dan hoopte ik dat het zou werken.
Helaas was de praktijk net even anders.
Het enige wat dan niet werkt is de doornummering.
Op basis van cboCat wordt wel iets aangemaakt alleen heeft het allemaal dan het zelfde volgnummer 1.
Enig idee wat ik fout doe of vergeet?

Met vriendelijke groet,

Daniel
 
Dan zou ik weer even een voorbeeldje moeten zien van wat je zou willen hebben als resultaat; het nummer komt nu uit een samengesteld nummer, en de vraag is natuurlijk of dat zo moet blijven.
 
Super dat je nog een keer mee wilt denken.

Ik heb voor het gemak de set-up van de vorige keer genomen en daar 1 groep verwijderd.
De code die jij toen hebt gemaakt staat er ook nog in alleen geeft dit nu een foutcode omdat ik 1 groep verwijderd heb.
Voor het gemak heb ik deze Artikel DB2 genoemd.

Bekijk bijlage Artikel DB2.rar
 
Als je het nummer op basis van één keuzelijst wilt genereren, moet je alle verwijzingen naar dat tweede veld verwijderen. Dat is het simpele stuk. Daarnaast moet je de nummerquery nog een beetje aanpassen, want a) je hebt nu maar 3 tekens om op te filteren en geen 5, en b) je wilt nu 4 cijfers en geen 2. De nieuwe code ziet er dan zo uit:
Code:
    If Not Me.cboCat & "" = "" Then
        If Not Me.Artikelnummer & "" = "" Then
            If MsgBox("Er is al een artikelnummer ingevoerd; wil je het artikelnummer vervangen?", vbYesNo + vbCritical + vbDefaultButton2) = vbNo Then
                Exit Function
            End If
        End If
        strSQL = "SELECT TOP 1 Artikelnummer FROM Artikelen WHERE Left(lcase(Artikelnummer),3) = """ & Me.cboCat & """ Order By Artikelnummer DESC"
        Set rs = CurrentDb.OpenRecordset(strSQL)
        With rs
            If .RecordCount = 0 Then
                sNum = Me.cboCat & "0001"
            Else
                sNum = Me.cboCat & Right("0000" & CInt(Right(!Artikelnummer, 4) + 1), 4)
            End If
            .Close
        End With
        Me.Artikelnummer = sNum
    End If
 
Nogmaals, weer super bedankt.

Ik had het iets te simpel benaderd maar met jij uitleg erbij snap ik wat ik fout had gedaan.
Het is mij helemaal duidelijk met je heldere uitleg :thumb:

Met vriendelijke groet en dank,

Daniel
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan