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

Racunanje provedenog vremena

[es] :: Access :: Racunanje provedenog vremena

[ Pregleda: 1225 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

srdjan ub
-

Član broj: 25171
Poruke: 147
*.dynamic.isp.telekom.rs.



+1 Profil

icon Racunanje provedenog vremena29.04.2020. u 22:54 - pre 48 meseci
Vidim da nema starih forumasa u Access-u zna li neko sta je sa njima?
Nema ni mene odavno nekad sam cesto posecivao ovaj forum a tad sam i znao nesto :-). Kad se sa necim ne radi duze vreme zaboravi se dosta stvari
Evo o cemu se radi:
Potreban mi je obracun vremena provedenog u nekoj prostoriji.
Imam npr 2 ili vise ulaza i toliko npr izlaza u neku i iz neke prostorije. Na svaka vrata imam kontroler pristupa i na ulazu i na izlazu u oba smera (definisano u polju event_point_id. Znaci imam evidenciju svakog ulaska i izlaska, npr:
event_point_id=1 je ulaz (vrata 1)
event_point_id=2 je izlaz (vrata 1)
event_point_id=3 je ulaz (vrata 2)
event_point_id=4 je izlaz (vrata 2) itd.

Treba da obracunam vreme provedeno u nekoj prostoriji za odredjeni period. Znaci IZLAZ-ULAZ = PROVEDENO VREME. Svaki radnik u tu prostoriju u toku dana udje i izadje vise puta.
E sad postoji vise stvari na koje treba obratiti paznju:
- ako se desi da nema izlaz a ima ulaz ( da se onda zanemari izlaz i izadje samo upozorenje da nema izlaza) i u obracunskom delu da stoji 0 jer ne znamo koliko je proveo unutra)
- ako se desi da nema ulaz a ima izlaz (slicno kao prva situacija - fakticki poredjenje ako je poslednji bio ulaz ne moze posle toga ponovo da ima isto ulaz)
- ako se desi da se vise puta u toku par sekundi otkuca (onda zanemariti te stavke i uracunati samo prvu stavku tj potpuno izbaciti iz obracuna kao greske)
- ako se desi da nema izlaza duze od par sati (oko 15 sati) onda se smatra da je radnik izasao a da se nije odjavio i kontra
- ako se radnik prijavi ujutru kada stigne na posao a ne odjavi se a sutradan kada dodje na posao ne prijavi se al se odjavi da se smatra greskom jer je nemoguce da je proveo u prostoriji duze od 15 sati mada je ovo prakticno vrlo malo moguce jer postoje magnetne brave na svakim vratima
- obracun treba biti po stavkama za izabranog radnika u odredjenom izabranom periodu

Bazu sam postavio u prilogu poruke. Baza se zove Access, a tabela u kojoj su iscitavanja zove se acc_monitor_log
Zapeo sam vec na samom pocetku izracunavanja provedenog vremena u prostoriji i definisanjem stavki koje idu pre: ULAZ ide pre IZLAZA, kao i izbacivanjem neispravnih stavki (dupli ulaz ili izlaz) i ostavljanjem samo ispravnih.
Prikačeni fajlovi
 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Racunanje provedenog vremena02.05.2020. u 17:43 - pre 48 meseci
Da preformulisem pitanje vidim da nema odgovora
Postoje dva ili vise vremena
VREME1 15:32:44
VREME2 15:32:52
VREME3 15:33:01
itd

Problem je kako da se napravi upit koji ce ukoliko je razlika u vremenu nekoliko sekundi npr 10 da prikaze samo poslednje vreme u nizu, u ovom slucaju VREME3?
 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 69



+2 Profil

icon Re: Racunanje provedenog vremena02.05.2020. u 20:21 - pre 48 meseci
Meni ovo zadnje pitanje izgleda kao evidencija logovanja u bazu.
Vrijeme prijave/odjave korisnika.
Možda da pogledate neka rješenja na tu temu.

Edit: Ili da u upitu koristite opciju Max
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: Racunanje provedenog vremena02.05.2020. u 22:54 - pre 48 meseci
Sto se tice evidencije prisustva treba prosiriti gore pojasnjenje gde je moguce da jedan radnik u toku radnog dana (smene) moze da ima vise obracunskih intervala u toku dana te tako onda to predstavlja kolekciju tj. zbir (sumu) razlika vise IZLAZA-ULAZA tj. provedenog vremena u toku radnog dana.

DAN n - PERA
R1 = I1 - U1
R2 = I2 - U2
R3 = I3 - U3 ...
Rn = In - Un
----
RU = R1 + R2 + R3 +... Rn

Prvo sto treba uraditi je sortirati log i njega lepo sloziti pa onda preci na obracun.

Drugo treba definisati da li se radi obracun kroz poslovnu logiku i kod ili se forsira rad sa upitima kroz SQL sto je opet malo kompleksnije resiti.

Sto se tice upita, jedan od istih moze biti grupisanje po korisniku i vremenu gde se deo koji se odnosi na vreme formatira i grupise u obliku bez sekundi znaci uzima samo HH:mm a ne HH:mm:ss.
Cini mi se u MS Access da je format(naziv_polja,"HH:mm") ili da se koristi recimo sub-query gde bi se uzimao prvi ili poslednji iz liste sa TOP N gde bi N bila vrednost 1 zapis - samo prvi i ORDER BY prilikom groupisanja tog dela u upitu za svakog korisnika ako se hoce i deo koji se odnosi na sekunde.

Sto se tice broja sati provedenih na poslu (15 sati) to treba ostaviti da je moguca varijanta... Recimo ljudi koji rade kao vozaci imaju te varijante da recimo odu ujutru a da se vrate sa kamionom uvece u firmu ili sutra dan dok razvezu i pokupe robu.

p.s. nisam gledao uzorak baze.
 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Racunanje provedenog vremena03.05.2020. u 00:54 - pre 48 meseci
Pokusao bi sto vise stvari uraditi preko upita al nisam odavno radio pa sam dosta stvari zaboravio. Ako sam te dobro razumeo to je ovako nesto i to mi je zaista dobra ideja za pocetak jer nisam znao odakle da krenem. E sad neka ideja samo kako da ih obracunam po redu, znaci prvo ulaz ako ima pa onda izlaz a ako nema svoj par onda zanemariti stavku.
Prikačeni fajlovi
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Racunanje provedenog vremena03.05.2020. u 06:30 - pre 48 meseci
Treba prvo da napravis tako da samo validni ulazi i izlazi se racunaju. Znaci dva ulaza racuna se poslednji, dva izlaza racuna se prvi.
Znaci logujes sekvence i onda pravis presek gde odbacujes nevalidne i kumuliras validne ulaz-izlaz sekvence dok odbacujes
nevalidne ulaze i izlaze.
 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Racunanje provedenog vremena03.05.2020. u 08:06 - pre 48 meseci
Znam i ja to ali ne znam kojim postupkom doci do toga ako moze neki slican primer ne mogu nista slicno da nadjem
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Racunanje provedenog vremena03.05.2020. u 14:02 - pre 48 meseci
Pa treba ti log prvo, gde logujes sve ulaze i izlaze, a onda u nekom trenutku pravis presek gde odbacujes duple ulaze i izlaze.
Meni bi najlaske bilo za manipulisanje unix timestamp format jer on belezi samo sekunde i lako je sortirati po tome.
E sad dal bih ja uopste koristio bazu za to :)
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: Racunanje provedenog vremena03.05.2020. u 14:39 - pre 48 meseci
Ovo poslednje sto je Branimir naveo nije obavezno ali je lakse posebno racunanje.

U MS Access postoje f-je koje rade oduzimanje datuma i vracaju razliku u odgovarajucem formatu e.g. sec. min. i sl.

Videti DateDiff() f-ju.

Na primer,

- Napraviti prvo kolekciju (ili niz) svih zaposlenih,

- Potom za svakog zaposlenog u kolekciji dodelite njegove ulaze i izlaze tj. access log i sortirati ih od A-Z ili Z-A;

- Potom krenuti sa usaglasavanjem obracuna gde se kreiraju parnjaci tj. za svaki ulaz se vezuje izlaz (A-Z) ili obratno za svaki izlaz se vezuje ulaz (Z-A) - znaci kolekcija kolkecija od 2 clana;

- Kada se srede parnjaci onda se posle vrsi klasicno oduzimanje vremena i vrsi totalni obracun po zaposlenom za svaki parnjak u listi;

Pridodato:

Brzinski sam pogledao poslednju mdb bazu u prilogu.

dodatne stvari oko acc_monitor_log
- dodati uslov card_no > 0
- dodati uslov event_point > 0

Primer sortiranog loga gde ulaze sve zapisi u logu koji zadovoljavaju uslov da je card_no > 0 i event_point > 0 i pritom se vrsi sortiranje po card_no i time polju;

Code:

SELECT acc_monitor_log.card_no, acc_monitor_log.event_point_id, acc_monitor_log.Time
FROM acc_monitor_log
WHERE (((acc_monitor_log.card_no)>"0") AND ((acc_monitor_log.event_point_id)>0))
ORDER BY acc_monitor_log.card_no, acc_monitor_log.Time;


Na osnovu ovog upita se sada moze krenuti u formiranje parnjaka i izrade obracuna kao i jedinstvene liste radnika u logu za koji se vrsi predmetni obracun.






[Ovu poruku je menjao bokinet dana 03.05.2020. u 16:05 GMT+1]
 
Odgovor na temu

[es] :: Access :: Racunanje provedenog vremena

[ Pregleda: 1225 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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