Документооборот КОРП, ДГУ
27.01.2016

Календарь

Общая информация

Календарь в "1С:Документообороте" предназначен для планирования времени пользователей. В календаре отображается информация о записях календаря, мероприятиях, отсутствиях, занятом и свободном времени. Основной способ использования календаря – через команду Мой календарь. Для просмотра календарей других пользователей используется команда Все календари в разделе Совместная работа.

Метаданные

Используемые метаданные отнесены к подсистеме РабочийКалендарь.

Основная логика работы сосредоточена в общих модулях. Список общих модулей:

Используется четыре подписки на события – КалендарьПередЗаписьюПредмета, КалендарьПередЗаписьюУчастников, КалендарьПриЗаписиПредмета, КалендарьПриЗаписиУчастников. Данные подписки используются для отображения актуальной информации о мероприятиях в календарях пользователей.

За возможность работы с рабочим календарем отвечает функциональная опция РабочийКалендарь. Значение данной функциональной опции привязано к константе ИспользоватьРабочийКалендарь. При включении функциональной опции становятся доступны возможности работы с календарем пользователей и проверка доступности.

Общие картинки ДоступенЛегенда, ПодВопросомЛегенда, ЗанятЛегенда, ОтсутствуетЛегенда предназначены для описания цветов, которые используются в календаре для обозначения занятости. Картинки отображаются в календаре пользователя.

Общие картинки ЗаписьКалендаряУдалена, ЗаписьКалендаряПодВопросом, ЗаписьКалендаряОтклонена используются для отображения состояния записи календаря в планировщике. Они обозначают удаленные записи календаря, записи календаря под вопросом и отклоненные записи календаря.

Общие картинки КоллекцияЦвет, ЦветЖелтый, ЦветЗеленый, ЦветКрасный, ЦветОранжевый, ЦветПоУмолчанию, ЦветСиний обозначают возможные цвета календаря. Ими обозначаются цвета в режиме отображения План дня, команды установки цветов, текущий цвет в карточке записи календаря.

Для установки цветов записей календаря в планировщике используются элементы стиля. За цвета самих элементов отвечают элементы стиля ЦветКалендаряЖелтый, ЦветКалендаряЗеленый, ЦветКалендаряКрасный, ЦветКалендаряОранжевый, ЦветКалендаряПоУмолчанию, ЦветКалендаряСиний.

За цвета рамок элементов отвечают элементы стиля РамкаКалендаряЖелтая, РамкаКалендаряЗеленая, РамкаКалендаряКрасная, РамкаКалендаряОранжевая, РамкаКалендаряПоУмолчанию, РамкаКалендаряСиняя.

За цвета, обозначающие занятость в планировщике, отвечают элементы стиля ЦветКалендаряДоступноеВремя, ЦветКалендаряПодВопросомВремя, ЦветКалендаряЗанятоеВремя, ЦветКалендаряОтсутствует. Дополнительно, при выборе времени мероприятия, выбранное на данный момент время отображается фоном из элемента стиля ФонВыбранногоВремени.

Цвет текста для элементов планировщика хранится в элементе стиля ЦветКалендаряПодпись.

Цвет фона текущего дня в планировщике и в плане дня хранится в элементе стиля ЦветКалендаряФонТекущегоДня. Цвет текста для обозначения текущего дня в плане дня хранится в элементе стиля ЦветКалендаряПодписьТекущийДень.

Цвет фона шапки и шкалы времени планировщика хранится в элементе стиля ЦветКалендаряФонШапки.

Справочник ЗаписиРабочегоКалендаря хранит информацию о записях календаря пользователя. В данном справочнике хранится информация о записях календаря, о повторяющихся записях календаря и мероприятиях.

Перечисление ДоступностьПользователя определяет базу для расчета занятости пользователя – считать ли пользователя всегда доступным, всегда занятым или же рассчитывать по специальному расписанию. Значение настройки используется в регистре сведений НастройкиРабочегоКалендаря, но для получения значения настройки с учетом значения по умолчанию следует использовать функцию ПолучитьНастройкуДоступностиПользователя модуля РаботаСРабочимКалендаремСервер.

Перечисление НастройкиЗаписейРабочегоКалендаря определяет доступные настройки для записей календаря. Используется для разделения хранимых настроек в регистре сведений НастройкиОтображенияЗаписейРабочегоКалендаря.

Перечисление НастройкиРабочегоКалендаря определяет доступны настройки для календаря пользователя в целом. Используется для разделения хранимых настроек в регистре сведений НастройкиРабочегоКалендаря.

Перечисление ОтображениеВремениЭлементов используется для работы с настройками планировщика, соответствует системному перечислению ОтображениеВремениЭлементовПланировщика. Хранится в персональных настройках пользователя.

Перечисление ПериодОтображенияРабочегоКалендаря используется для хранения различных вариантов отображения календаря, таких как день, неделя, месяц, план дня. Носит служебный характер на форме плана дня для рабочего стола и форме подбора времени мероприятия. На форме календаря пользователя доступен выбор варианта.

Перечисление ПравилаОкончанияПовторения содержит варианты правил окончания повторения для записей календаря. Хранится в реквизитах записи календаря.

Перечисление СостоянияЗанятости обозначает состояние занятости на конкретное время. Используется для обозначения отдельных элементов занятости в регистре сведений ЗанятостьПользователя и для обозначения итоговой рассчитанной занятост с помощью функции ПолучитьТаблицуЗанятости модуля РаботаСРабочимКалендаремСервер.

Перечисление СостоянияЗаписейРабочегоКалендаря обозначает состояние конкретной записи календаря, влияет на занятость во время записи календаря.

Перечисление ТипЗаписиКалендаря позволяет отличать обычные записи календаря от повторяющихся. Повторяющиеся записи календаря обозначаются как ПовторяющеесяСобытие, обычные записи календаря обозначаются как Событие и ЭлементПовторяющегосяСобытия. ЭлементПовторяющегосяСобытия обозначает, что данная запись календаря когда-то была частью повторяющееся записи календаря, но в неё были внесены изменения.

Перечисление ЦветаРабочегоКалендаря хранит значение настройки цвета записи календаря. Хранится в регистре сведений НастройкиОтображенияЗаписейРабочегоКалендаря.

Перечисление ЧастотаПовторения используется для определения правила повторения у записей рабочего календаря, обозначает как часто происходит повторение.

Перечисление ЭлементыРабочегоКалендаря используется для различения элеметов в планировщике – являются они обычными записями календарями (Событие) или повторяющимися (СобытиеПовторяюееся).

Регистр сведений ДоступноеВремяПользователя предназначен для настройки стандартного расписания доступности пользователя. Когда доступность пользователя настраивается по расписанию в данном регистре сведений хранится правила занятости пользователя на неделю.

Регистр сведений ЗанятостьПользователя предназначен для настройки занятости и доступности пользователя на конкретное время. Хранит информацию в том случае, если доступность на конкретное время отличается от доступность пользователя по расписанию.

Регистр сведений НастройкиОтображенияЗаписейРабочегоКалендаря хранит персональные настройки отображения конкретных записей календаря. Информация о цветах записей календаря хранится в данном регистре.

Регистр сведений НастройкиРабочегоКалендаря хранит настройки календарей пользователя. Информация о способе настройки доступности пользователя хранится в данном регистре.

Регистр сведений СвязанныеЗаписиКалендаря является служебным регистром, в нем хранится информация о связи мероприятий с записями календаря, созданными автоматически. Предназначен для поддержания автоматически созданных записей календаря в актуальном состоянии.

Внутреннее устройство

Планировщик

Для отображения календаря пользователя используется специальный элемент управления – Планировщик. Данное отображение используется в календаре для различных видов и при подборе времени мероприятия.

Для отображения данных в планировщике используются настройки отображения календаря. Структуру настроек отображения календаря можно получить с помощью функции ПолучитьНастройкиОтображения общего модуля РаботаСРабочимКалендаремСервер. В типовом случае достаточно уточнить в полученной структуре отображаемую дату (ОтображаемаяДата), все выделенные для отображения даты (ВыделенныеДаты), период отображения (ПериодОтображения) и пользователей, чей календарь необходимости отобразить (Пользователи). Для отображения планировщика необходимо вызвать процедуру ОтобразитьКалендарь общего модуля РаботаСРабочимКалендаремСервер – он будет заполнен в соответствии с переданными параметрами.

Отображение календаря разделено на две процедуры – загрузку данных в процедуре ЗагрузитьДанныеПланировщика общего модуля РаботаСРабочимКалендаремСервер и применение настроек отображения в процедуре ПрименитьНастройкиОтображения общего модуля РаботаСРабочимКалендаремКлиентСервер. Применение настроек отображения вынесено в клиент-серверный модуль для возможности применения настроек без клиент-серверных вызовов, при частичном обновлении данных на клиенте. Сами элементы планировщик специальным образом формируются из записей календаря с помощью функции ПолучитьСтруктуруЭлементаПланировщика общего модуля РаботаСРабочимКалендаремСервер.

Занятость в планировщике может отображаться как в виде фона, так и в виде элементов планировщика. Стандартно занятость отображается в виде фона. В случае если в настройках отображения ОтображатьЗанятость установлено в Истина, а ОтображатьСобытия установлено в Ложь – занятость отображается в виде элементов планировщика. Для получения элемента планировщика из занятость используется функция ПолучитьСтруктуруЭлементаПланировщикаЗанятость общего модуля РаботаСРабочимКалендаремСервер. Основные данные календаря при этом хранятся в структуре, сформированной с помощью функции СформироватьЭлементЗаписиКалендаря общего модуля РаботаСРабочимКалендаремКлиентСервер.

Основная логика настроек отображения планировщика прописана в процедуре ПрименитьНастройкиОтображения общего модуля РаботаСРабочимКалендаремКлиентСервер. Отдельно внимание следует обратить на то, что измерения устанавливаются только для случая отображения планировщика для нескольких пользователей. Если планировщик отображается для одного пользователя, то измерение Пользователь не используется и следует использовать не связанные с планировщиком способы определения, какому пользователю принадлежит отображаемый календарь (в форме Календарь – это реквизит ПользовательКалендаря).

Настройка шкал времени планировщика производится в процедуре УстановитьШкалуВремени общего модуля РаботаСРабочимКалендаремКлиентСервер. Для отображения месяца используется одна шкала времени. Для отображения данных по часам используется две шкалы времени: одна для отображения часов, другая "невидимая" для возможности изменения элементов планировщика в привязке к нужному размеру ячейки времени.

Календарь пользователя может содержать достаточно большое количество элементов, в связи с чем его полное обновление может вызывать заметные для пользователя задержки при контекстных вызовах пользователя. В связи с этим реализовано особое обновление данных планировщика во время работы, это процедура ОбновитьЗаписиКалендаряВПланировщике в общем модуле РаботаСРабочимКалендаремКлиент. Данная процедура позволяет обновлять данные планировщика без контекстных серверных вызовов, что положительно сказывается на скорости работы для пользователя.

У различных событий планировщика прописана специальная логика, позволяющая добиться желаемого поведения от данного элемента формы. Рассмотрим подробнее каждое из событий:

План дня

Одним из вариантов отображения календаря является план дня – в этом случае календарь отображается в виде дерева значений. Данное отображение используется в календаря для вида План дня и для формы ближайших событий на рабочем столе.

Для отображения данных в плане для используются настройки отображения календаря такие же как и для планировщика. Структуру настроек отображения календаря можно получить с помощью функции ПолучитьНастройкиОтображения общего модуля РаботаСРабочимКалендаремСервер. В типовом случае достаточно уточнить в полученной структуре отображаемую дату (ОтображаемаяДата), все выделенные для отображения даты (ВыделенныеДаты), период отображения (ПериодОтображения) и пользователей, чей календарь необходимо отобразить (Пользователи). Для отображения плана дня необходимо вызвать процедуру ОтобразитьПланДня общего модуля РаботаСРабочимКалендаремСервер.

План для представляет собой дерево значений с двумя уровнями элементов. Элементы первого уровня обозначают дни, элементы второго уровня обозначают записи календаря в данном дне. За основу данных записи календаря взята структура, получаемая с помощью функции СформироватьЭлементЗаписиКалендаря общего модуля РаботаСРабочимКалендаремКлиентСервер. Дополнительно к ней формируется особое текстовое описание для отображения записи в плане дня. Например, для того чтобы отображать время у элементов календаря или авторов данных записей. Это происходит в функции СформироватьТекстовоеОписаниеСобытия общего модуля РаботаСРабочимКалендаремСервер.

У различных событий плана дня прописана специальная логика, позволяющая добиться желаемого поведения от данного элемента формы. Рассмотрим подробнее каждое из событий:

Напоминания

Для работы с напоминаниями в календаре используется модифицированная подсистема напоминаний БСП – см. подсистему НапоминанияПользователя.

В общем модуле НапоминанияПользователяСлужебный в функции ПолучитьЗначениеДатыНачалаЗаписиКалендаря сосредоточена особая логика определения даты напоминания, учитывающая повторяющиеся записи календаря.

В общем модуле НапоминанияПользователяГлобальный в процедуре ПроверитьТекущиеНапоминания изменено открытие форм оповещений. Если напоминаний одновременно более 5, то используется стандартная форма напоминаний БСП, в противном случае используется специальная форма напоминаний ФормаОповещенияДокументооборот.

Возможность напоминаний вынесена на форму элемента записи календаря, для возможности установки напоминаний без открытия дополнительных форм в простых случаях. В случае необходимости установки непредусмотренного простого срока напоминания используется форма НапоминаниеДокументооборот.

Данные о событиях

В календаре пользователя отображаются различные данные – записи календаря, отсутствия, мероприятия.

Особенностью отображения записей календаря является возможность настройки повторения. В этом случае будет заведен только один элемент справочника ЗаписиРабочегоКалендаря, но ему будет соответствовать целый набор событий, которые следует отображать в календаре. Для обозначения таких записей используется реквизит ТипЗаписиКалендаря – если он установлен в значение ПовторяющеесяСобытие, тогда следует учитывать значения реквизитов:

Для настройки правил повторения используется форма ФормаНастройкиПовторения справочника ЗаписиРабочегоКалендаря. Основная логика по работе с отображением повторяющихся записей календаря прописана в процедуре ВнестиПовторяющеесяСобытиеВТаблицу в общем модуле РаботаСРабочимКалендаремСервер.

Мероприятия в календаре отображаются с помощью записей календаря. По мероприятиям заводятся соответствующие записи в календарях участников, особым образом получать данные о мероприятиях необходимости нет. За это отвечают подписки на события КалендарьПередЗаписьюПредмета, КалендарьПередЗаписьюУчастников, КалендарьПриЗаписиПредмета, КалендарьПриЗаписиУчастников.

Для отсутствий не заводятся отдельные записи в календарях пользователей, но их все равно следует отображать в календаре пользователя.

Для получения данных о всех событиях, которые отображаются в календаре пользователя, следует использовать функцию ПолучитьТаблицуСобытий общего модуля РаботаСРабочимКалендаремСервер.

Расчет занятости пользователя

Для мероприятий доступна возможности проверки занятости пользователей при работе с приглашениями. Существующие состояния занятости описаны в перечислении СостоянияЗанятости.

Для получения информации о занятости пользователя следует использовать ПолучитьТаблицуЗанятости общего модуля РаботаСРабочимКалендаремСервер. Доступно два варианта работы – расчет только занятости в целом, или расчет подробной занятости на каждый промежуток времени.

Расчет занятости происходит следующим образом:

  1. Для основы расчета занятости используются данные о доступности пользователя по расписанию, полученные с помощью функции ПолучитьТаблицуДоступности регистра сведений ДоступноеВремяПользователя. Доступность пользователя по расписанию настраивается с помощью формы НастройкаДоступногоВремени.
  2. Выполняется корректировка занятости с учетом введенной пользователем вручную занятости на конкретное время, с помощью функции ПолучитьТаблицуЗанятости регистра сведений ЗанятостьПользователя. При этом данные о свободном и занятом времени обладают приоритетом над существующими сведениями.
  3. Выполняется корректировка занятости с учетом данных о занятости по записям календаря, с помощью функции ПолучитьТаблицуЗанятости справочника ЗаписиРабочегоКалендаря. При этом занятость по отклоенным записям календаря не учитывается. По подтвержденным записям календаря считается что пользователя занят. По записям под вопросом считается что занятость пользователя под вопросом. При этом занятость под вопросом обладает приоритетом над свободным временном; а занятое время обладает приоритетом над занятостью под вопросом и над свободным временем.
  4. Выполняется корректировка занятости с учетом данных об отсутствия, с помощью функции ПолучитьТаблицуЗанятости документа Отсутствие. При этом отсутствие обладает приоритетом над всеми занятостями.

Права доступа

Права доступа на календарь пользователя зависят отображаемых данных.

Есть возможность вносить записи в календари других пользователей. При этом данная запись будет внесена в состоянии Под вопросом. Уже сам пользователь, для которого предназначена запись, сможет подтвердить или отклонить её.