Show/Hide Toolbars

Руководство администратора

Алгоритмы расчета сроков

Ссылки Назад Вверх Вперед

Алгоритм расчета Срока — даты, отстоящей на расчетное время от точки отсчета

При расчете срока выполнения задач, срока обработки подписи и других аналогичных задач используются функции добавления рабочих дней/часов/минут. Такие функции доступны при редактировании смарт-выражений (ДобавитьРабочихДней, ДобавитьРабочихЧасов, ДобавитьРабочихМинут) и при разработке хранимых процедур (tc_AddWorkingDays, tc_AddWorkingHours, tc_AddWorkingMinutes).

При расчете сроков используются точка отсчета (например, момент запроса подписи) и интервал времени (например, время, выделенное на обработку подписи), а также учитываются системные параметры из Общих настроек приложения: Рабочее время (с... по...) и Рабочих часов в дне, и системный Производственный календарь (для определения рабочих и выходных/праздничных дней)

Алгоритм расчета срока основан на следующих правилах:

Правило

Пример

Пояснения

1

Если точка отсчета приходится на нерабочее время (до начала рабочего дня, после окончания рабочего дня или на выходной день), то она сдвигается на начало ближайшего рабочего дня.

duedates_1

Подпись запрошена в 08:00,
точка отсчета переносится на 10:00.

Подпись запрошена в 20:00,
точка отсчета переносится на 10:00 следующего рабочего дня.

Подпись запрошена в 15:00 в субботу,
точка отсчета переносится на 10:00 понедельника.


2

Обычно время от начала до конца рабочего дня больше чем продолжительность рабочего дня, т.е. в середине дня предусмотрен перерыв (например, рабочий день с 10:00 до 19:00, а продолжительность рабочего дня 8 часов – в середине дня есть 1 час перерыва). Но поскольку конкретные часы перерыва неизвестны, считается, что сотрудник может взять перерыв в любое время, даже в самом начале дня. Поэтому если срок переходит на другой рабочий день, время начала рабочего дня сдвигается на время перерыва (например, вместо 10:00 отсчитывается от 11:00).

2.1

Если точка отсчета и срок приходятся на один и тот же день и интервал времени меньше продолжительности рабочего дня, время на перерыв не учитывается.

duedates_2

Точка отсчета – 12:00,
интервал времени – 4 часа,
расчетный срок – 16:00.


2.2

Если точка отсчета и срок приходятся на разные дни, то при переходе на следующий день к началу рабочего дня прибавляется время перерыва.

duedates_3

Точка отсчета – 16:00,
интервал времени – 4 часа,
расчетный срок – 12:00 следующего рабочего дня.

С 16:00 до 19:00 – 3 часа,
затем к началу следующего рабочего дня прибавляется 1 час перерыва – 11:00,
с 11:00 до 12:00 — оставшийся 1 час

3

Если интервал времени больше продолжительности рабочего дня, то есть содержит один или несколько рабочих дней, то вместо продолжительности каждого рабочего дня при расчете откладываются сутки.

3.1

Интервал времени равен продолжительности рабочего дня.

duedates_4

Точка отсчета – 14:00 1 октября 2018,
интервал времени – 8 часов,
расчетный срок – 14:00 2 октября 2018.


3.2

Интервал времени больше одного рабочего дня, но остаток не переходит на следующий рабочий день.

duedates_5

Точка отсчета – 14:00 1 октября 2018,
интервал времени – 12 часов,
расчетный срок – 18:00 2 октября 2018.

12 часов = 8 часов (продолжительность рабочего дня) + 4 часа.

К 14:00 прибавляются сутки – 14:00 следующего рабочего дня,
затем к этому времени прибавляются оставшиеся 4 часа – 18:00.

3.3

Интервал времени больше нескольких рабочих дней, но остаток не переходит на следующий рабочий день.

duedates_6

Точка отсчета – 14:00 1 октября 2018,
интервал времени – 18 часов,
расчетный срок – 16:00 3 октября 2018.

18 часов = 16 часов (продолжительность двух рабочих дней) + 2 часа.

К 14:00 1 октября прибавляются двое суток – 14:00 3 октября,
затем к этому времени прибавляются оставшиеся 2 часа – 16:00.

3.4

Интервал времени больше рабочего дня, и остаток переходит на следующий день.

duedates_7

Точка отсчета – 18:00 1 октября 2018,
интервал времени – 12 часов,
расчетный срок – 14:00 3 октября 2018.

12 часов = 8 часов (продолжительность рабочего дня) + 4 часа.

К 18:00 1 октября прибавляются сутки – 18:00 2 октября,
затем к этому времени прибавляется 1 час, оставшийся до конца данного рабочего дня – 19:00 2 октября,
при переходе на следующий день к началу рабочего дня прибавляется 1 час перерыва – 11:00 3 октября,
затем прибавляются оставшиеся 3 часа – с 11:00 до 14:00.

Алгоритм расчета рабочего времени между датами

Расчет рабочего времени ведется между двумя датами -- Точкой Отсчета и Сроком.

Алгоритм в виде блок-схемы:

Кликните мышью по изображению для просмотра в полном размере

Алгоритм в виде пошаговых схем:

Подготовительные расчеты

1. Если время какой-либо из дат раньше, чем начало рабочего дня, то сдвинем эту дату вперед, на начало рабочего дня.

duedate_1

2. Если время какой-либо из дат позже, чем окончание рабочего дня, то сдвинем эту дату назад, на конец рабочего дня.

duedate_2

3. Если какая-то из дат попадает на выходной день, то перенесем ее на первый следующий рабочий день, на то же время.

 

duedate_3

4. Если Точка Отсчета и Срок попадают на один и тот же рабочий день, то вычислим разницу времени между двумя этими датами. Если получившаяся разница больше длины рабочего дня, то примем ее равной длине рабочего дня. На этом завершим расчет.

duedate_4

Пример:

Начало рабочего дня: 9:00

Конец рабочего дня: 21:00

Длина рабочего дня: 8 часов

Точка Отсчета: 10 августа 2015 10:00

Срок: 10 августа 2015 16:00

Оставшееся время = 6 часов

5. Время, оставшееся в день начала расчета между Точкой Отсчета и концом рабочего дня, назовем Остаток дня отсчета.

duedate_5

6.  Время, оставшееся в день срока между началом рабочего дня и Сроком, назовем Остаток дня срока.

 

 

duedate_6

 

7. Вычислим количество полных рабочих дней, расположенных между Точкой Отсчета и Сроком (то есть количество полных суток, за исключением выходных и праздничных дней).

Пример:

duedate_7

8. Если между Точкой Отсчета и Сроком нет полных рабочих дней

8.1. Если между Точкой Отсчета и Сроком больше суток.

В этом случае в расчете заменяем промежуток времени в 24 часа (сутки) на длину рабочего дня и прибавляем к нему остаток.

 

duedate_8_1

Пример:

Начало рабочего дня: 9:00

Конец рабочего дня: 21:00

Длина рабочего дня: 8 часов

Точка Отсчета: 10 августа 2015 10:00

Срок: 11 августа 2015 16:00

Оставшееся время = 8 часов длина рабочего дня + 6 часов остаток = 14 часов

8.2. Если между Точкой Отсчета и Сроком меньше суток, а сумма остатков дней отсчета и срока больше длины рабочего дня.

В этом случае время, оставшееся между Точкой Отсчета и Сроком, принимаем равным длине рабочего дня.

 

duedate_8_2

Пример:

Начало рабочего дня: 9:00

Конец рабочего дня: 21:00

Длина рабочего дня: 8 часов

Точка Отсчета: 10 августа 2015 12:00

Срок: 11 августа 2015 11:00

Остаток дня отсчета = 9 часов

Остаток дня срока = 2 часа

(9 часов + 2 часа) > 8 часов

Оставшееся время = 8 часов длина рабочего дня

8.3. Если между Точкой Отсчета и Сроком меньше суток, а сумма остатков дней отсчета и срока меньше длины рабочего дня.

В этом случае время, оставшееся между Точкой Отсчета и Сроком, принимаем равным сумме двух остатков.

 

duedate_8_3

Пример:

Начало рабочего дня: 9:00

Конец рабочего дня: 21:00

Длина рабочего дня: 8 часов

Точка Отсчета: 10 августа 2015 17:00

Срок: 11 августа 2015 11:00

Остаток дня отсчета = 4 часа

Остаток дня срока = 2 часа

(4 часа + 2 часа) < 8 часов

Оставшееся время = (4 часа + 2 часа) = 6 часов

9. Если между Точкой Отсчета и Сроком есть один или несколько полных рабочих дней

9.1. Если сумма остатков дней отсчета и срока больше суток.

В этом случае расчет выполняется как в пункте 8.1, но к этому времени прибавляется количество полных рабочих дней между Точкой Отсчета и Сроком (подсчитанное в пункте 7), умноженное на длину рабочего дня.

 

duedate_9_1

Пример:

Начало рабочего дня: 9:00

Конец рабочего дня: 21:00

Длина рабочего дня: 8 часов

Точка Отсчета: 12 августа 2015 11:00

Срок: 18 августа 2015 17:00

Количество полных рабочих дней: 3

Оставшееся время = 8 часов длина рабочего дня + 6 часов остаток + (3 * 8 часов длина рабочего дня) = 38 часов

9.2. Если сумма остатков дней отсчета и срока меньше суток, но больше длины рабочего дня.

В этом случае расчет выполняется как в пункте 8.2, но к этому времени прибавляется количество полных рабочих дней между Точкой Отсчета и Сроком (подсчитанное в пункте 7), умноженное на длину рабочего дня.

 

duedate_9_2

Пример:

Начало рабочего дня: 9:00

Конец рабочего дня: 21:00

Длина рабочего дня: 8 часов

Точка Отсчета: 12 августа 2015 13:00

Срок: 19 августа 2015 12:00

Количество полных рабочих дней: 4

Остаток дня отсчета = 8 часов

Остаток дня срока = 3 часа

(8 часов + 3 часа) > 8 часов

Оставшееся время = 8 часов длина рабочего дня + (4 * 8 часов длина рабочего дня) = 40 часов

9.3. Если сумма остатков дней отсчета и срока меньше длины рабочего дня.

В этом случае расчет выполняется как в пункте 8.3, но к этому времени прибавляется количество полных рабочих дней между Точкой Отсчета и Сроком (подсчитанное в пункте 7), умноженное на длину рабочего дня.

 

duedate_9_3

Пример:

Начало рабочего дня: 9:00

Конец рабочего дня: 21:00

Длина рабочего дня: 8 часов

Точка Отсчета: 13 августа 2015 17:00

Срок: 17 августа 2015 11:00

Количество полных рабочих дней: 1

Остаток дня отсчета = 4 часа

Остаток дня срока = 2 часа

(4 часов + 2 часа) < 8 часов

Оставшееся время = (4 часа + 2 часа) + (1 * 8 часов длина рабочего дня) = 6 часов + 8 часов = 14 часов

Алгоритм расчета фактических трудозатрат по календарным событиям

1. Если для события включен признак "Целый день", то объем фактических трудозатрат каждого участника считается равным количеству рабочих часов в дне (задается в Общих настройках приложения, обычно это 8 часов).

2. Если для события признак "Целый день" НЕ включен, то считается разница между концом и началом встречи встречи, при этом учитывается только рабочее время. Дополнительно учитываются следующие условия:

Если начало календарного события раньше начала или позже окончания рабочего дня, то к полученному количеству прибавляется 1 час;

Если прибавления часов не было, но конец календарного события раньше начала или позже окончания рабочего дня, то к полученному количеству прибавляется 1 час.

3. Если итог получился более 8 часов часов в день, то объем фактических трудозатрат за день считается равным количеству рабочих часов в дне, остальное отбрасывается.

Пример

Встреча началась в 6 часов утра и закончилась на следующий день в 23 часа.

1. По алгоритму расчета получается 16 часов.

2. Т.к. встреча в первый и во второй день начинается раньше начала рабочего дня, к полученному количеству дважды добавляется по 1 часу. Итого  18 часов.

3. Т.к. встреча занимает 2 календарных дня, то результат считается равным 16 часам (2*8 часов), остальное отбрасывается.