Καλησπέρα στην παρέα
Χρήστο, αν κατάλαβα καλά, θα ήθελες μία συνάρτηση που θα υπολογίζει τις μέρες των ημιαργιών, που δε θα μετρούν σα μέρες κανονικής άδειας.
Αν υποθέσουμε ότι ένας εργαζόμενος απουσιάζει, λόγω κανονικής άδειας, από την ημερομηνία D1 μέχρι τη D2, συμπεριλαμβανομένων, για τον υπολογισμό των ημερών που θα χρεωθούν ως κανονική άδεια θα έχουμε:
- Μέρες απουσίας: Ms=D2-D1+1.
- Μέρες αργιών (γιορτών Κυριακών, κλπ): Mk.
- Μέρες ημιαργιών που θεωρούνται αργίες: Μa.
- Μέρες που χρεώνονται ως κανονική άδεια: Ms-Mk-Ma
Για τον προσδιορισμό της Ma, στηριζόμενος στα στοιχεία που έδωσες, έγραψα μία συνάρτηση, που παραθέτω παρακάτω.
Κώδικας:
Public Function ArgiesApoHmiargies(D1 As Variant, _
D2 As Variant) As Integer
Dim dte(3) As Date
Dim i As Integer, x As Integer
'Αν υπάρχουν τιμές null
If IsNull(D1) Or IsNull(D2) Then Exit Function
'Αρχική τιμή συνάρτησης
ArgiesApoHmiargies= 0
'Ημερομηνίες ημιαργιών. Αν τα έτη έναρξης και λήξης της απουσίας
'δεν είναι ίδια (πχ 2010, 2011) και στο διάστημα απουσίας που εμπίπτει
'στο μεγαλύτερο έτος (2011) υπάρχουν ημιαργίες τα αποτελέσματα δεν είναι
'σωστά. Την περίπτωση αυτή, για τις κανονικές αδειες, τη θεώρησα αδύνατη.
dte(0) = DateSerial(Year(D1), 3, 24)
dte(1) = DateSerial(Year(D1), 10, 27)
dte(2) = DateSerial(Year(D1), 12, 24)
dte(3) = DateSerial(Year(D1), 12, 31)
'1. Η άδεια είναι μικρότερη από 3 μέρες
If D2 - D1 + 1 < 3 Then Exit Function
'2. Περιέχονται δύο ημιαργίες (περιλαμβάνονται και τα όρια του διαστήματος απουσίας)
x = 0
For i = 0 To 3
If D1 <= dte(i) And dte(i) <= D2 Then x = x + 1
Next
If x > 1 Then
ArgiesApoHmiargies= 1
Exit Function
End If
'3. Η ημιαργία περιέχεται στα όρια του διαστήματος της απουσίας (χωρίς να περιλαμβάνονται)
For i = 0 To 3
If D1 < dte(i) And dte(i) < D2 Then
ArgiesApoHmiargies= 1
Exit For
End If
Next
End Function
Θα πρέπει να την αντιγράψεις και να δοκιμάσεις , όλες τις περιπτώσεις που έχεις, για να δεις αν σε καλύπτει, αλλά και για να δοκιμαστεί η ακρίβεια του κώδικα.
Φυσικά θα πρέπει να λάβεις υπόψη σου και τις εύστοχες επισημάνσεις του Ανδρέα.
Φιλικά/Γιώργος
ΥΓ Φίλε Ανδρέα καλωσόρισες στο φόρουμ .