Καλημέρα στην παρέα
Βασίλη, στην επισυναπτόμενη ΒΔ, ο Τάσος (Διαχειριστής) και εγώ, επιχειρήσαμε μια προσέγγιση του ζητούμενου.
Για τον υπολογισμό της μείωσης των αδειών εφαρμόζονται 3 τρόποι:
1. Το ερώτημα «qryForm1» παίρνει τα απαιτούμενα στοιχεία από τη φόρμα «Form1».
Συνεπώς για να λειτουργήσει, η φόρμα πρέπει να είναι ανοιχτή.
2. Το ερώτημα «qryContitions» παίρνει τα απαιτούμενα στοιχεία από τον πίνακα «Contitions».
Συνεπώς για να λειτουργήσει, δεν απαιτείται να είναι ανοιχτή κάποια φόρμα.
Στις παραπάνω περιπτώσεις, δεν επιτρέπονται null τιμές στα πεδία που συμμετέχουν στις συνθήκες.
Επίσης οι αριθμοί, που ορίζουν τα διαστήματα στα οποία κατατάσσονται οι άδειες, θα πρέπει να είναι διαφορετικοί και σε φθίνουσα σειρά.
3. Το ερώτημα «qryVBA» παίρνει τα απαιτούμενα στοιχεία από τη συνάρτηση «Reduce()», που φαίνεται παρακάτω:
Κώδικας:
Public Function Reduce(X As Variant) As Variant
Dim i As Long, varCont As Variant
Dim blnExit As Boolean, varMinus As Variant
'==========================================
'Οι αριθμοί στις συνθήκες είναι διαφορετικοί
'καιταξινομημένοι κατά φθίνουσα σειρά
varCont = Array(100, 50, 20, 10)
'Οι αντίστοιχες τιμές μείωσης
varMinus = Array(10, 8, 6, 3)
'==========================================
If Not IsNumeric(X) Then blnExit = True
If UBound(varCont) <> UBound(varMinus) Then blnExit = True
For i = 0 To UBound(varCont) - 1
If varCont(i) <= varCont(i + 1) Then
blnExit = True
Exit For
End If
Next
If Not blnExit Then
For i = 0 To UBound(varCont)
If X >= varCont(i) Then Exit For
Next
If i > UBound(varCont) Then
Reduce = 0
Else
Reduce = varMinus(i)
End If
End If
End Function
Επειδή στη μέθοδο αυτή γίνεται καλύτερος χειρισμός των δεδομένων και επειδή εύκολα μπορεί να αφαιρεθούν ή να προστεθούν συνθήκες, θεωρείται καλύτερη.
Φιλικά/Γιώργος