datum uitsluiting bij verlofaanvraag

Status
Niet open voor verdere reacties.

Friend

Verenigingslid
Lid geworden
31 jan 2009
Berichten
1.137
Beste forummers,

Wie kan mij helpen, zou graag willen verwezenlijken dat wanneer de vakantie aanvraag valt in de uitzonderingsdata er een tekst verschijnt op het formulier.

Hartelijk dank

Friend
 

Bijlagen

Ik snap je vraag niet, of hij is niet compleet. Want wat wil je dat er gebeurt als de uitzonderingsdata in zijn geheel in de vakantie vallen bijvoorbeeld?
 
OctaFish, Michel,

Hartelijk dank voor je reactie :thumb:

Wat de bedoeling is dat of nu één of meerdere of alle vakantiedagen in de uitzonderingsdata vallen dat te allen tijde er een waarschuwing verschijnt op het formulier "frmvak"

Hoop dat ik het zo iets verduidelijkt anders hoor ik je graag weer.

Hartelijk dank

Friend
 
Maar mag je die dagen dan niet vrijnemen, of moeten de reeds uitzonderingsdagen worden afgetrokken van de vakantieperiode? Dat is nog niet duidelijk.
 
OctaFish, Michel,

Je mag die dagen niet vrij nemen.

Dus de aanvraag zal opnieuw gedaan moeten worden door de persoon.
Deze aanvraag moet dan in zijn geheel buiten de uitzonderingsdata liggen.

Friend.
 
OK. Duidelijk. Zal er even een functie voor in elkaar flanzen.
 
En hier is de uitwerking :).
 

Bijlagen

OctaFish, Michel,

Geweldig je inzet zoals altijd bewonderenswaardig :thumb:

Alleen een vraagje. Als ik intyp als 1e verlofdag 1 nov 2016 dan krijg ik ook de opmerking :
"Let op verlof in deze periode niet toegestaan!"

1 november valt niet in de uitzonderingsdata.

Doe ik iets fout?

Hoor weer graag van je.

Thanks

Friend
 
Ik heb even snel wat in elkaar geflanst, zoals je gezien hebt :). Op basis hiervan zou je de functie zelf functionerend moeten krijgen, dacht ik... maar ik zal hem morgen nog even finetunen!
 
OctaFish, Michel,

Is het nog gelukt met de "fine tuning" ?

Friend
 
Valt me tegen van je dat je het niet zelf kon :).

Code:
Private Sub begindatum_AfterUpdate()
    Me.opmerking = CheckVakantie(Me.begindatum)
End Sub

Code:
Function CheckVakantie(chkDatum As Date) As String
Dim rs As DAO.Recordset
Dim iCheck As Double

    iCheck = CDbl(chkDatum)
    Set rs = CurrentDb.OpenRecordset("SELECT [1edag], [2edag], uitzreden FROM tblUitz")
        With rs
            Do While Not .EOF
                If iCheck > CDbl(.Fields(0)) And iCheck < CDbl(.Fields(1)) Then
                    CheckVakantie = "Let op verlof in deze periode niet toegestaan! " & .Fields(2)
                    Exit Function
                End If
                .MoveNext
            Loop
        End With
End Function
 
Of, en dan kan je de eerste functie gebruiken, deze variant:
Code:
Private Sub begindatum_AfterUpdate()
Dim sOpm As String
    sOpm = CheckVakantie(Me.begindatum)
    If Not sOpm = "" Then Me.opmerking = "Let op verlof in deze periode niet toegestaan!" & vbCrLf & sOpm
End Sub
 
OctaFish, Michel,

Hartelijk dank voor de aanpassing, echter het is denk ik nog niet helemaal wat het moet wezen, ofwel het doet nog niet wat het zou moeten doen.

Bv als iemand verlof aanvraagt voor dat een uitzonderingsperiode ingaat en het verlof eindigt in de uitzonderingsperiode dan komt er geen melding:confused:
of als een verlofaanvraag de twee uitzonderingsperiodes overlapt dan krijg je ook geen melding:shocked:

