Deci, gata să funcționeze pentru a calcula numărul de ore între două date. Utilizăm această funcție pe cont propriu în rapoartele noastre de asistență.
Mai întâi, vă spun cum sunt stocate datele în calendarul de afaceri.
Calendar are 3 sectiuni (vizualizare mai bună CardManager)
1. Informații de bază (doar un câmp Nume, este clar de ce este necesar)
2. Ani. Are un câmp Anul în care este indicat anul
2.1 Zilele subsecțiunii. Are un câmp Zi - numărul de zi de la începutul anului și tipul de tip
2.1.1 Timp de lucru subsecțiune. Câmpurile StartTime și EndTime - intervalul de timp
3. DefaultTimeSettings. Câmpurile StartTime și EndTime - intervalul de timp
În calendar, puteți efectua mai multe setări.
1. Setarea timpului de lucru prestabilit.
Această setare va fi stocată în secțiunea DefaultTimeSettings. Liniile secțiunii vor conține intervale de timp.
3. Setarea calendarului implicit
Aceste setări vor fi stocate în aceeași secțiune a anilor (similar cu pasul 2), dar în anul 1796.
Dacă nu există setări memorate, ce urmează este luată în timpul orelor de lucru pentru o anumită zi:
Zile de lucru: de luni până vineri
Program de lucru: 9:00 - 13:00 și 14:00 - 18:00
Scenariul conține 3 funcții
1. Verificați dacă ziua dată este un lucrător FIsWorkTime
2. Funcția de calculare a timpului de lucru pentru o zi FGetDayDuration
3. Principala funcție de calculare a duratei între două date FBusinessHours2
Algoritmul este următorul.
F-BusinessHours2 calculează cu FGetDayDuration timpul de lucru în prima zi a intervalului (până la sfârșitul primei zile lucrătoare). Durata timpului de lucru în ultima zi a intervalului (de la începutul zilei de lucru până la data finală) și durata în toate zilele dintre perioada inițială și cea finală.
Din moment ce datele sunt stocate pentru anumite zile, mai degrabă decât toate, este singura modalitate de a contoriza toate zilele din ciclul. Aceasta nu este o modalitate optimă. O opțiune alternativă ar fi să se creeze periodic o „hartă“ a programul de lucru pentru absolut toate zilele cu un interval de timp de stocare UTC într-un tabel separat. Apoi, calculul duratei poate fi realizată în mai multe SELECT'ami într-o fracțiune de secundă.
F-BusinessHours2 poate returna datele în câteva minute sau ore, în funcție de parametrul 3 @ Mod.