Creëren van unieke volgnummers

Status
Niet open voor verdere reacties.

De Vrije Vogel

Gebruiker
Lid geworden
8 apr 2006
Berichten
95
Hallo,
Wie kan mij helpen.
Tijdens de ontvangst van goederen wil ik unieke volgnummers creëren, waarvan ik labels kan printen.
En deze volgnummers worden ook opgeslagen in een aparte tabel.

Het volgnummer moet bestaan uit:
LotId dit wordt gegenereerd met de ontvangst (= huidige formulier) en wordt opgeslagen in tblReceipt.
- dit teken voor de duidelijkheid
Totaal aantal ontvangen Bins van die zending (LotId) deze gegevens kan ik met een query uit de tabel stblReceiptBinBrand halen. Waarom met een query: Aan het huidige formulier hangt een subform: er worden verschillende soorten Bins ontvangen en per soort worden de aantallen geregistreerd.
- dit teken voor de duidelijkheid
De 1ste letter van de BinType dit betekent dat er in de zending de volgnummers van elkaar afwijken. Zie onder voor een voorbeeld.
Deze gegevens haal ik uit de tabel stblReceiptBinBrand.
- dit teken voor de duidelijkheid
Het aantal per BinType ook deze gegevens haal ik uit de tabel stblReceiptBinBrand. Ook hier kunnen de volgnummers van elkaar afwijken.
- dit teken voor de duidelijkheid
Volgnummer gesorteerd op BinType van 1 tot Totaal aantal ontvangen Bins van die zending (LotId).
Voorbeeld van het volgnummer: 1456-60-W-20-1 t/m 20 en 1456-60-P-35-21 t/m 55 en 1456-60-B-5-56 t/m 60

Door op het formulier een knop te plaatsen, wil ik deze actie ingang zetten.
Generen n.a.v. de ingevoerde gegevens de te printen labels en deze unieke volgnummers opslaan in de tabel tblBinPool.

Mijn dank :thumb: is zoals altijd groot.

Grtz,
Matt
 
Dit:
- dit teken voor de duidelijkheid
maakte dat ik je vraag 3 keer moest overlezen voordat ik doorhad dat het vermoedelijk niks te betekenen heeft, of wellicht een scheidingsteken dat je in het volgnummer wilt hebben? Ik weet het nog steeds niet...
Maar hoe je het volgnummer wilt opbouwen is mij ook nog steeds niet duidelijk. Dus daar heeft de regel niet toe bijgedragen. Je voorbeeldje is denk ik nog niet eens goed ook, als ik hier naar kijk: 1456-60-W-20-1 t/m 20. Daar zou ik dit van maken: 1456-60-W-20-01 t/m 1456-60-W-20-20. Dus altijd 2 cijfers gebruiken voor het laatste getal. Anders valt er niet goed te sorteren. op het nummer.
Dit soort volgnummers is alleen te genereren met een functie. En die kan ik zo uit het hoofd zonder de db niet maken. Maar een idee dat je kunt gebruiken is iets als dit:
Code:
Function VolgNummer() As String
Dim sVeld As String, sTabel As String, sWaarde As String, strSQL As String
Dim arr As Variant
Dim Nummer As Integer, Jaar As Integer
Dim rst As ADODB.Recordset
Dim cnConn As ADODB.Connection
    sVeld = "[offertenummer]"            'Hier het veld dat je gebruikt voor het volgnummer.
    sTabel = "[tbl_offerte]"          'Hier de tabelnaam waar het volgnummer in staat.
    strSQL = "SELECT TOP 1 " & sVeld & " FROM " & sTabel & " WHERE (" & sVeld & " Is Not Null) ORDER BY " & sVeld & " DESC"
    Set cnConn = CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open strSQL, cnConn, adOpenKeyset, adLockOptimistic, adCmdText
    With rst
        If Not .BOF And Not .EOF Then sWaarde = .Fields(0).Value
        .Close
    End With
    If sWaarde & "" = "" Then GoTo GeenNummer
    arr = Split(sWaarde, "-")
    Jaar = CInt(arr(0))
    If Jaar = Year(Date) Then
        Nummer = CInt(arr(1)) + 1
    Else
        Nummer = 1
    End If
    VolgNummer = Jaar & Format(Nummer, "-000")
    Exit Function
    
GeenNummer:
    VolgNummer = Year(Date) & "-001"

End Function
 
Hallo Michel,
Allereerst bedankt voor je weer snelle reactie.
De dash (-) is inderdaad bedoeld als scheidingsteken en ik had beter het voorbeeld van de volgnummers moeten omschrijven, zoals jij aangaf.
Ik ga het morgen proberen met je suggestie en kom er bij je op terug. Of dat het is gelukt of dat ik toch meer hulp nodig hen. Ik zal de db (stukje ervan) dan meesturen.
Grtz,
Matt
 
Hallo Michel,
Het lukt mij niet om er iets van te maken.
Ik heb een bestandje gemaakt met de tabellen en het formulier.
De volgnummers wil ik in de tabel tblBinId opslaan.
Graag je hulp, maar vergeet niet om weekend te houden.
Grtz,
Matt
 

Bijlagen

Zal ik doen :).
 
Hallo Michel,
Al een idee of het mogelijk is. En ben ik duidelijk genoeg geweest?
Grtz,
Matt
 
Ik heb er al wel naar gekeken, maar weer neergelegd geloof ik. Ik pak 'm weer op :).
 
Hallo Michel,
Al iets bekend of het wel of niet kan.
En als het kan, hoe dan?
Of ben je nog in carnavalsstemming??????????
 
Carnaval? Wat is dat? Nee, dat is het probleem niet :). Wat dan wel? je opmerking
De volgnummers wil ik in de tabel tblBinId opslaan.
Geen van je formulieren is namelijk op die tabel gebaseerd, dus je bent me daar een beetje kwijtgeraakt. De functie zelf maken is niet zo moeilijk, al heeft je tabel geen records die gebruikt kunnen worden. Dus dat zou ook al een beetje helpen, als je voorbeeldje wat testdata zou bevatten. Maar een functie voor volgnummers gebruik je op een formulier en dat is dan weer gebaseerd op de tabel waarin de gegevens worden opgeslagen.
 
Hallo Michel,
Ik heb de testbase nog even doorgelopen.
Maar bij mij werkt alles.
Openen via de macro [mcr_frmReceiving].
Krijg een nieuw record, vul hier de gegevens in.
Worden opgeslagen in de juiste tabellen, alleen de tabel [tblBinID] waar de volgnummers in moeten is niet gevuld.
M.,a.w. wat mis je?
Grtz,
Matt
 
Gegevens? Je wilt een specifiek nummer genereren, en je hebt geen formulier dat is gebaseerd op de tabel tblBinID. Dus ik heb geen idee hoe je dat denkt te doen. Maar
Krijg een nieuw record, vul hier de gegevens in.
HelpMij is geen typcursus, en ik ben geen datatypist :). Ga dus geen gegevens inkloppen waarvan ik niet weet wat de bedoeling is.
 
Creatie van volgnummers versie 2

Hallo Michel,

Waarschijnlijk had ik het niet helemaal begrepen, daarom een 2de poging.

Ik heb het bestand opnieuw toegevoegd, maar met enkele aanpassingen.
Ook heb ik wat extra data toegevoegd.

Daarbij enkele queries gemaakt, met als laatste de qryVolgnrStep2.
In het 1ste veld [VolgnrStep2] staat de samenvoeging van de benodigde velden, met als scheidingsteken het dash-teken.
Maar hoe krijg je hier nu het laatste deel van het volgnummer bij?
Waarbij per [LotId] het laatste deel van 1ste volgnummer in de reeks begint met 01 en de laatste in de reeks gelijk is aan de waarde in veld [VolgnrP2].
Wanneer dan, volgens mijn bescheiden mening, de sortering op veld [LotId] en [VolgnrP3] loopt, zou volgorde goed moeten gaan.
Wanneer ik hiervan een Toevoegquery maak, zouden de gegevens in tblBinId worden opgeslagen. En vandaar uit geprint kunnen worden.

Ik hoop dat je hier beter mee uit de voeten kunt.
Wederom bedankt voor je hulp.

Matt
 

Bijlagen

Laatst bewerkt:
Zal er vanavond een blik op werpen!
 
Veel te druk geweest, maar ik kijk er vandaag wel even naar. Eerste tip: je 'formule' gebruikt nu de naam van de query in de velden. Nergens voor nodig, en nodeloos ingewikkeld. Dit werkt ook:
Code:
VolgnrStep2: [LotId] & "-" & [VolgnrP2] & "-" & [VolgnrP3] & "-" & [VolgnrP4] & "-"
 
Volgende tip: je hele queryboom kun je terugbrengen tot één query:
Code:
SELECT [LotId] & "-" & [VolgnrP2] & "-" & [VolgnrP3] & "-" & [VolgnrP4] & "-" AS VolgnrStep2, stblReceiving.LotID, 
DSum("[QTYBinSort]","stblReceiving","[LotID]=" & [LotID]) AS VolgnrP2, 
UCase(Left([BinType],1)) AS VolgnrP3, Sum(stblReceiving.QTYBinSort) AS VolgnrP4
FROM stblReceiving
GROUP BY stblReceiving.LotID, UCase(Left([BinType],1));
De functie is dan uiteraard de volgende stap, die maakt dan gebruik van de opgeslagen waarde die je nu nog niet hebt.
 
Laatste vraag is nog: wat moet er met het volgnummer gebeuren? En op welk moment moet het worden aangemaakt? Nog zoiets: de sequentie is nu afhankelijk van waarden in het veld [QTYBinSort], en dat maakt het een beetje tricky. Een beetje volgnummer is namelijk gebaseerd op onafhankelijke gegevens, dus alleen van zichzelf eigenlijk. Bij jou kunnen de aantallen veranderen, en dan zou ook het volgnummer moeten veranderen lijkt mij. Dus opslaan in een tabel is dan een beetje zinloos.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan