Перейти к содержанию

Календарь — Администрирование

Документ описывает администрирование календаря: настройку производственного календаря, планировщиков, справочников состояний и синхронизацию с 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.

Требования для включения синхронизации:

  1. URL EWS (https://exchange.example.com/EWS/Exchange.asmx).
  2. Системная учётная запись на сервере Exchange.
  3. Права для системной учётной записи: либо делегирование (AddDelegate) на каждый календарь, либо служебное право impersonate (рекомендуется).
  4. Для режима «Онлайн» — 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

Порядок действий администратора при проблемах с синхронизацией: от локального отключения пользователя до глобальной проверки настроек.

Если синхронизация конкретного пользователя автоматически отключена:

  1. Профиль пользователя → вкладка «Сервис» → блок «Синхронизация с Exchange» — посмотреть счётчик неудачных попыток.
  2. Если счётчик ≥ значения «Максимальное количество неудачных попыток синхронизации с Exchange» из Общих настроек — пользователь исключён.
  3. Журнал пользователя (вкладка «Журнал») — найти сообщение об остановке синхронизации.
  4. Системный журнал ошибок — найти причину последней неудачи (часто: переполнен/недоступен почтовый ящик, отсутствуют права имперсонализации, неверный SID).
  5. Сбросить счётчик неудачных попыток в том же блоке профиля (Сервис → «Синхронизация с Exchange»).
  6. Если ошибка не устранена — синхронизация снова отключится. До сброса убедиться, что причина устранена.

Если синхронизация глобально не работает:

  1. Общие настройки приложения → «Настройки синхронизации с Exchange Server» — проверить включён ли режим («Синхронизировать календарь с Exchange» или «Режим работы с сервисами Exchange» = «Онлайн»).
  2. Настройки сервиса ExchangeWebService — проверить URL, доменные учётные данные, имперсонализацию.
  3. CustomSettings: EnableEwsSubscriptions = true, EnableEwsCalendarInboxAccess = true.
  4. Streaming subscriptions работают только на JobServer — убедиться, что JobServer запущен.
  5. Глубже — EWS §11 и руководство по диагностике синхронизации.

Связанные документы

Дополнительные материалы по календарю и синхронизации с Exchange: