Временные зоны¶
Общие понятия¶
Для организации возможности функционирования системы в разных часовых поясах существуют настройки временных зон. Предположим, что у нас есть исполнитель в Новосибирске (UTC+7) и отправим ему задание из Москвы. Т.е. разница с Москвой +4 часа - когда в Москве полдень, в Новосибирске 16:00.
-
Пусть в Москве у нас сейчас 12:00 10 января и мы отправляем задание длительностью 4 часа.
-
Система получает временную зону исполнителя, определяет текущее время во временной зоне исполнителя (16.00 10-ое января) и обращается к календарю.
-
Зная текущее время исполнителя, можно корректно определить время для завершения задания, и оно будет 11:00 11-го января (2 рабочих часа 10-го января и 2 рабочих часа 11-го января)
-
После всех вычислений останется только записать в задании дату завершения 4.00 11-го января по UTC.
Особенности работы¶
-
Календарь не привязан к какой-то конкретной временной зоне. Значения для начала и конца рабочего времени, а также для обеда, хранятся без смещений. Т.е. при рабочем дне с 9.00 до 18.00 и обедом с 13.00 до 14.00, в календаре лежат кванты 9.00 - 9.15, 9.15 - 9.30 и т.д..
-
Все роли в системе, кроме контекстных, содержат информацию о временной зоне. Т.е. для исполнителя явным образом всегда можно определить временную зону.
-
При создании задания, информация о временной зоне берётся из роли, на которую назначено задание и записывается в задание. Аналогично для записей в истории заданий - информация о временной зоне берётся из задания, к которому относится запись в истории.
Если пользователь физически находится в той же зоне, что и задание, которое он видит (смещение временной зоны его компьютера совпадает со смещением в задании), то задание отображается привычным образом. Если же смещение временной зоны компьютера пользователя не совпадает со смещением в задании, то пользователь увидит рядом с оставшимся временем приписку с временной зоной, к которой относится задание.
Если задание просрочено, то срок его исполнения, который отображается после информации о просрочке, по-прежнему отображается в локальном времени компьютера пользователя. Несмотря на то, что для просрочки указана приписка с временной зоной.
Note
В лёгком клиенте нет возможности определить локальную временную зону пользователя, поэтому, описанный выше алгоритм опирается не на него, а на ту информацию о временной зоне, которая указана в карточке сотрудника.
Note
Вместе с временными зонами в платформе появилась возможность отправлять задания, указывая не плановую дату завершения, а просто срок в квантах. Подробнее об этом можно прочитать в “Руководсвте администратора” в разделе Указание сроков выполнения задачи в квантах.
Note
Так же при отправке задания с указанием плановой даты, появилась возможность трактовать эту дату, как дату во времени исполнителя или же автора задания. Подробнее об этом можно прочитать в “Руководсвте администратора” в разделе Плановая дата завершения задания во временной зоне автора или исполнителя.
Карточка настройки временных зон¶
Для хранения информации о временных зонах и их смещениях, а также для хранения дополнительных настроек, связанных с временными зонами, существует карточка-справочник “Временные зоны”. В списке временных зон есть зона “По умолчанию”, которая, на только что установленной системе, указана для всех ролей, которые требуют указания временной зоны. Также, эта зона используется в тех случаях, если по тем или иным причинам определить зону не удалось. Указанные в этой карточке временные зоны используются как источник данных для выбора, при указании временной зоны в ролях. Но если для всех ролей и сотрудников предполагается, что они находятся в одной временной зоне, то можно просто запретить редактирование временных зон и использовать зону “По умолчанию”, установив в ней необходимое смещение.
Открыть карточку настройки временных зон можно из правого меню - Настройки → Временные зоны. Карточка доступна только администраторам системы.
Карточка настройки временных зон содержит в себе:
-
Настройку, запрещающую/разрешающую редактирование временных зон в ролях.
-
Справочник временных зон - таблица со списком доступных временных зон.
Так же в левом меню этой карточки расположены служебные тайлы для работы с временными зонами.
Запрет редактирования временных зон в ролях
Если не установлен флаг “Разрешить менять зоны в ролях”, то поля для ввода временных зон будут недоступны для редактирования во всех ролях.
Временная зона по умолчанию
Зона с идентификатором “0” в списке временных зон является временной зоной “По умолчанию”. Её нельзя удалить или поменять ей “Идентификатор зоны” и “Отображаемое значение”. Можно лишь изменить “Код зоны” и “Смещение”. Эта зона будет использована в тех случаях, если временную зону определить не удалось. Например, когда не заполнено поле в роли или генератор метаролей не предоставил информацию о временной зоне.
Также, при установке “чистой” системы из сборки, эта зона прописана для всех ролей, которые присутствуют в системе. Смещение зоны “По умолчанию” можно задать при установке через скрипты “Setup.bat”, “setup.sh” и т.д.. Или же можно поменять смещение в временной зоне “По умолчанию” - уже после установки системы, зайдя в картчоку настройки временных зон.
Добавление и редактирование временных зон
Двойным нажатием левой кнопки мыши на любую из строк в таблице временных зон, можно поменять её параметры.
Доступны для изменения следующие параметры:
-
“Идентификатор зоны” - уникальный идентификатор, по которому сопоставляются со справочником временные зоны, указанные в ролях, заданиях и записях истории заданий.
-
“Код зоны” - алиас, который описывает временную зону.
-
“Отображаемое значение” - универсальное отображаемое имя.
-
“Смещение” - время, на которое временная зона отличается от UTC.
-
“Отрицательное направление сдвига” - признак того, что “Смещение” относительно UTC направлено в отрицательную сторону.
Note
При указании в роли временной зоны, в неё так же записывается и смещение из справочника. Если после указания в роли - временная зона перестанет существовать в справочнике, роль продолжит функционировать с указанным смещением.
Note
При изменении в справочнике смещения зоны - во всех ролях, где указана данная временная зона, информация о смещении обновится автоматически. Если изменён идентификатор зоны, то в ролях автоматического обновления смещений не будет. Принудительно обновить смещения во всех ролях можно с помощью тайла “Обновить смещения”, расположенной в левом меню карточки настроек временных зон.
Так же можно добавлять новые временные зоны, если нажать на кнопку “Добавить” под таблицей временных зон. Важно учитывать то, что добавить временную зону с повторяющимся “Идентификатором зоны” нельзя.
Служебные тайлы
В левом выпадающем меню карточки настроек временных зон находятся специальные служебные тайлы.
-
“Заполнить временные зоны” - очищает карточку временных зон и наполняет из справочника операционной системе на сервере.
-
“Установить зону “По умолчанию”” - устанавливает для всех ролей временную зону “По умолчанию”, указанную в справочнике.
-
“Обновить связи” - проверяет и исправляет, если необходимо, временные зоны, проставленные за счёт иерархии наследования временных зон между подразделениями, сотрудниками и статическими ролями.
-
“Обновить смещения” - проверяет и исправляет смещения в ролях, согласно справочнику из карточки временных зон.
Временные зоны в ролях¶
В карточках ролей имеется поле для указания временной зоны. В большинстве ролей это поле позволяет выбрать временную зону из справочника, если в карточке настроек временных зон указанно, что можно редактировать временные зоны в ролях. В карточках метаролей и ролей задания редактирование временной зоны невозможно, т.к. зона в них определяется при создании или пересчёте роли.
Note
При изменении временной зоны в роли, на которую назначалось задание, временная зона в задании остаётся неизменной.
Note
Временная зона может наследоваться от статических ролей к дочерним статическим ролям, от подразделений к дочерним подразделениям и от подразделений к сотрудникам в их составе. Для указания необходимости наследования временной зоны от родителя, есть специальный флаг в карточке статических ролей, департаментов и сотрудников.
Ниже описаны особенности настройки временных зон в разных типах ролей:
-
Сотрудник
В карточке сотрудника можно указать временную зону или проставить флажок, который включает наследование временной зоны от подразделения. При установке этого флажка, сотрудник будет получать временную зону от своего подразделения или использовать временную зону “По умолчанию”, если не состоит ни в одном из подразделений.
-
Подразделение
В карточке подразделения можно указать временную зону или проставить флажок, который включает наследование временной зоны от родительского подразделения. При установке этой галочки, подразделение будет получать временную зону от своего родителя или использовать временную зону “По умолчанию”, если родителя нет.
-
Статическая роль
В карточке статической роли можно указать временную зону или проставить флажок, который включает наследование временной зоны от родительской статической роли. При установке этой галочки, роль будет получать временную зону от своего родителя или использовать временную зону “По умолчанию”, если родителя нет.
Note
Сотрудники, состоящие в составе статической роли, не наследуют временную зону от неё.
-
Динамическая роль
В динамических ролях не может быть наследования и поэтому временную зону в них можно только указать вручную.
-
Метароль
В карточке метароли есть поле с временной зоной, но указать его вручную нельзя. Кроме того, также, как и в динамической роли, наследование временной зоны - не предполагается. Временной зоной в метаролях управляет их генератор. Для указания временной зоны - необходимо, чтобы генератор метаролей вернул нужную временную зону в результатах запроса. Например, как в генераторе для “Агрегатных ролей”.
Note
Колонка с идентификатором временной зоны должна идти пятой и может иметь любой алиас. Если колонки с идентификатором временной зоны не будет, то считается, что метароль имеет временную зону “По умолчанию”.
-
Контекстная роль
В карточке контекстной роли нельзя указать временную зону. Дело в том, что состав контекстной роли рассчитывается непосредственно в момент отправки и записывается в роль задания. Подробнее об этом можно почитать в разделе time_zones.md
#TimeZonesTaskRole
-
Роль задания
Роль задания создаётся, когда задание отправлялось на роль с заранее неизвестным составом. Например в тех случаях, когда исполнителем задания указана контекстная роль, или же состав исполниелей вычисляется как-то ещё, как в случае с отправкой на группу сотрудников. Роль задания имеет временную зону, но её невозможно изменить из карточки, т.к. временная зона определяется в момент создания роли. Для определения временной зоны роли задания берётся временная зона первого сотрудника из состава роли, отсортированного по уникальному идентификатору сотрудника.
Наследование временных зон¶
В статических ролях, подразделениях и сотрудниках можно установить необходимость наследования временной зоны из родителя. Для этого есть специальный флаг “Наследовать временную зону”.
При установке этого флага сбрасывается указанная в роли временная зона, а после сохранения карточки роли - устанавливается такой же как у родителя.
-
При наследовании в подразделениях - наследуется временная зона родительского подразделения. Если нет родителя - подтянется зона “По умолчанию”.
-
При наследовании в роли сотрудника - наследуется временная зона подразделения, в которое входит сотрудник.
-
При наследовании в статических ролях - наследуется временная зона родительской статической роли. Если нет родителя - подтянется зона “По умолчанию”.
Note
Если сотрудник наследует временную зону от подразделения, и он состоит в нескольких подразделениях, то будет унаследована временная зона первого подразделения из списка его подразделений, отсортированных по уникальному идентификатору подразделения.
Note
Статические роли наследуют временные зоны только между собой. Сотрудники, входящие в состав статической роли, не наследуют от них временную зону.