automatische offerte/ factuurnummering

Status
Niet open voor verdere reacties.

gangstalaz

Gebruiker
Lid geworden
13 sep 2010
Berichten
131
Hallo,

Ik heb net een offerte en een factuurdatabase gemaakt. Deze werken nu gelukkig prima.
Aan beide zou ik graag een automatische offerte/factuurnummering willen toevoegen. Bij offerte zou ik het als volgt willen hebben "jaarmaand001" en bij factuur als volgt "Fjaarmaand001".

Ik heb voor beide een veld gemaakt voor de nummering maar wat voor code heb ik dan nodig om dit automatisch te kunnen laten lopen?

Hierbij mijn database:
Bekijk bijlage Offerte database.part01.rar
Bekijk bijlage Offerte database.part02.rar
Bekijk bijlage Offerte database.part03.rar

Alvast bedankt!
 
Daar zul je een functie voor moeten gebruiken, want dat kan natuurlijk niet zomaar berekend worden. Omdat ik alleen 2003 op het werk kan openen, hier een functie waarmee je wat kan stoeien.
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 = "[Veldnaam]"            'Hier het veld dat je gebruikt voor het volgnummer.
    sTabel = "[Tabelnaam]"          '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
Ik zou zelf nooit jouw format gebruiken, want dat is nogal lastig te verwerken. Zelf gebruik ik dus varianten waarbij de nummerelementen worden gescheiden. De functie is daar ook op gebaseerd, zoals je ziet. In mijn geval gebruik ik ene koppelteken, dat door de SPLIT functie wordt gebruikt om de nummerdelen ( in dit geval een jaartal en een nummer) te splitsen. Op basis daarvan wordt ofwel een nieuw jaar gebruikt, en het nummer verhoogd. De functie is heel simpel uit te breiden met een maand. Je zou dan 2013-07-001 krijgen als nummer. Of met een F ervoor als je facturen wilt.
Je kiest dus voor een veel moeilijkere oplossing, dus ik zou zeggen: stoei er zelf even mee. Of kies de handige oplossing :)
 
Bedankt voor je reactie octafish!

Ik snap je helemaal maar waar moet ik deze code dan plaatsen? Bij het tabblad "gebeurtenis"? Bij welke dan precies?
 
De functie moet in een algemene Module komen, en je gebruikt hem als standaardwaarde voor het nummerveld. Daar staat dan dus de formule: =Volgnummer().
 
ik krijg hier een foutmelding. Wat kan dit zijn?

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
[COLOR="#FF0000"]Dim rst As ADODB.Recordset[/COLOR]
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
 
Laatst bewerkt:
Dan heb je de ADO bibliotheek niet geladen, maar alleen de DAO. Die moet je dus nog aanzetten (<Extra>, <Verwijzingen>), de hoogste variant nemen, maar minstens ADO 2.8.
 
Dan heb je de ADO bibliotheek niet geladen, maar alleen de DAO. Die moet je dus nog aanzetten (<Extra>, <Verwijzingen>), de hoogste variant nemen, maar minstens ADO 2.8.
Waarom overigens een aparte tabel voor factuur en offerte? In beginsel zijn dat dezelfde gegevens, dus waarom dubbel? Ik zou in de tabel Offerte een extra veld opnemen waarin je de status bijhoudt; op die manier kan een Offerte vanzelf een factuur worden, en hou je alles in één tabel. Desnoods met een extra tabel voor de specifieke velden voor beiden. Maar de basis lijkt mij één tabel.
 
Ik heb dit gedaan via module-> extra-> verwijzingen database.jpg, maar ik krijg nog steeds een foutmelding:foutmelding.jpg
 
De DAO bibliotheek is ook niet geladen. Dus die moet je nog even aanvinken.
 
Ik krijg weer een foutmelding nadat ik microsoft dao 3.6 object library wil toevoegen:

dao.jpg

mis ik een dll bestand?
 
Geen idee waar die foutmelding vandaan komt. Ik zie wel dat je ADO Ext 2.8 en ADO 6.0 hebt geladen; ik zou de versies gelijk houden, want ik vermoed dat ze elkaar een beetje bijten. Dus ofwel alles 2.8, ofwel alles 6.
Maar Microsoft DAO 3.6 Object Library moet er zonder meer bij zitten, en aangevinkt kunnen worden. Moet je hem opzoeken, dan staat hij vermoedelijk in C:\Program Files\Common Files\Microsoft Shared\DAO.
 
Hij kan uiteraard op een andere plek staan; gooi er eens een zoekactie tegenaan. Het gaat dus om het bestand <dao360.dll>. Maar ik kan mij niet voorstellen dat hij niet bestaat; Office wordt volgens mij niet geïnstalleerd zonder.
 
Ik heb het bestand gevonden. Het zat ergens anders. Nu krijg ik het volgende melding wanneer ik DAO wil aanvinken:(

dao1.jpg
 
Die melding krijg je als de bibliotheek al aan staat. Als het niet teveel werk is, zou ik een nieuwe db aanmaken, en daar alle tabellen, queries, formulieren etc. in importeren. Dan zou a) DAO weer beschikbaar moeten zijn en b) de code moeten werken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan