Календарь — Администрирование¶
Документ описывает администрирование календаря: настройку производственного календаря, планировщиков, справочников состояний и синхронизацию с Exchange (EWS). Для администраторов и инженеров поддержки. Разделы: механизмы администрирования, ключевые настройки (производственный календарь, планировщик, типы отсутствий, EWS), масштабы представлений, типичные ошибки настройки, диагностика синхронизации.
Календарь охватывает настройку производственного календаря, планировщиков и справочников календарных состояний. Администрирование использует:
- Автоадминка — 1 форма (планировщик)
- Отдельная SPA-страница — 1 форма (производственный календарь) — зарегистрирована в дереве автоадминки, но открывает собственную SPA-страницу
- Редактор сущностей — 2 схемы (
absencetype— типы отсутствий,freebusystate— статусы занятости)
Механизмы администрирования¶
Автоадминка:
| Alias формы | Название | Таблица БД | Папка |
|---|---|---|---|
scheduler-settings |
Планировщик | dbo.SchedulerSettings | Пользовательский интерфейс |
Отдельная SPA-страница (в дереве автоадминки):
| Alias формы | Название | Url | Таблица БД | Папка |
|---|---|---|---|---|
production-calendar |
Производственный календарь | /administration/product-calendar |
dbo.ProductionCalendarEx | Общая бизнес-логика |
Редактор сущностей:
| Схема JSON | Таблица | Назначение |
|---|---|---|
absencetype |
dbo.AbsenceTypes | Типы отсутствий (больничный, отпуск, командировка) |
freebusystate |
(схема редактора сущностей) | Статусы занятости/свободности в календарных сценариях |
Ключевые настройки¶
Производственный календарь (ProductionCalendarEx)¶
Где настраивается: SPA-страница /administration/product-calendar (пункт production-calendar в дереве автоадминки)
Таблица БД: dbo.ProductionCalendarEx
8 полей: даты, типы дней (рабочий/выходной/праздник), описания.
| Группа полей | Что контролирует |
|---|---|
| Дата, тип дня | Рабочий / выходной / праздничный / сокращённый |
| Описание | Название праздника/события |
| Год | Привязка к конкретному году |
Как применяется: данные используются функциями dbo.tc_AddWorking*Ex / dbo.tc_DiffWorking*Ex для расчёта сроков задач и просрочек. Загрузка через API app/v1.2/api/calendar/sendcalendardata.
Планировщик (SchedulerSettings)¶
Где настраивается: автоадминка → форма scheduler-settings
Таблица БД: dbo.SchedulerSettings
14 полей: расписания фоновых задач календарного контура.
| Группа полей | Что контролирует |
|---|---|
| Интервалы обновления | Частота синхронизации с внешними календарями |
| Параметры повторных попыток | Повторные попытки при ошибках |
| Таймауты | Ограничения по времени выполнения |
Как применяется: управляет фоновыми процессами синхронизации Exchange/CalDav/OForma календарей.
Типы отсутствий и статусы занятости (Редактор сущностей)¶
Справочники календарных состояний настраиваются через Редактор сущностей и используются в интерфейсе календаря, процессах согласования и при отображении доступности.
Типы отсутствий: настраивается через Редактор сущностей → absencetype, таблица dbo.AbsenceTypes. Классификация отсутствий: отпуск, больничный, командировка и т.д. Используется в интерфейсе календаря и процессах согласования.
Статусы занятости: настраивается через Редактор сущностей → freebusystate. Состояния занятости пользователя (свободен, занят, предварительно, нет на месте). Используется при отображении доступности в календарных сценариях.
Синхронизация с Exchange (EWS) — настройка в админке¶
Технические детали EWS (архитектура провайдера, аутентификация, push-синхронизация, маппинг полей, операции с событиями, ограничения) — в Календарь — синхронизация с Exchange (EWS). Диагностика синхронизации пользователя — в отдельном руководстве.
Здесь — только «где в админке настроить» и какому ключу/флагу соответствует поле интерфейса.
Предварительные требования и точки настройки EWS¶
Перед включением синхронизации с Exchange нужны: URL EWS, системная учётная запись с правами impersonate (рекомендуется) или делегирования, и Exchange 2013+ для режима «Онлайн». Сценарий настройки зависит от наличия синхронизации с Active Directory.
Требования для включения синхронизации:
- URL EWS (
https://exchange.example.com/EWS/Exchange.asmx). - Системная учётная запись на сервере Exchange.
- Права для системной учётной записи: либо делегирование (
AddDelegate) на каждый календарь, либо служебное правоimpersonate(рекомендуется). - Для режима «Онлайн» — Exchange 2013 или выше.
| Контекст | Где настраивается | Owner-документ |
|---|---|---|
| С AD | Сервис ExchangeWebService (страница «Сервисы») + Общие настройки приложения |
предпочтительно — настройки сервиса |
| Без AD | Только Общие настройки приложения; сервис EWS по умолчанию выбирается там же (поле «Сервис EWS») | Общие настройки |
| По пользователю | Профиль пользователя → вкладка «Сервис» → блок «Режим работы с сервисами Exchange» | переопределяет глобальные настройки |
Поля сервиса ExchangeWebService¶
Где: страница «Сервисы» → создать сервис типа ExchangeWebService → его настройки.
| Поле интерфейса | Назначение | Что под ним |
|---|---|---|
| Сервис | Выбор предварительно созданного сервиса с типом ExchangeWebService |
ссылка на запись в Services |
| Домен | Имя домена компании | используется при доменной (Basic) авторизации |
| Url | Адрес вызова сервиса EWS | адрес вызова EWS |
| Логин / Пароль | Учётные данные системной учётной записи. Пароль хранится в зашифрованном виде | Basic Auth |
| Использовать имперсонализацию | Соединение перевоплощается в нужного пользователя при изменении его событий. Приоритетнее, чем «Использовать перевоплощение» в Общих настройках | перевоплощение в пользователя (EWS §2) |
| Использовать SID для перевоплощения | Если включено — перевоплощение по SID (значение берётся из AD); иначе — по SMTP-адресу | флаг UseSIDForImpersonalization |
| Разрешить пользователям смотреть чужие календари используя права системной учётной записи | Отображение чужих календарей через права системного аккаунта | право доступа |
| Показывать только занятость при просмотре календарей с чужого сервиса | Пользователи без отношения к сервису видят синие слоты «Занят» без деталей | право доступа |
| Показывать только занятость при просмотре чужих календарей с домашнего сервиса | То же — для пользователей собственного сервиса | право доступа |
⚠️ Правило входа в аккаунт: при активной имперсонализации (или для пользователя в домене) используется SID; если «Использовать SID для перевоплощения» неактивна или SID отсутствует, либо имперсонализация выключена — вход по email из профиля пользователя.
После создания сервис нужно выбрать в поле «Настройки EWS» при настройке синхронизации с AD.
Поля Общих настроек приложения (синхронизация с Exchange)¶
Где: Общие настройки приложения → секция «Настройки синхронизации с Exchange Server».
| Поле интерфейса | Назначение |
|---|---|
| Адрес EWS | URL EWS — для синхронизации календарей и импорта контактов |
| Категории событий, которые не будут синхронизированы | Список категорий Exchange через ; (исключаются из синхронизации) |
| Режим работы с сервисами Exchange | Режим по умолчанию для новых пользователей — автоматически прокидывается в их профиль |
| Синхронизировать календарь с Exchange (событийный режим) | Событийная синхронизация; см. EWS §3 |
| Синхронизировать периодические встречи с Exchange | Включает синхронизацию повторяющихся событий |
| Не синхронизировать события старше, дней | Глубина синхронизации для событийного режима; 0 = без ограничения |
| Максимальное количество неудачных попыток синхронизации с Exchange | При превышении — пользователь автоматически исключается из синхронизации; 0 = без ограничения |
| Использовать перевоплощение | Сервисный аккаунт перевоплощается в организатора. Менее приоритетна, чем «Использовать имперсонализацию» в настройках сервиса |
| Доменная авторизация | Включено — синхронизация для сервера в домене; выключено — для сервера в рабочей группе |
| Логин / Пароль / Домен | Учётные данные служебного аккаунта (пароль шифруется в интерфейсе) |
По пользователю: «Режим работы с сервисами Exchange»¶
Где: профиль пользователя → вкладка «Сервис» → блок «Режим работы с сервисами Exchange».
| Значение в интерфейсе | Действие | Поле в БД |
|---|---|---|
| Выключено | Sync календаря отключён | DoSyncWithExchange = false, CalendarEwsDirectSync = false |
| Онлайн | События читаются напрямую из Exchange без локальных сущностей. Требует Exchange 2013+ | CalendarEwsDirectSync = true |
Полная матрица режимов и ограничения — в EWS §3.
⚠️ Только для лицензированных пользователей. Для пользователей без лицензии «Первой Формы» календарь не синхронизируется, даже если режим включён.
⚠️ Доступ к чужим событиям в режиме «Онлайн»: только при включённой имперсонализации в настройках сервиса. Исключение — системный пользователь «Робот 1Ф».
CustomSettings — пул, подписки, кэш и CalendarExtParams¶
Параметры пула, таймаутов, кэшей, логирования и поведения push-подписок задаются через CustomSettings (страница «Настройки приложения» → пользовательские ключи). Полный перечень — в EWS §8:
- размер пула и параметры семафора (
ExchangeConnectionPoolSize,ExchangeSemaphoreCount,ExchangeSemaphoreWait); - push-подписки (
EnableEwsSubscriptions,EnableEwsEmailSubscriptions,EnableEwsCalendarInboxAccess,ExchangeConnectionLifetime); - TTL кэша прав (
ExchangePermissionsCacheLifeTime, default 5 мин); - автоотключение синхронизации при ошибках (
EnableEwsSetDirectSyncDisabledWhenEwsErrorsOccurs); - логирование (
WriteEwsRequestDurationToAutomationLog,ExchangeSubscriptionsToLog); - видимость событий без прав в Exchange (
EWSDoNotCheckUserRight+EWSShowBusyStatus).
CustomSettings — CalendarExtParams: JSON-маппинг ID ДП в календарной категории на семантику событий — без него планирование встреч из задач не работает. Все ID в одном объекте:
allDayExtParamId, conferenceExtParamId, freeBusyStatusIDExtParamId,
fromExtParamId, locationIdExtParamId, meetingCommentIDExtParamId,
participantIDExtParamId, taskExtParamId, toExtParamId, typeIdExtParamId
Каждый ключ — int (ID соответствующего ДП в системной календарной категории). Используется при создании / редактировании встреч из карточки задачи и при синхронизации с Exchange.
appsettings.json — серверные ключи и лимиты синхронизации¶
Серверные ключи применяются на старте приложения и управляют поведением синхронизации Exchange:
| Ключ | Тип | Назначение |
|---|---|---|
IsExchangeSyncServer |
bool | Сервер, держащий соединения с Exchange и принимающий уведомления (для multi-server установок — ровно один) |
UseExchangeAutodiscover |
bool | Использовать AutoDiscover для определения адреса EWS |
ExchangeTraceListenerFlags |
string | Флаги TraceFlags для трейсов EWS-запросов. Если ключ не задан — трейсы не собираются |
CreateTasksForAppointments |
bool / true |
При создании встречи в Exchange создаётся ли задача в системной календарной категории. false — для ускорения синхронизации |
Лимиты, горизонты и ретраи синхронизации встреч:
| Ключ | По умолчанию | Назначение |
|---|---|---|
Appointments_TimeTryToReacreateMins |
10 |
Время (мин), в течение которого система повторяет попытки пересоздать встречу в EWS при сбое |
AppointmentsToExternal_HandleOpenExternalConnection |
false |
Включает обработчик события открытия соединения с Exchange |
AppointmentsToExternal_NotSyncedAppointmentsLimit |
100 |
Максимум необновлённых встреч из 1Ф в Exchange при открытии соединения. Рекомендуется снизить до 10 |
AppointmentsToTasks_NotSyncedAppointmentsLimit |
50 |
Лимит встреч, создаваемых задачами при «отстающей» синхронизации. Рекомендуется снизить до 10 |
AppointmentsToTasks_FutureDaysLimit |
180 |
Горизонт синхронизации в будущем (дней от текущей даты). События позже горизонта создаются позднее |
AppointmentsToTasks_OccurrencesCountLimit |
50 |
Сколько повторений создаётся для бесконечного recurring-события (если в задаче «Без ограничений») |
AppointmentsToTasks_OccurrencesDaysLimit |
180 |
Горизонт повторений для бесконечного recurring (дней) |
AppointmentsToTasks_OccurrencesPastDaysLimit |
— | Горизонт повторений в прошлое (дней). Начиная с этой даты создаются задачи-повторения |
Ограничения видимости чужих событий и типы отсутствий¶
Чтобы пользователь видел только свои встречи (чужие — синими слотами «Занят» без деталей), нужно одно из:
- отключить право группы на группу «Просматривать календарные события членов группы» (см.
domains/permissions); - в настройках сервиса
ExchangeWebServiceвключить «Показывать пользователям только занятость при просмотре календарей с чужого сервиса».
В настройках типа отсутствия (см. раздел «Типы отсутствий» выше) есть флаг «Синхронизировать с Exchange» — он управляет цветовым обозначением имён в зависимости от типа занятости при синхронизации с календарём Exchange.
Масштабы представлений «Календарь» и «Ресурсы»¶
Связано. Включение/отключение представлений категории и выбор представления по умолчанию — в Категории — администрирование §28. Здесь — только масштабы Календаря и Ресурсов и флаг отображения задач в терминальном статусе.
Где настраивается: в категории → блок настроек представления → у блока «Календарь» / «Ресурсы» — кнопка «шестерёнка» → переход к настройкам доступных масштабов.
Запоминание выбора: система запоминает последний выбранный пользователем масштаб и при следующем открытии возвращает его. «Масштаб по умолчанию» используется только при первом открытии или для нового пользователя.
Масштабы представления «Календарь» (6 значений):
| Масштаб | Описание |
|---|---|
| Месяц | Задачи на месяц, в виде списка |
| Месяц (Карточка) | Задачи на месяц, в виде карточек |
| Неделя | Задачи на неделю, в виде списка |
| Расписание | Задачи на неделю, в виде карточек |
| Рабочая неделя | Задачи на неделю без выходных, в виде списка |
| День | Задачи на день, в виде списка |

Масштабы представления «Ресурсы» (7 значений):
| Масштаб | Описание |
|---|---|
| Годы | По годам с разбивкой по кварталам. По умолчанию — текущий год по ширине экрана |
| Месяцы | По месяцам. По умолчанию — текущее полугодие |
| Месяцы/недели | По месяцам с разбивкой по первому дню недели. По умолчанию — текущее полугодие |
| Недели | По неделям с разбивкой по первому дню недели. По умолчанию — текущая дата по центру экрана |
| Неделя | По дням (по умолчанию). Только текущая неделя по ширине экрана |
| День | По дням, с разрешением до часа. Прокрутка вправо/влево недоступна — переход стрелками или выбором даты |
| Расписание | По календарным неделям. Прокрутка стрелками или выбором даты |

Флаг «Отображать задачи в терминальном статусе» (блок «Календарь»):
| Состояние | Поведение |
|---|---|
| Активен | В календарном представлении категории и в системном календаре отображаются завершённые и отклонённые задачи |
| Неактивен | В календарном представлении только активные (незавершённые) задачи |
Типичные ошибки настройки¶
Ниже — частые симптомы при настройке календаря и синхронизации с Exchange: вероятная причина, где проверить в интерфейсе и запрос для диагностики в БД.
| Симптом | Причина | Где проверить | SQL-диагностика |
|---|---|---|---|
| Нерабочие дни не совпадают с ожиданием | Некорректные данные в производственном календаре | Форма production-calendar |
select * from dbo.ProductionCalendarEx where [Year] = {year} order by [Date] |
| Неверно считаются сроки/просрочка | Производственный календарь не заполнен на нужный период | dbo.ProductionCalendarEx |
select min([Date]), max([Date]) from dbo.ProductionCalendarEx |
| Агенда/события пустеют на периоде | Неверные настройки провайдера или таймзона | Настройки провайдера пользователя | select * from dbo.SchedulerSettings |
| Фоновая синхронизация не работает | Некорректные настройки планировщика | Форма scheduler-settings |
select * from dbo.SchedulerSettings |
| Тип отсутствия не отображается | Не настроен в редакторе сущностей | Редактор сущностей absencetype |
select * from dbo.AbsenceTypes |
| Пользователь автоматически исключён из синхронизации EWS | Превышено «Максимальное количество неудачных попыток синхронизации с Exchange» | Профиль пользователя → «Сервис» → блок «Синхронизация с Exchange» (счётчик неудачных попыток) | select UserID, UserName, DoSyncWithExchange, CalendarEwsDirectSync, SyncWithExchangeFailedAttempts from Users where UserID = @userId |
| Нет push-обновлений событий | Streaming-подписки выключены или JobServer не запущен | CustomSettings: EnableEwsSubscriptions; запущен сервер заданий (JobServer). Подробности — EWS §11 |
— |
| Чужие календари недоступны в режиме «Онлайн» | Не включена «Использовать имперсонализацию» в настройках сервиса | Настройки сервиса ExchangeWebService |
select * from dbo.EwsServiceSettings |
| Не отображается выбранный масштаб Календаря/Ресурсов | Масштаб выключен в настройках представлений категории | Настройки категории → блок «Календарь» / «Ресурсы» → шестерёнка | См. categories/admin.md §28 |
Диагностика синхронизации с Exchange (для администратора)¶
Не дублирует Календарь — синхронизация с Exchange (EWS) §11 (SQL-диагностика) и Exchange — диагностика синхронизации пользователя (детальное руководство). Здесь — порядок действий администратора в интерфейсе.
Пошаговая диагностика синхронизации с Exchange¶
Порядок действий администратора при проблемах с синхронизацией: от локального отключения пользователя до глобальной проверки настроек.
Если синхронизация конкретного пользователя автоматически отключена:
- Профиль пользователя → вкладка «Сервис» → блок «Синхронизация с Exchange» — посмотреть счётчик неудачных попыток.
- Если счётчик ≥ значения «Максимальное количество неудачных попыток синхронизации с Exchange» из Общих настроек — пользователь исключён.
- Журнал пользователя (вкладка «Журнал») — найти сообщение об остановке синхронизации.
- Системный журнал ошибок — найти причину последней неудачи (часто: переполнен/недоступен почтовый ящик, отсутствуют права имперсонализации, неверный SID).
- Сбросить счётчик неудачных попыток в том же блоке профиля (
Сервис→ «Синхронизация с Exchange»). - Если ошибка не устранена — синхронизация снова отключится. До сброса убедиться, что причина устранена.
Если синхронизация глобально не работает:
- Общие настройки приложения → «Настройки синхронизации с Exchange Server» — проверить включён ли режим («Синхронизировать календарь с Exchange» или «Режим работы с сервисами Exchange» = «Онлайн»).
- Настройки сервиса
ExchangeWebService— проверить URL, доменные учётные данные, имперсонализацию. - CustomSettings:
EnableEwsSubscriptions = true,EnableEwsCalendarInboxAccess = true. - Streaming subscriptions работают только на JobServer — убедиться, что JobServer запущен.
- Глубже — EWS §11 и руководство по диагностике синхронизации.
Связанные документы¶
Дополнительные материалы по календарю и синхронизации с Exchange:
- Календарь — синхронизация с Exchange (EWS) — аутентификация, push-подписки, CustomSettings, диагностика
- Exchange — диагностика синхронизации пользователя
- Категории — администрирование — §28 «Представления категории»: включение/отключение представлений, выбор по умолчанию
- Интеграции — администрирование — внешние сервисы