[ Miki2013 @ 10.09.2018. 14:33 ] @
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.
[ bokinet @ 10.09.2018. 16:42 ] @
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.


[ Miki2013 @ 11.09.2018. 08:15 ] @
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.
[ bokinet @ 11.09.2018. 14:30 ] @
Nasao sam neki MS Access i odradio primer na osnovu prilozene baze.

[ Miki2013 @ 11.09.2018. 14:57 ] @
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.
[ bokinet @ 11.09.2018. 15:37 ] @
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!
[ bokinet @ 11.09.2018. 15:40 ] @
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=

[ dusans @ 11.09.2018. 16:02 ] @
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.
[ bokinet @ 11.09.2018. 16:04 ] @
@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)
[ dusans @ 11.09.2018. 16:16 ] @
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]
[ bokinet @ 11.09.2018. 16:54 ] @
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]
[ dusans @ 11.09.2018. 21:15 ] @
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]
[ bokinet @ 11.09.2018. 23:16 ] @
@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 ...
[ bokinet @ 11.09.2018. 23:17 ] @
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]
[ Miki2013 @ 12.09.2018. 09:33 ] @
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]
[ bokinet @ 12.09.2018. 13:59 ] @
@Miki2013 ja sam malo vise u guzvi, kad budem stigao gledacu da dodam tu mogucnost u primeru koda.
[ bokinet @ 12.09.2018. 14:04 ] @
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

[ Miki2013 @ 12.09.2018. 14:55 ] @
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.
[ bokinet @ 12.09.2018. 16:24 ] @
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]
[ Miki2013 @ 13.09.2018. 08:11 ] @
@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 ;)
[ bokinet @ 13.09.2018. 08:44 ] @
@miki2013
F-ja pozdrava i jednu i drugu varijantu. Po potrebi se poziva varijanta koja se hoce.
U MS Access je dato samo kako se koristi (oba primera).
Checkbox i ostalo sto sam dodao bi trebalo da se ukloni.

Pitanje: Ako je kraj g/o vikend, da li rezultat treba da bude (dan pre) petak ili (dan posle) ponedeljak?


[ bokinet @ 13.09.2018. 09:56 ] @
Uz kafu, odradjena podrska za sve 3 varijante, pre i posle vikend dana, i kada se zavrsava odmor.

Dodata je dodatna ulazna vrednost u f-ji koja odredjuje gore navedeno.

Ima smisla samo kada je ulazna vrednost za 'VratiPrviRadniDan' = False

Vrednosti za trecu promenljivu u f-ji 'KrajOdmoraDaniVikenda'
' 0 - pre vikenda
' 1 - posle vikenda
' 2 - tacan dan

Evo preradjene f-je i rezultati u nastavku.
U prilogu je MS Access file.
Sto se tice MS Access treba privesti nameni i potrebi.


Code:


Public Function ObracunajKrajOdmora(ByVal PocetakOdmora As String, ByVal BrojDanaOdmora As Integer, Optional ByVal VratiPrviRadniDan As Boolean = False, Optional ByVal KrajOdmoraDaniVikenda As Integer = 0) As String

    ' KrajOdmoraDaniVikenda
    ' 0 - pre vikenda
    ' 1 - posle vikenda
    ' 2 - tacan dan

    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
    
    ' Koji je dan u nedelji kao integer vrednost
    nDan = CInt(DatePart("w", r, vbUseSystemDayOfWeek, vbUseSystem))
    
    If VratiPrviRadniDan = True Then
        
        ' Ako je dan vikend (subota ili nedelja) onda
        If nDan > 5 Then
        
            ' Ako je subota - dodaj 2 dana
            If nDan = 6 Then r = DateAdd("d", 2, r)
            
            ' Ako je nedelja - dodaj 1 dan
            If nDan = 7 Then r = DateAdd("d", 1, r)
        
        End If
        
    Else
    
        ' Ako je dan vikend (subota ili nedelja) onda
        If nDan > 5 Then
        
            ' Ako je rezim rada pre vikenda da bude datum onda
            If KrajOdmoraDaniVikenda = 0 Then
        
                ' Ako je subota - oduzmi 1 dan
                If nDan = 6 Then r = DateAdd("d", -1, r)
                
                ' Ako je nedelja - oduzmi 2 dana
                If nDan = 7 Then r = DateAdd("d", -2, r)
            
            ' Ako je rezim rada posle vikenda da bude datum onda
            ElseIf KrajOdmoraDaniVikenda = 1 Then
            
                ' Ako je subota - dodaj 2 dana
                If nDan = 6 Then r = DateAdd("d", 2, r)
                
                ' Ako je nedelja - dodaj 1 dan
                If nDan = 7 Then r = DateAdd("d", 1, r)
            
            End If
        
        End If
    
    End If
    
    Debug.Print "PocetakOdmora: "; PocetakOdmora, "BrojDanaOdmora: "; BrojDanaOdmora, "BrojNedelja: "; BrojNedelja, "Ostatak: "; Ostatak, "UkupanBrojDanaOdmora: "; UkupanBrojDanaOdmora, r, Format(r, "dddd"), IIf(VratiPrviRadniDan, "Prvi radni dan", "Kraj odmora"), IIf(KrajOdmoraDaniVikenda = 0, "Pre vikenda", IIf(KrajOdmoraDaniVikenda = 1, "Posle vikenda", "Tacan datum"))
    
    ' Povratna vrednost
    ObracunajKrajOdmora = r

End Function




Code:


3.2. DATUM KRAJA ODMORA --- KrajOdmoraDaniVikenda = 0
----------------------------------------------------------------------------
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  1          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  0    10/09/2018    Monday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  2          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  1    11/09/2018    Tuesday       Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  3          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  2    12/09/2018    Wednesday     Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  4          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  3    13/09/2018    Thursday      Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  5          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  4    14/09/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  6          BrojNedelja:  1             Ostatak:  0   UkupanBrojDanaOdmora:  7    17/09/2018    Monday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  7          BrojNedelja:  1             Ostatak:  1   UkupanBrojDanaOdmora:  8    18/09/2018    Tuesday       Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  8          BrojNedelja:  1             Ostatak:  2   UkupanBrojDanaOdmora:  9    19/09/2018    Wednesday     Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  9          BrojNedelja:  1             Ostatak:  3   UkupanBrojDanaOdmora:  10   20/09/2018    Thursday      Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  10         BrojNedelja:  2             Ostatak: -1   UkupanBrojDanaOdmora:  13   21/09/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  11         BrojNedelja:  2             Ostatak:  0   UkupanBrojDanaOdmora:  14   24/09/2018    Monday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  12         BrojNedelja:  2             Ostatak:  1   UkupanBrojDanaOdmora:  15   25/09/2018    Tuesday       Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  13         BrojNedelja:  2             Ostatak:  2   UkupanBrojDanaOdmora:  16   26/09/2018    Wednesday     Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  14         BrojNedelja:  2             Ostatak:  3   UkupanBrojDanaOdmora:  17   27/09/2018    Thursday      Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  15         BrojNedelja:  3             Ostatak: -1   UkupanBrojDanaOdmora:  20   28/09/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  20         BrojNedelja:  4             Ostatak: -1   UkupanBrojDanaOdmora:  27   05/10/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  21         BrojNedelja:  4             Ostatak:  0   UkupanBrojDanaOdmora:  28   08/10/2018    Monday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  23         BrojNedelja:  4             Ostatak:  2   UkupanBrojDanaOdmora:  30   10/10/2018    Wednesday     Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  25         BrojNedelja:  5             Ostatak: -1   UkupanBrojDanaOdmora:  34   12/10/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  26         BrojNedelja:  5             Ostatak:  0   UkupanBrojDanaOdmora:  35   15/10/2018    Monday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  30         BrojNedelja:  6             Ostatak: -1   UkupanBrojDanaOdmora:  41   19/10/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  31         BrojNedelja:  6             Ostatak:  0   UkupanBrojDanaOdmora:  42   22/10/2018    Monday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  32         BrojNedelja:  6             Ostatak:  1   UkupanBrojDanaOdmora:  43   23/10/2018    Tuesday       Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  34         BrojNedelja:  6             Ostatak:  3   UkupanBrojDanaOdmora:  45   25/10/2018    Thursday      Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  35         BrojNedelja:  7             Ostatak: -1   UkupanBrojDanaOdmora:  48   26/10/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  36         BrojNedelja:  7             Ostatak:  0   UkupanBrojDanaOdmora:  49   29/10/2018    Monday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  60         BrojNedelja:  12            Ostatak: -1   UkupanBrojDanaOdmora:  83   30/11/2018    Friday        Kraj odmora   Pre vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  61         BrojNedelja:  12            Ostatak:  0   UkupanBrojDanaOdmora:  84   03/12/2018    Monday        Kraj odmora   Pre vikenda


3.2. DATUM KRAJA ODMORA --- KrajOdmoraDaniVikenda = 1
----------------------------------------------------------------------------
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  1          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  0    10/09/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  2          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  1    11/09/2018    Tuesday       Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  3          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  2    12/09/2018    Wednesday     Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  4          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  3    13/09/2018    Thursday      Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  5          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  4    14/09/2018    Friday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  6          BrojNedelja:  1             Ostatak:  0   UkupanBrojDanaOdmora:  7    17/09/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  7          BrojNedelja:  1             Ostatak:  1   UkupanBrojDanaOdmora:  8    18/09/2018    Tuesday       Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  8          BrojNedelja:  1             Ostatak:  2   UkupanBrojDanaOdmora:  9    19/09/2018    Wednesday     Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  9          BrojNedelja:  1             Ostatak:  3   UkupanBrojDanaOdmora:  10   20/09/2018    Thursday      Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  10         BrojNedelja:  2             Ostatak: -1   UkupanBrojDanaOdmora:  13   24/09/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  11         BrojNedelja:  2             Ostatak:  0   UkupanBrojDanaOdmora:  14   24/09/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  12         BrojNedelja:  2             Ostatak:  1   UkupanBrojDanaOdmora:  15   25/09/2018    Tuesday       Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  13         BrojNedelja:  2             Ostatak:  2   UkupanBrojDanaOdmora:  16   26/09/2018    Wednesday     Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  14         BrojNedelja:  2             Ostatak:  3   UkupanBrojDanaOdmora:  17   27/09/2018    Thursday      Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  15         BrojNedelja:  3             Ostatak: -1   UkupanBrojDanaOdmora:  20   01/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  20         BrojNedelja:  4             Ostatak: -1   UkupanBrojDanaOdmora:  27   08/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  21         BrojNedelja:  4             Ostatak:  0   UkupanBrojDanaOdmora:  28   08/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  23         BrojNedelja:  4             Ostatak:  2   UkupanBrojDanaOdmora:  30   10/10/2018    Wednesday     Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  25         BrojNedelja:  5             Ostatak: -1   UkupanBrojDanaOdmora:  34   15/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  26         BrojNedelja:  5             Ostatak:  0   UkupanBrojDanaOdmora:  35   15/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  30         BrojNedelja:  6             Ostatak: -1   UkupanBrojDanaOdmora:  41   22/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  31         BrojNedelja:  6             Ostatak:  0   UkupanBrojDanaOdmora:  42   22/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  32         BrojNedelja:  6             Ostatak:  1   UkupanBrojDanaOdmora:  43   23/10/2018    Tuesday       Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  34         BrojNedelja:  6             Ostatak:  3   UkupanBrojDanaOdmora:  45   25/10/2018    Thursday      Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  35         BrojNedelja:  7             Ostatak: -1   UkupanBrojDanaOdmora:  48   29/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  36         BrojNedelja:  7             Ostatak:  0   UkupanBrojDanaOdmora:  49   29/10/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  60         BrojNedelja:  12            Ostatak: -1   UkupanBrojDanaOdmora:  83   03/12/2018    Monday        Kraj odmora   Posle vikenda
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  61         BrojNedelja:  12            Ostatak:  0   UkupanBrojDanaOdmora:  84   03/12/2018    Monday        Kraj odmora   Posle vikenda


3.2. DATUM KRAJA ODMORA --- KrajOdmoraDaniVikenda = 2
----------------------------------------------------------------------------
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  1          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  0    10/09/2018    Monday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  2          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  1    11/09/2018    Tuesday       Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  3          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  2    12/09/2018    Wednesday     Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  4          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  3    13/09/2018    Thursday      Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  5          BrojNedelja:  0             Ostatak:  0   UkupanBrojDanaOdmora:  4    14/09/2018    Friday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  6          BrojNedelja:  1             Ostatak:  0   UkupanBrojDanaOdmora:  7    17/09/2018    Monday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  7          BrojNedelja:  1             Ostatak:  1   UkupanBrojDanaOdmora:  8    18/09/2018    Tuesday       Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  8          BrojNedelja:  1             Ostatak:  2   UkupanBrojDanaOdmora:  9    19/09/2018    Wednesday     Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  9          BrojNedelja:  1             Ostatak:  3   UkupanBrojDanaOdmora:  10   20/09/2018    Thursday      Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  10         BrojNedelja:  2             Ostatak: -1   UkupanBrojDanaOdmora:  13   23/09/2018    Sunday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  11         BrojNedelja:  2             Ostatak:  0   UkupanBrojDanaOdmora:  14   24/09/2018    Monday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  12         BrojNedelja:  2             Ostatak:  1   UkupanBrojDanaOdmora:  15   25/09/2018    Tuesday       Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  13         BrojNedelja:  2             Ostatak:  2   UkupanBrojDanaOdmora:  16   26/09/2018    Wednesday     Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  14         BrojNedelja:  2             Ostatak:  3   UkupanBrojDanaOdmora:  17   27/09/2018    Thursday      Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  15         BrojNedelja:  3             Ostatak: -1   UkupanBrojDanaOdmora:  20   30/09/2018    Sunday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  20         BrojNedelja:  4             Ostatak: -1   UkupanBrojDanaOdmora:  27   07/10/2018    Sunday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  21         BrojNedelja:  4             Ostatak:  0   UkupanBrojDanaOdmora:  28   08/10/2018    Monday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  23         BrojNedelja:  4             Ostatak:  2   UkupanBrojDanaOdmora:  30   10/10/2018    Wednesday     Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  25         BrojNedelja:  5             Ostatak: -1   UkupanBrojDanaOdmora:  34   14/10/2018    Sunday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  26         BrojNedelja:  5             Ostatak:  0   UkupanBrojDanaOdmora:  35   15/10/2018    Monday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  30         BrojNedelja:  6             Ostatak: -1   UkupanBrojDanaOdmora:  41   21/10/2018    Sunday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  31         BrojNedelja:  6             Ostatak:  0   UkupanBrojDanaOdmora:  42   22/10/2018    Monday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  32         BrojNedelja:  6             Ostatak:  1   UkupanBrojDanaOdmora:  43   23/10/2018    Tuesday       Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  34         BrojNedelja:  6             Ostatak:  3   UkupanBrojDanaOdmora:  45   25/10/2018    Thursday      Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  35         BrojNedelja:  7             Ostatak: -1   UkupanBrojDanaOdmora:  48   28/10/2018    Sunday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  36         BrojNedelja:  7             Ostatak:  0   UkupanBrojDanaOdmora:  49   29/10/2018    Monday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  60         BrojNedelja:  12            Ostatak: -1   UkupanBrojDanaOdmora:  83   02/12/2018    Sunday        Kraj odmora   Tacan datum
PocetakOdmora: 10/09/2018   BrojDanaOdmora:  61         BrojNedelja:  12            Ostatak:  0   UkupanBrojDanaOdmora:  84   03/12/2018    Monday        Kraj odmora   Tacan datum











[ Miki2013 @ 13.09.2018. 12:33 ] @
Po prvim impresijama sve radi za 10.

Ovaj checkbox i combobox sam ubacio na formu i sakrio jer mi nece trebati vise, obzirom da sam dobio ono sto sam trazio.

Sada cu se baciti na obimnije testiranje da budem spreman za iducu godinu.

Zelim da ti se od srca zahvalim na ovoj zaista velikoj pomoci. Poziv za nadoknadu vremena je i dalje vazeci. Znaci, ako te put nanese u Sarajevo castim te i ruckom i picem, samo mi se javi e-mailom preko profila i dogovorit cemo se.

Nadam se da ce ovaj primjer posluziti jos nekome ko radi istu stvar.

Hvala jos jednom i lijep pozdrav!
[ bokinet @ 13.09.2018. 15:09 ] @
Evo uradio sam brzinski jos jednu kracu varijantu sa do while petljom kao moguce resenje.

Probati i uporediti sa prethodnom varijantom.

Kad budem stigao napravicu i MS Access uzorak i priloziti.

Code:


Public Function ObracunajKrajOdmora2(ByVal DatumPocetka As String, ByVal BrojDanaOdmora As Integer, Optional ByVal KrajOdmoraDaniVikenda As Integer = 2) As String

    Dim iDana As Integer
    Dim iBrojac As Integer
    Dim Dan As String
    Dim iDan As Integer
    
    iDana = BrojDanaOdmora
    iBrojac = 0
    
    ' Prvi dan odmora
    Dan = DateAdd("d", iBrojac, DatumPocetka)
    
    ' Uzmi dan u nedelji (1...7)
    iDan = CInt(DatePart("w", Dan, vbUseSystemDayOfWeek, vbUseSystem))
    
    If BrojDanaOdmora > 1 Then
    
        Do While Not iDana = 1
        
            ' Brojac dana
            iBrojac = iBrojac + 1
        
            ' Dan kada se doda broj vec izbrojanih dana
            Dan = DateAdd("d", iBrojac, DatumPocetka)
            
            ' Uzmi dan u nedelji (1...7)
            iDan = CInt(DatePart("w", Dan, vbUseSystemDayOfWeek, vbUseSystem))
            
            ' Ako je dan u nedelje 1...5 onda
            If iDan < 6 Then iDana = iDana - 1
    
        Loop
        
    End If
    
    If iDan > 5 Then
    
        ' Dan pre vikenda
        If KrajOdmoraDaniVikenda = 0 Then
        
            ' Ako je subota - oduzmi 1 dan
            If iDan = 6 Then Dan = DateAdd("d", -1, Dan)
            
            ' Ako je nedelja - oduzmi 2 dana
            If iDan = 7 Then Dan = DateAdd("d", -2, Dan)
        
        ' Dan posle vikenda
        ElseIf KrajOdmoraDaniVikenda = 1 Then
        
            ' Ako je subota - dodaj 2 dana
            If iDan = 6 Then Dan = DateAdd("d", 2, Dan)
            
            ' Ako je nedelja - dodaj 1 dan
            If iDan = 7 Then Dan = DateAdd("d", 1, Dan)
        
        End If
    
    End If

    Debug.Print "DatumPocetka: "; DatumPocetka, "BrojDanaOdmora: "; BrojDanaOdmora, "Dan: "; Dan, Format(Dan, "dddd"), IIf(KrajOdmoraDaniVikenda = 0, "Pre vikenda", IIf(KrajOdmoraDaniVikenda = 1, "Posle vikenda", "Tacan datum")); KrajOdmoraDaniVikenda
    
    ' Povratna vrednost
    ObracunajKrajOdmora2 = Dan

End Function




Test f-je

Code:


Sub Test2()

    Dim i As Integer
    Dim DatumPocetka As String
    Dim BrojDanaOdmora As Variant
    Dim KrajOdmoraDaniVikenda As Integer
    
    DatumPocetka = "10/09/2018"
    BrojDanaOdmora = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 21, 23, 25, 26, 30, 31, 32, 34, 35, 36, 60, 61)
    KrajOdmoraDaniVikenda = 2
    
    Debug.Print vbCrLf, vbCrLf
    Debug.Print "DATUM KRAJA ODMORA"
    Debug.Print String(76, "-")

    For i = 0 To UBound(BrojDanaOdmora)
        ObracunajKrajOdmora2 DatumPocetka, BrojDanaOdmora(i), KrajOdmoraDaniVikenda
    Next
    
End Sub




Rezultati f-je

Code:

          

DATUM KRAJA ODMORA --- KrajOdmoraDaniVikenda = 2
----------------------------------------------------------------------------
DatumPocetka: 10/09/2018    BrojDanaOdmora:  1          iBrojac:  0   Dan: 10/09/2018             Monday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  2          iBrojac:  1   Dan: 11/09/2018             Tuesday       Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  3          iBrojac:  2   Dan: 12/09/2018             Wednesday     Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  4          iBrojac:  3   Dan: 13/09/2018             Thursday      Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  5          iBrojac:  4   Dan: 14/09/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  6          iBrojac:  7   Dan: 17/09/2018             Monday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  7          iBrojac:  8   Dan: 18/09/2018             Tuesday       Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  8          iBrojac:  9   Dan: 19/09/2018             Wednesday     Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  9          iBrojac:  10  Dan: 20/09/2018             Thursday      Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  10         iBrojac:  11  Dan: 21/09/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  11         iBrojac:  14  Dan: 24/09/2018             Monday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  12         iBrojac:  15  Dan: 25/09/2018             Tuesday       Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  13         iBrojac:  16  Dan: 26/09/2018             Wednesday     Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  14         iBrojac:  17  Dan: 27/09/2018             Thursday      Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  15         iBrojac:  18  Dan: 28/09/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  20         iBrojac:  25  Dan: 05/10/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  21         iBrojac:  28  Dan: 08/10/2018             Monday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  23         iBrojac:  30  Dan: 10/10/2018             Wednesday     Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  25         iBrojac:  32  Dan: 12/10/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  26         iBrojac:  35  Dan: 15/10/2018             Monday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  30         iBrojac:  39  Dan: 19/10/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  31         iBrojac:  42  Dan: 22/10/2018             Monday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  32         iBrojac:  43  Dan: 23/10/2018             Tuesday       Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  34         iBrojac:  45  Dan: 25/10/2018             Thursday      Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  35         iBrojac:  46  Dan: 26/10/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  36         iBrojac:  49  Dan: 29/10/2018             Monday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  60         iBrojac:  81  Dan: 30/11/2018             Friday        Tacan datum 2 
DatumPocetka: 10/09/2018    BrojDanaOdmora:  61         iBrojac:  84  Dan: 03/12/2018             Monday        Tacan datum 2 



p.s. Nadam se da gore nisam nesto izostavio... anyway fresh coffeeeee edition


[ Miki2013 @ 25.09.2018. 13:13 ] @
Da ne otvaram novu temu jer se sljedeci "problem" odnosi na isti program.

Pitanje: Kako ukloniti "namjerno" ubacena prazna polja u reportu?
Pitanje je nejasno pa cu priloziti sliku i gotov primjer da bude jasnije.

Napravio sam upit koji pravi tabelu - (izvor podataka za plan)
e sad u koloni napomena treba da budu poredane stavke jedna ispod druge po osnovama.
Koristio sam u upitu chr(13) i chr(10) za prebacanje uslova u nove redove i to radi ok, medjutim
"problem" se javlja kad je neki od uslova prazan.

Ja sam to uradio amaterski sa mojim skromnim znanjem ali ako ima neko srecnije rjesenje, svakako bi dobro doslo.

EDIT: Promjena svojstva polja Can Shrink = Yes u reportu ne dolazi u obzir jer kvari izgled tabele

[Ovu poruku je menjao Miki2013 dana 25.09.2018. u 14:25 GMT+1]
[ bokinet @ 25.09.2018. 22:59 ] @
Ako sam dobro razumeo:

trenutno kako je i kako izgleda pre prepravke

Code:


- 30 radnih dana - ostvareni penzijski staž

- 2 radna dana - Lice koje ima dvoje ili više djece mlađih od 7 godina.

- 2 radna dana - Lice čije je mjesto rada udaljeno 80 km i više od mjesta stalnog boravka.



posle prepravke

Code:


- 30 radnih dana - ostvareni penzijski staž
- 2 radna dana - Lice koje ima dvoje ili više djece mlađih od 7 godina.
- 2 radna dana - Lice čije je mjesto rada udaljeno 80 km i više od mjesta stalnog boravka.



Dole evo jednog brizinskog resenja korigovanog SQL upita iz Queries dela ('test') kao i orginalnog koji je bio prisutan pre toga:

Pre:

Code:


SELECT [Prezime] & " (" & [ime_oca] & ") " & [ime] AS [Prezime, ime oca i ime], tblPodaci.GodStaza AS [Godine penzijskog staža], tblPodaci.UkupnoDana AS [Broj radnih dana g/o], [I_dio_dana] & Chr(13) & Chr(10) & [II_dio_dana] AS [Broj dana], [I_dio_od] & Chr(13) & Chr(10) & [II_dio_od] AS od, [I_dio_do] & Chr(13) & Chr(10) & [II_dio_do] AS do, [Osnov] & Chr(13) & Chr(10) & [Osnov1] & Chr(13) & Chr(10) & [Osnov2] & [Osnov3] & Chr(13) & Chr(10) & [Osnov4] & [Osnov5] & Chr(13) & Chr(10) & [Osnov6] AS Napomena INTO tblPodacizaPlan
FROM tblOsnovna INNER JOIN tblPodaci ON tblOsnovna.IndexID = tblPodaci.IndexID;




