[ barkarlo @ 17.12.2006. 23:42 ] @
u tabeli "tbleksploatacija" imam kolone: zaposlenik, početakrada(format datum i vrijeme zajedno), završetak rada(format isti kao početakrada)
napravio sam drugu tabelu državnih praznika "tblpraznici" s dvije kolone praznici(format samo datum),nazivpraznika.
Kako napraviti upit u kojem se vidi tko je i koliko sati radio na državne praznike.
Ja sam probao s ovim ali ne do kraja. nešto treba ubaciti u između < > u kodu ali ne znam što.
=IIF(nz(Dlookup("[praznici]";"tblpraznici";"[praznici]=#" &[pocetakrada] & "# OR [praznici]=#" &[zavrsetakrada] & "#");0)=0,< >,)
Osim ovoga možda se može napraviti funkcija
[ Jpeca @ 18.12.2006. 13:49 ] @
Problem je interesantan ali nije baš jednostavan. Ovo su samo neka moja razmišljanja, koja možda mogu da ti pomognu - ne i konačno rešenje.

Za početeka mislim da ćeš morati da u tabeli praznika staviš vreme za početak i kraj: ako je neko počeo 1.1.2007 u 20:00 i završio 2.1.2007 u 6:00 - u tom slučaju radio je delom na jedan a delom na drugi datum pa mi se čini unos samo datuma nedovoljan.

Glavni problem se svodi na nalaženje preseka između dva datumska opsega. Nazovimo ih Opseg1 (start1, end1) i Opseg2 (start2, end2).
Neka su podaci o ovim osezima uneti u ćelije B3, C3 i B4, C4
A ! B ! C
Opseg1 ! 01/01/07 20:00 ! 02/01/07 08:00
Opseg2 ! 01/01/07 00:00 ! 03/01/07 00:00


U ćeliji B5 nalazimo = MAX(B3, B4), a u ćeliji C5 = MIN(C3, C4)
Presek opsega - tj sati rada na prazinik dobijaš u tom slučaju kao razliku ove dve vrednosti
=IF(B5<=C5, C5-B5, 0)

Ovo neće funkcionisati ukoliko je radno vreme duže od 24 sata. U tom slučaju bi se moralo izvršiti izvršiti preračunavanje dana u sate.

Detaljnije o problemu preseka opsega vidi npr. http://ryanfarley.com/blog/archive/2004/08/19/966.aspx

Dalje je problem kako naći opseg praznika koji treba uporediti sa opsegom radnog vremena. Probao sam neke kombinacija sa VLOOKUP ali nisam uspeo. Naravno uvek postoji mogućnost da se napravi funkcija koja će to raditi. U tom slučaju u funkciju može da se implementira i gornja logika.
[ Jpeca @ 20.12.2006. 11:49 ] @
Evo pokušao sam da napišem funkciju, pa ti proveri da li je to to.
Code:

Function SatiRada(poc As Date, kraj As Date, tblPraznici As Range) As Double
Dim poc1 As Date
Dim kraj1 As Date
Dim r As Long
  For r = 1 To tblPraznici.Rows.Count  ' Prolazak kroz tabelu praznika
     ' Trazi se da li postoji moguci presek radnog vremena i praznika
     If kraj >= tblPraznici(r, 1).Value And poc <= tblPraznici(r, 2).Value Then GoTo Presek
  Next r
  SatiRada = 0  ' Nema preseka
  Exit Function
Presek:
  poc1 = IIf(poc > tblPraznici(r, 1), poc, tblPraznici(r, 1))
  kraj1 = IIf(kraj < tblPraznici(r, 2), kraj, tblPraznici(r, 2))
  If kraj1 > poc1 Then
    SatiRada = DateDiff("h", poc1, kraj1)
  Else
    SatiRada = 0
  End If
End Function

Primer korišćenja funkcije imaš u prilogu.