Access – Sumiranje vremenskih intervala

Sumiranje vremenskih intervala ne predstavlja veći problem u Accessu, ali sve dotle dok vam ne zatreba sumiranje intervala časova (sati) koji prelaze 24 časa. Pretpostavimo da morate da pratite radne sate za zaposlene u svojoj firmi. Na osnovu tih sumiranih sati formiraće se i plata radnika. Kako inače odgovoriti na ovakve i slične potrebe, i uspešno sumirati časove?

Pretpostavimo da u tabeli imate dva Date/Time polja, jedno sa nazivom PocVreme i drugo KrajVreme. Najjednostavnije vremenski interval između vrednosti ova dva polja možete dobiti formulom:


[KrajVreme]-[PocVreme]

Na prvi pogled, Microsoft Access će korektno iskalkulisati rezultat, čak iako je ovaj interval veći od 24 časa. Ali, rezultat neće biti korektno i prikazan. Problem je u tome što Accessovi ugrađeni formati za vreme nisu dizajnirani da rukuju intervalima većim od 24 časa. Ovaj problem možete prevazići dizajniranjem korisnički definisane funkcije koja će izračunatu vrednost korektno prikazati. Jedna takva funkcija može da izgleda ovako:


Function ProtekloVreme(interval As Variant) As String

Dim UKsati As Long,
UKminute As Long,
UKsekunde As Long
Dim dani As Long,
sati As Long,
minute As Long,
sekunde As Long

dani = Int(CSng(interval))
UKsati = Int(CSng(interval * 24))
UKminute = Int(CSng(interval * 1440))
UKsekunde = Int(CSng(interval * 86400))
sati = UKsati Mod 24
minute = UKminute Mod 60
sekunde = UKsekunde Mod 60
If sekunde > 30 Then minute = minute + 1

‘zaokruzivanje

ProtekloVreme = UKsati & ":" & Format(minute "00")
End Function

Interno, Access čuva Date/Time vrednosti kao double (decimalne) brojke, gde leva strana decimalnog broja predstavlja datum, a desna vreme smešteno kao razlomak 24-časovnog dana. Izračunati intervali vremena predstavljaju se na isti način; levo od decimalnog zareza je „broj dana“, a „deo dana“ je na desnoj strani. Kada prikazujete izračunatu vrednost korišćenjem time formata, videćete samo desnu stranu.

Prethodni programski kod prikazuje funkciju ProtekloVreme. Ovoj funkciji se kao parametar prosleđuje vremenski interval, a kao rezultat vraća se formatirani string koji prikazuje proteklo vreme u formatu [sati:minute], na primer [125:36], što znači da je proteklo sto dvadeset pet časova i trideset šest minuta.

Pratite Krstaricu na www.krstarica.com