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

Бронирование помещений

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

В "1С:Документообороте" пользователи могут бронировать помещения на определенную дату. Основной способ использования данной возможности - через команду Бронирование помещений. Дополнительные способы - через подменю Создать на основании или указание помещения в мероприятии.

Метаданные

Используемые метаданные отнесены к подсистеме БронированиеПомещений.

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

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

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

Общая картинка СхемаТерритории используется для обозначения наличия у территории схемы, которую можно просмотреть. Картинка отображается в списках территорий, при нажатии на неё открывается карточка территории.

Элементы стиля ВыделениеТекстВСпискеВыбораЦвет и ВыделениеТекстаВСпискеВыбораШрифт используются при формировании списка выбора помещений. Данным стилем выделяется текст, найденный в наименовании помещения.

Элементы стиля ЗаголовокКалендаряБроньФон, ЗаголовокКалендаряБроньЦветТекста, ЗаголовокКалендаряБроньШрифт используются при оформлении планировщика бронирования.

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

Перечисление СпособыСозданияБрони носит служебный характер. В нем отмечается способ создания брони – вручную или из мероприятия. Влияет на поведение при изменении мероприятия – автоматически созданные брони будут автоматически удалены или изменены. Доступные значения:

Документ Бронь является главным метаданным, используемым для бронирования. Представляет собой сущность, обозначающую, что помещение забронировано на определенное время. К бронированию относятся следующие формы:

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

Планировщик

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

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

Формирование шкалы времени происходит в процедуре УстановитьШкалуВремени общего модуля БронированиеПомещений. Для работы с требуемым размером ячейки используется две шкалы времени:

Ещё одна особенность использования планировщика – время начала и время окончания отображения. По умолчанию время берётся из настроек отображения. Но если за пределами отображаемого периода есть какие-либо брони, тогда время начала и время окончания будет расширено, чтобы отобразились все брони. Данное поведение определяется в процедуре РассчитатьОтображаемыеЧасы общего модуля БронированиеПомещений.

Для работы планировщика были переопределены стандартные процедуры планировщика. Особым образом происходит работа с повторяющимися бронями: при изменении повторяющейся брони в планировщике меняется экземпляр на конкретную дату, а не вся повторяющаяся бронь. Поведение планировщика определяется в общем модуле БронированиеПомещенийКлиент в следующих процедурах:

Проверка пересечений, рекомендации времени и помещений

Если выбранные пользователем время и помещения недоступны. в форме ВыборРекомендованногоВремени отображаются рекомендации времени и помещений. При этом так же отображаются пересекающиеся брони.

Логика поиска пересекающихся броней прописана в функции ПолучитьПересекающиесяБрони в общем модуле БронированиеПомещений.

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

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

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

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

Дополнительно, для некоторых помещений ввод брони доступен только сотруднику, ответственному за помещение. Логика данного поведения прописана в функции ДоступноБронированиеПомещения в общем модуле БронированиеПомещений.

Бронирование через мероприятия

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

Если организатор мероприятия ввел брони заранее, тогда для них будет установлена связь с мероприятием. Если не вводил брони заранее, будут созданы новые брони. Данная логика прописана в процедуре ЗабронироватьПомещение общего модуля БронированиеПомещений.

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

Рекомендации по доработке

Добавление режима быстрого создания

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

Полезные процедуры и функции

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

Полезной также может оказаться функция формирования данных выбора помещения, если где-то ещё потребуется использовать выбор помещений в таком же формате – функция СформироватьДанныеВыбораПомещения в общем модуле БронированиеПомещенийВызовСервера.