Primer koda upita posle korekcije koji daje gore navedeni rezultat #1:
Code:


SELECT [Prezime] & " (" & [ime_oca] & ") " & [ime] AS [Prezime, ime oca i ime], tblPodaci.GodStaza AS [Godine penzijskog staža], tblPodaci.UkupnoDana AS [Broj radnih dana g/o], [I_dio_dana] & Chr(13) & Chr(10) & [II_dio_dana] AS [Broj dana], [I_dio_od] & Chr(13) & Chr(10) & [II_dio_od] AS od, [I_dio_do] & Chr(13) & Chr(10) & [II_dio_do] AS do,
Replace(IIF(len(trim([Osnov]))>0,Replace(Osnov,Chr(13) & Chr(10),"") & Chr(13) & Chr(10),"") &
IIF(len(trim([Osnov1]))>0,Replace(Osnov1,Chr(13) & Chr(10),"") & Chr(13) & Chr(10),"") &
IIF(len(trim([Osnov2]))>0,Replace(Osnov2,Chr(13) & Chr(10),"") & Chr(13) & Chr(10),"") &
IIF(len(trim([Osnov3]))>0,Replace(Osnov3,Chr(13) & Chr(10),"") & Chr(13) & Chr(10),"") &
IIF(len(trim([Osnov4]))>0,Replace(Osnov4,Chr(13) & Chr(10),"") & Chr(13) & Chr(10),"") &
IIF(len(trim([Osnov5]))>0,Replace(Osnov5,Chr(13) & Chr(10),"") & Chr(13) & Chr(10),"") &
IIF(len(trim([Osnov6]))>0,Replace(Osnov6,Chr(13) & Chr(10),""),""),Chr(13) & Chr(10) & Chr(13) & Chr(10),"")
AS Napomena
FROM tblOsnovna INNER JOIN tblPodaci ON tblOsnovna.IndexID = tblPodaci.IndexID;



Ako sam nesto izmasio sorry...


[ Miki2013 @ 26.09.2018. 15:45 ] @
@bokinet... nemam riječi. Ti si genije i što je najvažnije, Veliki čovjek sa veliko V.

Hvala ti mnogo...
[ bokinet @ 26.09.2018. 21:27 ] @
Nema na cemu.

Nadam se samo da u zurbi nisam nesto izmasaio ;)

Inace, postoji isto i mogucnost da se recimo prilikom azuriranja vrednosti u bazi to podrzi i da se to isto tada precisti, kroz pozivanje f-je koja bi to radila.

Takodje isto moze da se napravi i bulk operacija (f-ja) koja bi recimo odradila sve to nad vec postojecom tabelom i poljima.

Evo espresso varijante f-je koja nesto slicno to radi kao u SQL upitu ali samo sto je kod za namene kroz aplikaciju, odnsno bulk azuriranje tabela u bazi:

Code:


Public Function DataFixCrLf(ByRef ThisContent As String) As String

    Dim v() As String
    Dim i As Integer
    Dim r As String
    
    r = ThisContent
    
    On Error GoTo ErrHandler
    
    If InStr(ThisContent, vbCrLf) > 0 Then
    
        r = ""
    
        v = Split(ThisContent, vbCrLf)
        
        For i = 0 To UBound(v)
        
            v(i) = Trim(Replace(v(i), vbCrLf, ""))
            If Len(v(i)) > 0 Then r = r & v(i) & vbCrLf
            
        Next
        
        If Right(r, 2) = vbCrLf Then r = Left(r, Len(r) - 2)
    
    End If

    DataFixCrLf = r

    r = ""
    Erase v

Exit Function
ErrHandler:

    ' Show message
    MsgBox "Doslo je do greske u radu." & vbCrLf & vbCrLf & "Error # " & Err.Number & " - " & Err.Description, vbCritical, "Error in DataFixCrLf"
End Function




Evo double espresso f-je koja to nesto kao isto radi samo nad tabelom/recordsetom gde se kao ulazne vrednosti unose naziv tabele i naziv polja koje se azurira i 'sredjuje'. Ova f-ja koristi gornju f-ju 'DataFixCrLf()' kao deo cele price.

Code:


Public Sub dbFixDataCrLf(ByVal TableName As String, ByVal FieldName As String)

    On Error GoTo ErrHandler

    Dim Rs As DAO.Recordset
    Dim r As String
    
    ' Get data recordset
    Set Rs = Access.CurrentDb.OpenRecordset(TableName)
    
    With Rs
    
        ' If we have records then
        If .RecordCount > 0 Then
    
            Do While Not .EOF
            
                r = DataFixCrLf("" & .Collect(FieldName))
                
                .Edit
                .Collect(FieldName) = r
                
                .Update
                
                Debug.Print r
                
                ' Move to next record
                .MoveNext
                
            Loop
        
        End If
        
        ' Close recordset
        .Close
        
    End With
    
    ' Free memory resource
    Set Rs = Nothing
    
Exit Sub
ErrHandler:
    ' Show message
    MsgBox "Doslo je do greske u radu." & vbCrLf & vbCrLf & "Error # " & Err.Number & " - " & Err.Description, vbCritical, "Error in dbFixDataCrlf"
End Sub



Sve ovo moze da se utegne i optimizuje...

code espresso ende :)

cus
[ Zidar @ 15.10.2018. 19:27 ] @
Malo je kasno za ukljucivanje u diskusiju, ali ne zamerite starom coveku

Problemi sa datumima se veoma efikasno resavaju upotrebom Kalendar tabele. U zakacenom primeru je jedna varijanta takve tabele i primer kako se moze primeniti na problem koji se resava - kako eliminisati neradne dane iz datog vremenskog intervala.

Tabela se lako pravi u Excelu, uz primenu funkcija za manipulisanje datumima. Primetite kolone JeLiPraznik in NazivPraznika. One se mogu rucno popuniti - svaka godina ima manje od deset dana praznika, pa se u tom procesu podesi i pomeranje praznika na ponedeljak ili utorak, kada praznik padne ne vikend. Kada normalan radni dan pretvorite u praznik treba da uradite 3 stvari: 1)postavie JeLiPraznik na TRUE, 2) upisete Ime Praznika, i 3) postavite RadniDan = FALSE. Posle toga na prosto prebrojite neradne dane (RadniDan = FALSE) u datom intervalu. Za unos praznika i podesavanja ako padnu u neradni dan, Boki moze da moze se napisati bulk update program .

Tabela Kalendar moze potpuno da eliminise potrebu za koriscenjem datumskih funkcija. Moguse je odgovoriti lako na pitanja tipa: "Sastanak ce biti svakog drugom meseca, poslednji utorak u mesecu, pocevsi of marta". Meni posebno draga opcija je [AbsolutnaSedmica] Pocevsi od 1.1.2000 sedmice se broje u rastucem redosledu. Ovo dozvoljava da radite sedmicne (weekly) izvestaje. ISOweek drugacije tretira prvu i poslednju sedmicu u godini i to pravi ponekad probleme. AbsoluteWeek resava taj problem.


[ bokinet @ 15.10.2018. 19:37 ] @
@Zidar Ja koliko se secam, to nije bilo potrebno.

Ima 2 resenja, jedan kroz ciklus (drugi ponudjeni) i drugi (prvi ponudjeni) je preko date f-ja.

Vas predlog moze da se odradi i da se napravi deo koji predvidja izuzetke kao sto su praznici, turnusi, slobodni dani nakon trecih smena i svasta nesto sto moze da bude kao uslov i sto se desava u praksi u uredjenim i (ne)uredjenim zemljama... ali to @Miki2013 nije trazio posto je i sam rekao da mu to nije bitno.

Ja trenutno nemam bas puno vremena time da se bavim tako da mogu nekom drugom prilikom da vidim da to odradim ako nekome bude trebalo i to.

Do tada sta je tu je.

Ziveli!

Svako dobro.

p.s. @Zidar -> Excel file nema u prilogu