Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

popunjavanje datuma do na osnovu broja dana i datuma od

[es] :: Access :: popunjavanje datuma do na osnovu broja dana i datuma od

Strane: 1 2

[ Pregleda: 4551 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Miki2013
Sarajevo

Član broj: 313952
Poruke: 69



+2 Profil

icon popunjavanje datuma do na osnovu broja dana i datuma od10.09.2018. u 14:33 - pre 67 meseci
Pozdrav!

Zanima me da li je u MS Accessu 2003 moguce dobiti zadnji datum na osnovu prvog datuma i broja radnih dana?
Konkretno radi se o ispisu zadnjeg datuma godisnjeg odmora na osnovu pocetnog datuma i broja radnih dana.

Ta stvar radi svoj posao u Excelu fantasticno pa me zanima moze li i u MS Accessu.

npr. 10 radnih dana i pocetak 10.09.2018 = 21.09.2018.

Hvala unaprijed.
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od10.09.2018. u 16:42 - pre 67 meseci
Napravis funkciju u kojoj prosledis ulazne parametre/promenljive pocetni datum i broj dana.
U f-ji saberes datum i dane i onda proveris da li je rezultat radni dan. Ako nije onda dodajes +1 dok ne dodjes do radnog dana.


U natavku prilazem primer koda koji bi trebalo da radi u MS Access (nisam probao u njemu vec u drugom VBA editoru).
Ovo moze da se optimizuje i sredi jos. Evo brzinski primer.

Code:


Function PocetakRada(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer) As String

    Dim PrviRadniDan As String
    Dim DodajBrojDana As Integer
    Dim nDan As Integer
    
    ' Broj dana koji se dodaje na dan pocetka odmora
    DodajBrojDana = BrojDanaOdmora + 1
    
    ' Prvi radni dan je
    PrviRadniDan = CDate(PocetakOdmora) + DodajBrojDana
    
    ' Koji je dan u nedelji kao integer vrednost
    nDan = CInt(DatePart("w", PrviRadniDan, vbUseSystemDayOfWeek, vbUseSystem))
    
    ' Ako je dan vikend (subota ili nedelja) onda
    If nDan > 5 Then
        
        Debug.Print Now, "> Vikend. preracunati na prvi sledecei radni dan.", "Dan u nedelji: "; nDan
        
        ' Postavi vrednost za broj dana koji se dodaje
        DodajBrojDana = 0
        
        ' Ako je subota
        If nDan = 6 Then DodajBrojDana = 2
        
        ' Ako je nedelja
        If nDan = 7 Then DodajBrojDana = 1
        
        ' Ukupan broj dana koji se dodaje na pocetak datuma odmora
        DodajBrojDana = DodajBrojDana + BrojDanaOdmora + 1
        
        ' Prvi radni dan je
        PrviRadniDan = CDate(PocetakOdmora) + DodajBrojDana
        
    End If
    
    Debug.Print Now, "PocetakOmdora: "; PocetakOdmora, "Broj dana odmora: "; BrojDanaOdmora, "Prvi radni dan je: "; PrviRadniDan
    
    ' Povratna vrednost
    PocetakRada = PrviRadniDan

End Function



Primer koriscenja f-je

Code:


    PocetakRada "10/09/2018", 10
    PocetakRada "10/09/2018", 11
    PocetakRada "10/09/2018", 12
    PocetakRada "10/09/2018", 13
    PocetakRada "10/09/2018", 14
    
    Dim r As String
    
    r = PocetakRada("10/09/2018", 10)
    
    Debug.Print "10/09/2018", 10, r



Obratiti paznju na sistemske parametre kako su podeseni na racunaru za datum i vreme i koji se format za iste koristi.


 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 69



+2 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 08:15 - pre 67 meseci
Hvala na brzom odgovoru.
Pokusao sam to implementirati ali sam se zapetljao i nisam uspio.

Kacim konkretan primjer pa ako mozes molim te da prilagodis ovom primjeru.
Prikačeni fajlovi
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 14:30 - pre 67 meseci
Nasao sam neki MS Access i odradio primer na osnovu prilozene baze.

Prikačeni fajlovi
 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 69



+2 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 14:57 - pre 67 meseci
Hvala na trudu ali ako ukucate npr.15 dana od 10.09.2018 kao rezultat daje 26.09. a ne 28.09 kako bi trebao.
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 15:37 - pre 67 meseci
Mozda sam napravio neki previd u kodu... pogledacu kad stignem.
U svakom slucaju, opet 28.09. na 10.09. i 15 dana tesko :)
Jedino ako je bitno da pocetak bude petak u nedelji posto je 28.09. petak!
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 15:40 - pre 67 meseci
Evo samo f-je gde je iskljuceno dodavanje '+1' na broj dana.

Code:


Function PocetakRada(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer) As String

    Dim PrviRadniDan As String
    Dim DodajBrojDana As Integer
    Dim nDan As Integer
    
    ' Broj dana koji se dodaje na dan pocetka odmora
    DodajBrojDana = BrojDanaOdmora '+ 1
    
    ' Prvi radni dan je
    PrviRadniDan = CDate(PocetakOdmora) + DodajBrojDana
    
    ' Koji je dan u nedelji kao integer vrednost
    nDan = CInt(DatePart("w", PrviRadniDan, vbUseSystemDayOfWeek, vbUseSystem))
    
    ' Ako je dan vikend (subota ili nedelja) onda
    If nDan > 5 Then
        
        Debug.Print Now, "> Vikend. preracunati na prvi sledecei radni dan.", "Dan u nedelji: "; nDan
        
        ' Postavi vrednost za broj dana koji se dodaje
        DodajBrojDana = 0
        
        ' Ako je subota
        If nDan = 6 Then DodajBrojDana = 2
        
        ' Ako je nedelja
        If nDan = 7 Then DodajBrojDana = 1
        
        ' Ukupan broj dana koji se dodaje na pocetak datuma odmora
        DodajBrojDana = DodajBrojDana + BrojDanaOdmora '+ 1
        
        ' Prvi radni dan je
        PrviRadniDan = CDate(PocetakOdmora) + DodajBrojDana
        
    End If
    
    Debug.Print Now, "PocetakOmdora: "; PocetakOdmora, "Broj dana odmora: "; BrojDanaOdmora, "Prvi radni dan je: "; PrviRadniDan
    
    ' Povratna vrednost
    PocetakRada = PrviRadniDan

End Function



p.s. Videti da li se uzima u obzir i dan pocetak i dan isteka u obim br. dana odmora. Zbog toga je iskljuceno gore u kodu '+1'

Evo online kalkulatora

https://www.timeanddate.com/da...am=&aw=&ad=15&rec=

 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 16:02 - pre 67 meseci
Ne znam kako si zamislio da ti ovo radi kada si na slepo dodao broj dana odmora početku odmora,
bez da si uzeo u obzir dane vikenda i ostale neradne dane po kalendaru (koje čak i nemaš kao input, a trebao bi).
Jedino na kraju gledaš da pronađeš prvi radni dan, što je u principu OK.

Dosta logike ti fali u ovome.

Prosto rešenje je da ideš iterativno, dan-po-dan dok ne potrošiš sve radne dane u dužini trajanja odmora i dok ne dođeš do prvog narednog radnog dana.
Nije baš efikasno rešenje, problem je kada odmori traju na hilade ili milione dana.
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 16:04 - pre 67 meseci
@dusanns pa dati kod to i radi... prvo doda dane pa onda vidi koji je dan u nedelji kada se dodaju dani. Ako je subota ili nedelja onda se odradi preracun. nDan (1...7)
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 16:16 - pre 67 meseci
Ne radi to što treba da radi...
Code:

PrviRadniDan = CDate(PocetakOdmora) + DodajBrojDana

Ako na 10.09.2018 dodaš 15 dana, onda dobijaš 25.09.2018,
što je pogrešno zato što si računao i dve Subote i dve Nedelje kao radne dane.

Dakle, umesto da neko dobije 15 NERADNIH dana, u tvom kodu on dobija 11 neradnih dana.
Dalji račun za pronalaženje sledećeg radnog dana je OK.

Na kraju, ako neko počinje odmor 10.09.2018 i ima 15 dana odmora,
njegov prvi radni dan posle odmora je 01.10.2018 (odnosno 28.09.2018 mu je zadnji neradni dan, ono što treba Mikiju)

[Ovu poruku je menjao dusans dana 11.09.2018. u 17:27 GMT+1]
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 16:54 - pre 67 meseci
Nisam obracao paznju da se racunaju samo radni dan.

Evo dole je dodata f-ja koja racuna broj vikend dana i f-ja koja je preradjena da koristi istu kako bi se pomenuto uzelo u obzir.

