Werktijden optellen

Status
Niet open voor verdere reacties.
Access is flexibel genoeg om dat te kunnen :)
Wat ik zelf zou doen, is een formulier maken op basis van je facturen, met daarin een doorlopend formulier van de urenbriefjes die nog geen factuurnummer hebben. Dat zijn namelijk de records die je wilt kunnen koppelen aan een nieuwe factuur. In dat Facturenformulier genereer je dan een nieuw factuurnummer, en kies je een klant. Het subformulier filtert dan de urenbriefjes op basis van de Klant. Je ziet dan dus alleen nog maar de urenbriefjes die voor die klant zijn, en nog geen factuur hebben. Met een simpele bijwerkquery (achter een knop bijvoorbeeld) vul je dan de urenbriefjes met het factuurnummer uit het hoofdformulier.
Daar zijn dan uiteraard allerlei variaties op mogelijk. Het mooist (vind ik) is één formulier voor de facturen, met dus een subformulier voor de gekoppelde diensten. Om diensten toe te voegen gebruik je dan een keuzelijst (niet met invoervak) waarin je de 'vrije' diensten van de betreffende klant (en periode) laat zien. Die selecteer je in de keuzelijst, en met een knop doe je dan hetzelfde: de records koppelen aan de factuur. En de nieuw gekoppelde records zie je dan gelijk terug in het subformulier.
 
als ik het goed begrijp:
Ik maak dus eerst een tabel [Facturen]
Kolommen:
Factuurnummer
Factuurdatum
Klantnummer

Dan een doorlopend formulier:
Velden Koptekst:
[Facturen].[Factuurnummer] (hoe genereer ik dan een nummer?)
[Facturen].[Klantnummer] (gekoppeld [Urenbriefjes].[Klantnummer])
In de details:
Alle velden uit urenbriefjes

Dan maak ik een bijwerkquery die op basis van de tabel [Facturen] een veld toevoegt aan [Urenbriefjes]

En dan natuurlijk: Kan dit allemaal automatisch?
Ik wil namelijk alleen urenbriefjes invoeren en dan op 1 knop drukken dat alle facturen van 1 maand geprint worden
 
Een redelijk eenvoudige nummerfunctie is deze:
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 & "-" & Right("0000" & Nummer, 4)
    Exit Function
    
GeenNummer:
    VolgNummer = Year(Date) & "-0001"

End Function
Deze werkt met een nummerstijl die bestaat uit een jaartal + koppelteken + a4 cijfers. Dus als je nu begint, is het eerste nummer 2013-0001. En daarna 2013-0002. Etc.
Wil je geen scheidingsteken, dan kun je de code nog steeds wel gebruiken, maar dan zul je met Left en Right moeten werken om het jaartal en het nummer te scheiden.
Deze functie gebruikt een vaste tabel, en een vast veld. Je kunt hem dus niet gebruiken om in een andere tabel nummers te genereren. Kan overigens wel met een kleine aanpassing.
In je formulier gebruik je met deze functie als standaardwaarde voor het nummerveld:
=Volgnummer()
 
Laatst bewerkt:
Eerst maar eens op vakantie, daarna buig ik me hier weer over.
Tot zo ver: Bedankt!!
 
Goed plan, ik kan de rust wel gebruiken :)
Prettige vakantie alvast!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan