DocsVision: T-SQL Скрипт для розрахунку кількості робочого часу між двома датами з урахуванням бізнес-календаря (зі змінами від 15.10), Книги та статті, Різне, статті

Для вирішення завдання розширеного звіту мені було потрібно обчислювати робочий час витрачений співробітником на поставлене йому завдання в днях.

Спробував використовувати вже наявні рішення цього завдання, але зіткнувся з невеликими проблемами, тому написав свій варіант рішення.

На мій погляд, вийшло зовсім не погано 🙂

Перший варіант довелося трохи змінити (для тих хто вже встиг з ним ознайомитися), так як для розрахунку необхідно було викликати процедуру, а не функцію, що ускладнювало використання рішення в запитах для побудови звітів.

І так, рішення тепер складається з 4 функцій:

1. Функція розрахунку робочого часу в перший день заданого періоду
2. Функція розрахунку загального робочого часу в перший день заданого періоду
3. Функція розрахунку робочого часу в останній день заданого періоду
4. Функція розрахунку робочого часу за період

Є кілька припущень:

1. Якщо дата старту не задана, то вона прирівнюється до початку поточного дня
2. Якщо дата закінчення не завдання, то вона прирівнюється до поточного моменту часу
3. Якщо не вказано ідентифікатор бізнес-календаря, то виконується пошук першого в системі.
4. Якщо календарів немає в системі, то календарем за замовчуванням вважається робочий день з 09 до 18 з перервою на обід з 13 до 14 п’ять днів на тиждень

При запуску процедури розрахунку робочого часу є параметри:

@OnlyFullDay:
1 – враховуються тільки повні робочі дні, тобто без першого робочого дня і останнього;
0 – на додаток до повних днях враховуються перший і останній день, якщо в них було робочий час

@Mode:
1 – результат повертається у хвилинах (параметр @ OnlyFullDay тоді ігнорується)
0 – результат в днях

Функція повертає кількість робочих днів або кількість робочого часу в хвилинах.

Робочий час обчислюється за будь-який проміжок часу, в тому числі, при переході між роками.

У себе тестіл на різних варіантах настройок календаря і без нього – працює.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*