Sada se dobija da je prvi radni 01.10.2018. ako je pocetak odmora 10/09/2018 i odmor traje 15 RADNIH dana.

Code:


' Broj vikend dana za dati datum i broj RADNIH dana
Public Function BrojVikendDana(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer) As Integer

    Dim iDay As Integer
    
    ' Brojac dana
    r = 0
    
    For i = 0 To BrojDanaOdmora
    
        ' Dan u nedelji
        iDay = Weekday(CDate(PocetakOdmora) + i, vbUseSystemDayOfWeek)
        
        ' Ako je subota ili nedelja onda azuriraj brojac dana
        If iDay = 6 Or iDay = 7 Then r = r + 1

    Next

    ' Ako je poslednji dan u dodavanju subota onda, dodaji jos jedan dan, posto je sledeci dan nedelja
    If iDay = 6 Then r = r + 1

    ' Povratna vrednost
    BrojVikendDana = r

End Function

Function PocetakRada(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer) As String

    Dim PrviRadniDan As String
    Dim DodajBrojDana As Integer
    Dim DodajBrojVikendDana As Integer
    Dim nDan As Integer
    
    ' Broj dana koji se dodaje na dan pocetka odmora
    'DodajBrojDana = BrojDanaOdmora
    
    ' Broj vikend dana
    DodajBrojVikendDana = BrojVikendDana(PocetakOdmora, BrojDanaOdmora)
    Debug.Print Now, "Ukupno obracunato vikend dana:", DodajBrojVikendDana
    
    ' Broj radnih dana + broj vikend dana
    DodajBrojDana = BrojDanaOdmora + DodajBrojVikendDana
    
    ' Prvi radni dan je
    PrviRadniDan = CDate(PocetakOdmora) + DodajBrojDana
    
    ' Koji je dan u nedelji kao integer vrednost
    nDan = CInt(DatePart("w", PrviRadniDan, vbUseSystemDayOfWeek, vbUseSystem))
    
    ' Ako je dan vikend (subota ili nedelja) onda
    If nDan > 5 Then
        
        Debug.Print Now, "> Vikend. preracunati na prvi sledecei radni dan.", "Dan u nedelji: "; nDan
        
        ' Postavi vrednost za broj dana koji se dodaje
        DodajBrojDana = 0
        
        ' Ako je subota
        If nDan = 6 Then DodajBrojDana = 2
        
        ' Ako je nedelja
        If nDan = 7 Then DodajBrojDana = 1
        
        ' Ukupan broj dana koji se dodaje na pocetak datuma odmora
        DodajBrojDana = DodajBrojDana + BrojDanaOdmora + DodajBrojVikendDana
        
        ' Prvi radni dan je
        PrviRadniDan = CDate(PocetakOdmora) + DodajBrojDana
        
    End If
    
    Debug.Print Now, "PocetakOmdora: "; PocetakOdmora, "Broj dana odmora: "; BrojDanaOdmora, "Prvi radni dan je: "; PrviRadniDan
    
    ' Povratna vrednost
    PocetakRada = PrviRadniDan

End Function

Sub Test()

    Dim r As String
    
    r = PocetakRada("10/09/2018", 15)
    
    
End Sub



Code:


11/09/2018 17:54:19         Ukupno obracunato vikend dana:             4 
11/09/2018 17:54:19         > Vikend. preracunati na prvi sledecei radni dan.       Dan u nedelji:  6 
11/09/2018 17:54:19         PocetakOmdora: 10/09/2018   Broj dana odmora:  15       Prvi radni dan je: 01/10/2018







[Ovu poruku je menjao bokinet dana 11.09.2018. u 18:05 GMT+1]

[Ovu poruku je menjao bokinet dana 11.09.2018. u 18:06 GMT+1]

[Ovu poruku je menjao bokinet dana 11.09.2018. u 18:23 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 21:15 - pre 67 meseci
Svaka čast na trudu i zalaganju!

Ali, na 25 radnih dana odmora, opet će da ti "pojede" 2 dana odmora.
I kako dužina odmora raste, tako će i apsolutna greška da bude sve veća.

Zato sam i napisao da je ne-baš-efikasno rešenje ALI BAREM PROSTO REŠENJE
da ideš dan-po-dan kao što već činiš u petlji funkcije BrojVikendDana.

Ako je i dalje nejasno zbog čega dolazi do greške, to je zbog ovoga:
Code:

DodajBrojDana = BrojDanaOdmora + DodajBrojVikendDana

Ako je DodajBrojVikendDana = 6, onda, u najboljem slučaju greškom uzimaš bar jedan dan vikenda, u gorim slučajevima greškom uzimaš dva dana vikenda.
Kako DodajBrojVikendDana raste, tako sve više i više vikend dana uzimaš kao da su radni.

Drugačije rečeno - prostom aritmetikom se ovo ne rešava - ulaziš sam sebi u stomak.

Ovo me podseća na test-first pristup (a.k.a. lako ćemo) - prvo napravimo nešto što ne radi
pa posle ispravljamo dok ne proradi - umesto da se trud usmeri na razumevanje problema i razradu valjanog rešenja.

[Ovu poruku je menjao dusans dana 11.09.2018. u 22:40 GMT+1]
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 23:16 - pre 67 meseci
@dusans pomozi onda coveku ako sve tako lepo znas i drzis u malom prstu... neki pomoazu koliko mogu i kad mogu paralelno sa svojim poslom a neki eto nakrive kapu i ...
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od11.09.2018. u 23:17 - pre 67 meseci
Code:


Function PocetakRada2(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer) As String

'...dusans

End Function



Code:


' U pauzi za kafu
Function PocetakRada2(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer) 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
        
        ' Ukupan broj
        UkupanBrojDanaOdmora = (BrojNedelja * 7) + Ostatak
        
    End If

    r = CDate(PocetakOdmora) + UkupanBrojDanaOdmora
    
    ' 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
    
    Debug.Print "PocetakOdmora:"; PocetakOdmora, "BrojDanaOdmora:"; BrojDanaOdmora, "BrojNedelja:"; BrojNedelja, "Ostatak:"; Ostatak, "UkupanBrojDanaOdmora:"; UkupanBrojDanaOdmora, r
    
    ' Povratna vrednost
    PocetakRada2 = r

End Function







[Ovu poruku je menjao bokinet dana 12.09.2018. u 01:07 GMT+1]

[Ovu poruku je menjao bokinet dana 12.09.2018. u 01:09 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 69



+2 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od12.09.2018. u 09:33 - pre 67 meseci
Hvala bokinet na velikoj pomoći.

Ujedno se izvinjavam zbog mog previda jer nisam spomenuo da je riječ o izradi rješenja za godišnji odmor.

U rješenjima koja se donose u firmi gdje radim se navode prvi i zadnji dan godišnjeg odmora (ne prvi radni dan nakon odmora).

Ovaj zadnji primjer radi dobro s tim da bi samo, ako je moguće bilo dobro dobiti i zadnji dan g/o umjesto prvi radni dan.

primjer: covjek koristi 10 radnih dana počevši od 10.09.2018 i to mu u rješenju treba da stoji do 21.09.2018.
znači, 10.09. mu je već prvi dan odmora a 21.09 je zadnji dan. radnicima koji dobiju ta rješenja se
podrazumjeva da je 24.09. dan kada se lice javlja na radno mjesto.


Ono što sam slučajno primjetio je da nekada računa (kako treba - zadnji dan g/o)

- primjer: kada se unese 11 radnih dana radi ok, a već kada se unese 12 dana onda računa kao dan kada se lice javlja na posao.

[Ovu poruku je menjao Miki2013 dana 12.09.2018. u 11:56 GMT+1]
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od12.09.2018. u 13:59 - pre 67 meseci
@Miki2013 ja sam malo vise u guzvi, kad budem stigao gledacu da dodam tu mogucnost u primeru koda.
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od12.09.2018. u 14:04 - pre 67 meseci
Citat:


Ono što sam slučajno primjetio je da nekada računa (kako treba - zadnji dan g/o)

- primjer: kada se unese 11 radnih dana radi ok, a već kada se unese 12 dana onda računa kao dan kada se lice javlja na posao.



@Miki2013 Da li je u pitanju poslednja f-ja koja je navedena? Imate rezultate testa ispod takodje.

Code:


Function PocetakRada2(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer) 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
        
        ' Ukupan broj
        UkupanBrojDanaOdmora = (BrojNedelja * 7) + Ostatak
        
    End If

    r = CDate(PocetakOdmora) + UkupanBrojDanaOdmora
    
    ' 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
    
    Debug.Print "PocetakOdmora:"; PocetakOdmora, "BrojDanaOdmora:"; BrojDanaOdmora, "BrojNedelja:"; BrojNedelja, "Ostatak:"; Ostatak, "UkupanBrojDanaOdmora:"; UkupanBrojDanaOdmora, r
    
    ' Povratna vrednost
    PocetakRada2 = r

End Function




Code:


PocetakOdmora:10/09/2018    BrojDanaOdmora: 1           BrojNedelja: 0              Ostatak: 0    UkupanBrojDanaOdmora: 1     11/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 5           BrojNedelja: 0              Ostatak: 0    UkupanBrojDanaOdmora: 5     17/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 6           BrojNedelja: 1              Ostatak: 1    UkupanBrojDanaOdmora: 8     18/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 7           BrojNedelja: 1              Ostatak: 2    UkupanBrojDanaOdmora: 9     19/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 9           BrojNedelja: 1              Ostatak: 4    UkupanBrojDanaOdmora: 11    21/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 10          BrojNedelja: 2              Ostatak: 0    UkupanBrojDanaOdmora: 14    24/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 11          BrojNedelja: 2              Ostatak: 1    UkupanBrojDanaOdmora: 15    25/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 12          BrojNedelja: 2              Ostatak: 2    UkupanBrojDanaOdmora: 16    26/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 13          BrojNedelja: 2              Ostatak: 3    UkupanBrojDanaOdmora: 17    27/09/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 15          BrojNedelja: 3              Ostatak: 0    UkupanBrojDanaOdmora: 21    01/10/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 20          BrojNedelja: 4              Ostatak: 0    UkupanBrojDanaOdmora: 28    08/10/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 23          BrojNedelja: 4              Ostatak: 3    UkupanBrojDanaOdmora: 31    11/10/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 26          BrojNedelja: 5              Ostatak: 1    UkupanBrojDanaOdmora: 36    16/10/2018
PocetakOdmora:10/09/2018    BrojDanaOdmora: 30          BrojNedelja: 6              Ostatak: 0    UkupanBrojDanaOdmora: 42    22/10/2018

 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 69



+2 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od12.09.2018. u 14:55 - pre 67 meseci
Uzeo sam tvoj zadnji gotov primjer i u njemu su bile anomalije koje su se pojavljivale sa danima 11, 21 je radilo ok a sve preko 30 je bilo (-1) dan.

Sada nema tih anomalija ali i dalje je prisutan "problem" prvi radni dan umjesto zadnji dan g/o kako bi trebalo.

Ako ovo uspijes rijesiti kralj si :)

P.S. Radni dani su: ponedjeljak - petak (subota, nedjelja i praznici se NE računaju u rješenju).

Primjer: Ako se praznik nađe "na putu" ignoriše se kao da i nije već se interno samo produzi odmor koliko je trajao praznik. Znači ne opterećuj se praznicima.

Isteklo mi radno vrijeme i moram napustiti kancelariju pa ću sutra testirati ako budes nesto napravio.


Hvala mnogo.
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od12.09.2018. u 16:24 - pre 67 meseci
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]
Prikačeni fajlovi
 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 69



+2 Profil

icon Re: popunjavanje datuma do na osnovu broja dana i datuma od13.09.2018. u 08:11 - pre 67 meseci
@bokinet zaista sam vam zahvalan na trudu i želji da mi pomognete.

Testirao sam vaš primjer i vidio da još uvijek ne radi kako treba.
Naime, ukoliko je checkbox aktivan tada daje izlaznu vrijednost - prvi radni dan nakon odmora kao i ranije a ukoliko nije aktivan onda vraća dan unazad i kao kraj godišnjeg odmora daje nedjelju što ni u kojem slučaju nije prihvatljivo u izradi rješenja za g/o.

checkbox.value = -1 (10 dana odmora, start 10.09.2018 = 24.09.2018 - početak rada)
checkbox.value = 0 (10 dana odmora, start 10.09.2018 = 23.09.2018 - nedjelja)

Znači, ukoliko je moguće samo dobiti zadnji dan g/o a da nije vikend. Sve ostalo mi je nepotrebno.

Ako baš treba taj "početak rada" dodat ću još jedno polje "početak rada" koje neću koristiti, samo da kraj g/o daje ispravan rezultat.

P.S. Ako te kad put nanese u Sarajevo, namirit ću ti sve propuštene pauze za kafu ;)
 
Odgovor na temu

[es] :: Access :: popunjavanje datuma do na osnovu broja dana i datuma od

Strane: 1 2

[ Pregleda: 4551 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.