TF PART 1
Tabela „Reklamacje”
- ID_Sprawy (Autonumer)
- Nazwa_Klienta (Tekst)
- Data_Zgloszenia (Data/Godzina, format YYYY-MM-DD)
- Kwota (Waluta)
- Termin_Odpowiedzi (Data/Godzina, obliczane jako 35 dni roboczych od daty zgłoszenia)
- Decyzja (Tekst, tylko w formularzu edycji)
- Data_Zakonczenia (Data/Godzina, format YYYY-MM-DD)
Formularz „Rejestracja_Reklamacji”
- Pola do wprowadzenia danych (ID automatycznie)
- VBA do obliczenia „Terminu Odpowiedzi” uwzględniającego 35 dni roboczych
Formularz „Edycja_Reklamacji”
- Pobiera dane z tabeli i umożliwia edycję
Function ObliczTerminOdpowiedzi(DataZgloszenia As Date) As Date
Dim LiczbaDni As Integer
Dim DataTymczasowa As Date
DataTymczasowa = DataZgloszenia
LiczbaDni = 0
' Dodajemy 35 dni roboczych
Do While LiczbaDni < 35
DataTymczasowa = DataTymczasowa + 1
' Sprawdzamy, czy dzień nie jest sobotą (7) ani niedzielą (1)
If Weekday(DataTymczasowa, vbMonday) <= 5 Then
LiczbaDni = LiczbaDni + 1
End If
Loop
ObliczTerminOdpowiedzi = DataTymczasowa
End Function
Jak zastosować w formularzu?
- W polu „Data Zgłoszenia” (np.
txtDataZgloszenia) dodaj zdarzenie „Po aktualizacji” (AfterUpdate):
vbaKopiujEdytujPrivate Sub txtDataZgloszenia_AfterUpdate()
Me.txtTerminOdpowiedzi = ObliczTerminOdpowiedzi(Me.txtDataZgloszenia)
End Sub
Teraz, gdy użytkownik wpisze datę zgłoszenia, system automatycznie obliczy termin odpowiedzi, pomijając weekendy. 😊
Czy chcesz dodać obsługę dni świątecznych?
Powiedziałeś(-aś):
Function ObliczTerminOdpowiedzi(DataZgloszenia As Date) As Date
Dim LiczbaDni As Integer
Dim DataTymczasowa As Date
Dim Swieta() As Date
Dim i As Integer
DataTymczasowa = DataZgloszenia
LiczbaDni = 0
' Pobieramy listę świąt
Swieta = PobierzSwieta(Year(DataZgloszenia))
' Dodajemy 35 dni roboczych, pomijając weekendy i święta
Do While LiczbaDni < 35
DataTymczasowa = DataTymczasowa + 1
If Weekday(DataTymczasowa, vbMonday) <= 5 Then ' Pomija soboty i niedziele
' Sprawdzamy, czy dzień jest świętem
Dim CzySwieto As Boolean
CzySwieto = False
For i = LBound(Swieta) To UBound(Swieta)
If DataTymczasowa = Swieta(i) Then
CzySwieto = True
Exit For
End If
Next i
' Jeśli to nie święto, liczymy jako dzień roboczy
If Not CzySwieto Then
LiczbaDni = LiczbaDni + 1
End If
End If
Loop
ObliczTerminOdpowiedzi = DataTymczasowa
End Function
Function PobierzSwieta(Rok As Integer) As Date()
Dim Swieta(3) As Date
Dim Wielkanoc As Date
' Obliczanie Wielkanocy (algorytm Gaussa)
Wielkanoc = ObliczWielkanoc(Rok)
' Lista świąt
Swieta(0) = DateSerial(Rok, 1, 1) ' Nowy Rok
Swieta(1) = Wielkanoc
Swieta(2) = Wielkanoc + 1 ' Poniedziałek Wielkanocny
Swieta(3) = DateSerial(Rok, 12, 25) ' Boże Narodzenie
Swieta(4) = DateSerial(Rok, 12, 26) ' Drugi dzień świąt
PobierzSwieta = Swieta
End Function
Function ObliczWielkanoc(Rok As Integer) As Date
Dim a As Integer, b As Integer, c As Integer
Dim d As Integer, e As Integer, f As Integer
Dim g As Integer, h As Integer, i As Integer
Dim k As Integer, l As Integer, m As Integer
Dim miesiac As Integer, dzien As Integer
a = Rok Mod 19
b = Rok \ 100
c = Rok Mod 100
d = b \ 4
e = b Mod 4
f = (b + 8) \ 25
g = (b - f + 1) \ 3
h = (19 * a + b - d - g + 15) Mod 30
i = c \ 4
k = c Mod 4
l = (32 + 2 * e + 2 * i - h - k) Mod 7
m = (a + 11 * h + 22 * l) \ 451
miesiac = (h + l - 7 * m + 114) \ 31
dzien = ((h + l - 7 * m + 114) Mod 31) + 1
ObliczWielkanoc = DateSerial(Rok, miesiac, dzien)
End Function