T-sql függvény a munkaidő számának kiszámításához két időpont között, figyelembe véve az üzleti naptárt -
Tehát készen áll a két munkaidő közötti munkaidő számának kiszámítására. Ezt a funkciót magunk is támogató jelentésekben használjuk.
Először megmondom, hogy az adatok az üzleti naptárban tárolódnak.
Az üzleti naptárnak 3 szakasza van (jobb, ha megnézed a CardManager programot)
1. Alapinformációk (csak egy Név mező, egyértelmű, hogy miért szükséges)
2. Évek. Van olyan mező, amelyben az év szerepel
2.1 Alszakaszok. Napi mező - a napi szám az év elejétől és a Típus típusától
2.1.1 Alszakasz Munkaidő. Fields StartTime és EndTime - időtartomány
3. DefaultTimeSettings. Fields StartTime és EndTime - időtartomány
A naptárban több beállítást is elvégezhet.
1. Alapértelmezett munkaidő beállítás.
Ez a beállítás a DefaultTimeSettings szakaszban lesz tárolva. A szakaszsorok időintervallumokat tartalmaznak.
3. Az alapértelmezett naptár beállítása
Ezeket a beállításokat az évek ugyanazon szakaszában tárolja (hasonló a 2. lépéssel), de 1796-ban.
Ha nincsenek mentett beállítások egy adott napra, a következő munkaidő kerül végrehajtásra:
Munkanapok: hétfőtől péntekig
Munkaidő: 9: 00-13: 00 és 14: 00-18: 00 között
A szkript 3 funkcióból áll
1. Ellenőrizze, hogy az adott nap FIsWorkTime munkás
2. A FGetDayDuration egy napi munkaidő kiszámításának funkciója
3. Az FBusinessHours2 két időpont közötti időtartam kiszámításának fő funkciója
Az algoritmus a következő.
Az F-BusinessHours2 az FGetDayDuration segítségével kiszámítja a munkaidőt az intervallum első napján (az első munkanap végéig). A munkaidő hossza az intervallum utolsó napján (a munkanap kezdetétől a végső időpontig), és az időtartam minden nap között az első és a végső között.
Mivel az adatokat meghatározott napokig tárolják, és nem mindenki számára, az egyetlen módja annak, hogy a számlálás során megy végig a nap folyamán. Ez nem optimális. Egy alternatíva lenne, ha rendszeresen összeállítaná a munkaterv "térképét" az időintervallumban minden napra, és az időt UTC-ben külön táblázatban tárolná. Ezután az időtartam kiszámítását több SELECT segítségével is elvégezheti egy másodperc törtrészében.
Az F-BusinessHours2 képes adatokat visszaadni percekben vagy órákban, a 3. modultól függően.