Ik weet niet of het "motertje" nog fijner kan worden afgesteld?

Friend
 
Tuurlijk, maar probeer het eens zelf :). Je eerste deel van de vraag is bijvoorbeeld simpel op te lossen. De functie wordt nu alleen losgelaten op de begindatum, maar miet op de einddatum. Kwestie van dezelfde techniek dus toepassen op de einddatum, en dat probleem is opgelost. Desnoods verzin je daar een aangepaste melding voor om het helemaal mooi te maken.
Voor een complete overlap is wat meer nodig, want dan moet je en andere vergelijking maken.
 
Hallo OctaFish, Michel,

Het heeft mij even tijd gekost (tijd was schaars) en hoofdpijn (kwam vanzelf)

Maar dit zou het moeten worden, werkt tot nu toe, alleen ik weet zeker dat jouw deskundigheid dit waarschijnlijk veel compacter had gemaakt.

Ik hoor graag je aanbevelingen

Code:
Option Compare Database
Option Explicit

Public sOpmerking As String

Private Sub begindatum_AfterUpdate()
    sOpmerking = ""
    sOpmerking = sOpmerking & " " & CheckVacation(Me.begindatum)
    
    Me.opmerking = sOpmerking
End Sub

Private Sub begindatum_Enter()
    Application.RunCommand (acCmdShowDatePicker)
End Sub

Private Sub eindatum_AfterUpdate()
    
    If (begindatum.Value <> "") And (eindatum.Value <> "") Then
        Me.opmerking = CheckVacationReverse(Me.begindatum, Me.eindatum)
    Else
        sOpmerking = sOpmerking & " " & CheckVacation(Me.eindatum)
        Me.opmerking = sOpmerking
    End If
End Sub

Private Sub eindatum_Enter()
    Application.RunCommand (acCmdShowDatePicker)
End Sub

Function CheckVacation(chkDate As Date) As String
    Dim rs As DAO.Recordset
    Dim dCheckDate As Double

    dCheckDate = CDbl(chkDate)
    
    Set rs = CurrentDb.OpenRecordset("SELECT [1edag], [2edag], uitzreden FROM tblUitz")
    
    With rs
        Do While Not .EOF
            If IsBetween(dCheckDate, CDbl(.Fields(0)), CDbl(.Fields(1))) = True Then
                CheckVacation = .Fields(2)

                Exit Function
            End If
            .MoveNext
        Loop
    End With
End Function

Function CheckVacationReverse(chkStartDate As Date, chkEndDate As Date) As String
    Dim rs As DAO.Recordset
    Dim dCheckStartDate As Double
    Dim dCheckEndDate As Double
    Dim sRemark As String

    dCheckStartDate = CDbl(chkStartDate)
    dCheckEndDate = CDbl(chkEndDate)
    sRemark = ""
    
    Set rs = CurrentDb.OpenRecordset("SELECT [1edag], [2edag], uitzreden FROM tblUitz")
    
    With rs
        Do While Not .EOF
            If (IsBetween(CDbl(.Fields(0)), dCheckStartDate, dCheckEndDate) = True) Or _
                        (IsBetween(CDbl(.Fields(1)), dCheckStartDate, dCheckEndDate) = True) Then
                    sRemark = sRemark & " " & .Fields(2) & "|"
            End If
            .MoveNext
        Loop
        
        If sRemark = "" Then
            CheckVacationReverse = sRemark
        Else
            CheckVacationReverse = Left(sRemark, Len(sRemark) - 1)
        End If
    End With
End Function

Function IsBetween(dCheckDate As Double, dStartDate As Double, dEndDate As Double) As Boolean
    IsBetween = IIf(dCheckDate >= dStartDate And dCheckDate <= dEndDate, 1, 0)
End Function

Hartelijk dank

Friend
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan