U pauzi za kafu sam uspeo da poradim nesto. Treba proveriti i testirati.
Promenio sam naziv f-je pa se tako f-ja zove ObracunajKrajOdmora()
Ulazne vrednosti su:
1. datum pocetka odmora (String / Date)
2. broj radnih dana odmora (Integer)
3. da li se vraca datum kraja odmora ili datum pocetka rada (Boolean)
Tackom 3. imate reseno i jednu i drugu varijantu ja se nadam... koliko mi vreme dozvoljavalo da to brzo ispovezujem.
U nastavku deo koda tj. f-ja kao i test rezultati kada za ulaznu vrednost br. 3 stavljeno 3.1. da se vraca datum pocetka rada i 3.2. da se vraca datum kraja odmora.
U prilogu treba da je i MS Access verzija - posto uvek zaboravim da prilozim...
Dodato na vasu form-u u MS Access, checkbox kontrola koja predstavlja vrednost za tacku 3. i cija se vrednost koristi kao 3. ulazni parametar f-je. Podrazumevana vrednost (default value) za checkbox kontrolu je postavljena na 1.
Ubaceno je jedno test dugme koje poziva f-ja, test radi zbog checkbox vrednosti i provere na formi za unete vrednosti.
Kod f-je:
Code:
Function ObracunajKrajOdmora(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer, Optional ByVal VratiPrviRadniDan As Boolean = True) As String
Dim BrojRadnihDanaUNedelji As Integer
Dim BrojNedelja As Integer
Dim UkupanBrojDanaOdmora As Integer
Dim Ostatak As Integer
Dim r As String
' Broj radnih dana u nedelji Pon - Pet - 5
BrojRadnihDanaUNedelji = 5
UkupanBrojDanaOdmora = BrojDanaOdmora
If BrojDanaOdmora > BrojRadnihDanaUNedelji Then
UkupanBrojDanaOdmora = 0
' Broj nedelja
BrojNedelja = BrojDanaOdmora \ BrojRadnihDanaUNedelji
Ostatak = BrojDanaOdmora Mod BrojRadnihDanaUNedelji
If VratiPrviRadniDan = False Then Ostatak = Ostatak - 1
' Ukupan broj
UkupanBrojDanaOdmora = (BrojNedelja * 7) + Ostatak
Else
If VratiPrviRadniDan = False Then UkupanBrojDanaOdmora = UkupanBrojDanaOdmora - 1
End If
r = CDate(PocetakOdmora) + UkupanBrojDanaOdmora
If VratiPrviRadniDan = True Then
' Koji je dan u nedelji kao integer vrednost
nDan = CInt(DatePart("w", r, vbUseSystemDayOfWeek, vbUseSystem))
' Ako je dan vikend (subota ili nedelja) onda
If nDan > 5 Then
' Ako je subota
If nDan = 6 Then r = DateAdd("d", 2, r)
' Ako je nedelja
If nDan = 7 Then r = DateAdd("d", 1, r)
End If
End If
Debug.Print "PocetakOdmora: "; PocetakOdmora, "BrojDanaOdmora: "; BrojDanaOdmora, "BrojNedelja: "; BrojNedelja, "Ostatak: "; Ostatak, "UkupanBrojDanaOdmora: "; UkupanBrojDanaOdmora, r, IIf(VratiPrviRadniDan, "Prvi radni dan", "Kraj odmora")
' Povratna vrednost
ObracunajKrajOdmora = r
End Function
Povratne vrednost f-je
Code:
3.1. DATUM POCETKA RADA NAKON ODMORA - PRVI RADNI DAN
----------------------------------------------------------------------------
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 1 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 1 11/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 2 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 2 12/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 3 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 3 13/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 4 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 4 14/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 5 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 5 17/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 6 BrojNedelja: 1 Ostatak: 1 UkupanBrojDanaOdmora: 8 18/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 7 BrojNedelja: 1 Ostatak: 2 UkupanBrojDanaOdmora: 9 19/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 9 BrojNedelja: 1 Ostatak: 4 UkupanBrojDanaOdmora: 11 21/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 10 BrojNedelja: 2 Ostatak: 0 UkupanBrojDanaOdmora: 14 24/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 11 BrojNedelja: 2 Ostatak: 1 UkupanBrojDanaOdmora: 15 25/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 12 BrojNedelja: 2 Ostatak: 2 UkupanBrojDanaOdmora: 16 26/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 13 BrojNedelja: 2 Ostatak: 3 UkupanBrojDanaOdmora: 17 27/09/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 15 BrojNedelja: 3 Ostatak: 0 UkupanBrojDanaOdmora: 21 01/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 20 BrojNedelja: 4 Ostatak: 0 UkupanBrojDanaOdmora: 28 08/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 21 BrojNedelja: 4 Ostatak: 1 UkupanBrojDanaOdmora: 29 09/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 23 BrojNedelja: 4 Ostatak: 3 UkupanBrojDanaOdmora: 31 11/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 26 BrojNedelja: 5 Ostatak: 1 UkupanBrojDanaOdmora: 36 16/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 30 BrojNedelja: 6 Ostatak: 0 UkupanBrojDanaOdmora: 42 22/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 31 BrojNedelja: 6 Ostatak: 1 UkupanBrojDanaOdmora: 43 23/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 34 BrojNedelja: 6 Ostatak: 4 UkupanBrojDanaOdmora: 46 26/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 35 BrojNedelja: 7 Ostatak: 0 UkupanBrojDanaOdmora: 49 29/10/2018 Prvi radni dan
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 36 BrojNedelja: 7 Ostatak: 1 UkupanBrojDanaOdmora: 50 30/10/2018 Prvi radni dan
3.2. DATUM KRAJA ODMORA
----------------------------------------------------------------------------
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 1 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 0 10/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 2 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 1 11/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 3 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 2 12/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 4 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 3 13/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 5 BrojNedelja: 0 Ostatak: 0 UkupanBrojDanaOdmora: 4 14/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 6 BrojNedelja: 1 Ostatak: 0 UkupanBrojDanaOdmora: 7 17/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 7 BrojNedelja: 1 Ostatak: 1 UkupanBrojDanaOdmora: 8 18/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 9 BrojNedelja: 1 Ostatak: 3 UkupanBrojDanaOdmora: 10 20/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 10 BrojNedelja: 2 Ostatak: -1 UkupanBrojDanaOdmora: 13 23/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 11 BrojNedelja: 2 Ostatak: 0 UkupanBrojDanaOdmora: 14 24/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 12 BrojNedelja: 2 Ostatak: 1 UkupanBrojDanaOdmora: 15 25/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 13 BrojNedelja: 2 Ostatak: 2 UkupanBrojDanaOdmora: 16 26/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 15 BrojNedelja: 3 Ostatak: -1 UkupanBrojDanaOdmora: 20 30/09/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 20 BrojNedelja: 4 Ostatak: -1 UkupanBrojDanaOdmora: 27 07/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 21 BrojNedelja: 4 Ostatak: 0 UkupanBrojDanaOdmora: 28 08/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 23 BrojNedelja: 4 Ostatak: 2 UkupanBrojDanaOdmora: 30 10/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 26 BrojNedelja: 5 Ostatak: 0 UkupanBrojDanaOdmora: 35 15/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 30 BrojNedelja: 6 Ostatak: -1 UkupanBrojDanaOdmora: 41 21/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 31 BrojNedelja: 6 Ostatak: 0 UkupanBrojDanaOdmora: 42 22/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 34 BrojNedelja: 6 Ostatak: 3 UkupanBrojDanaOdmora: 45 25/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 35 BrojNedelja: 7 Ostatak: -1 UkupanBrojDanaOdmora: 48 28/10/2018 Kraj odmora
PocetakOdmora: 10/09/2018 BrojDanaOdmora: 36 BrojNedelja: 7 Ostatak: 0 UkupanBrojDanaOdmora: 49 29/10/2018 Kraj odmora
[Ovu poruku je menjao bokinet dana 12.09.2018. u 17:48 GMT+1]