Отсутствие сотрудников
страницаДокументооборот КОРП, ДГУ
27.01.2016
Отсутствие сотрудников
Общая информация
В программе предусмотрена возможность вести учет отсутствий сотрудников на рабочем месте по любым причинам: например, в связи с болезнью, командировкой, отпуском и т.д.
Пользователи информационной базы могут увидеть информацию об отсутствии сотрудника в карточке пользователя, адресной книге и календаре. При попытке взаимодействия с отсутствующим сотрудником пользователи получат уведомление о датах, причине его отсутствия и именем заместителя.
Метаданные
Используемые метаданные отнесены к подсистеме Отсутствия.
Основная логика работы сосредоточена в общих модулях. Список общих модулей:
- Отсутствия,
- ОтсутствияВызовСервера,
- ОтсутствияКлиент,
- ОтсутствияКлиентСервер.
Возможность учета отсутствий привязана к функциональной опции ИспользоватьОтсутствия. Значение данной функциональной опции привязано к константе ИспользоватьОтсутствия. При включении функциональной опции становятся доступны следующие возможности:
- Ввод и просмотр отсутствий и видов отсутствий;
- Предупреждение об отсутствии при различных действиях в программе.
В справочнике ВидыОтсутствий хранится информация о видах отсутствия. Данный справочник не содержит предопределенных элементов, но он заполняется некоторыми значениями по умолчанию – в процедуре ЗаполнитьВидыОтсутствий в общем модуле ОбновлениеИнформационнойБазыДокументооборот.
Документ Отсутствие является главным метаданным, используемым для учета отсутствий. Представляет собой сущность, обозначающую, что сотрудник отсутствует в определенное время. К отсутствиям относятся следующие формы:
- ВопросСоздатьПисьмо – используется при создании отсутствия, предлагает сразу создать письмо на основании;
- ВопросСоздатьПравилоОбработкиПисем – используется при создании отсутствия, предлагает сразу создать правило автоответа в почте;
- ПредупреждениеОНаличииДел – используется при создании отсутствия, предупреждает о наличии дел на время вводимого отсутствия;
- ПредупреждениеОбОтсутствии – используется для предупреждения других пользователей об отсутствии при различных действиях в системе: например, при старте бизнес-процесса или отправке письма;
- ПредупреждениеОПересеченииОтсутствий – используется при создании отсутствий, предупреждает о том, что уже введено отсутствие на данное время;
- ФормаДокумента – основная форма для работы с отсутствием. Можно перейти из формы ФормаСписка;
- ФормаСписка – основная форма для работы с отсутствиями. Используется для отображения информации об отсутствии сотрудников на нужную дату. Можно перейти из командного интерфейса конфигурации.
Для получения информации по отсутствиям служит отчет Отсутствия.
Внутреннее устройство
Как выполняется проверка отсутствия
Для проверки отсутствий запрашиваются все отсутствия по нужным сотрудникам в нужное время. При наличии введенных отсутствий – считается, что сотрудник отсутствует. В этом случае будет показано предупреждение.
Проверка отсутствий начинается с помощью функций общего модуля ОтсутствияКлиент. Данный модуль содержит функции проверки отсутствия для различных прикладных объектов. Основное назначение данных функций – подготовить список лиц, отсутствие которых следует проверить, исходя из логики работы прикладного объекта. Некоторые функции включают в себя показать предупреждений, в некоторых он вынесен в отдельные процедуры. Это связано с моментом вызова проверки отсутствий и устройства форм, из которых вызывается. В общем модуле ОтсутствияКлиент к данным функциям относятся:
- ПроверитьОтсутствиеПоЗаписиРабочегоКалендаря,
- ПроверитьОтсутствиеПоКонтролю,
- ПроверитьОтсутствиеПоМероприятию,
- ПроверитьОтсутствиеПоПроектнойЗадаче,
- ПроверитьОтсутствиеПоПроекту,
- ПроверитьОтсутствиеПоПисьму,
- ПроверитьОтсутствиеПоПроцессу,
- ПроверитьОтсутствиеПоПроцессуПередЗаписью,
- ПроверитьОтсутствиеПоЗадаче.
Следует учесть особенность платформы, с которой связано такое построение показа предупреждений – если сформировано описание оповещения, то оно обязательно должно быть обработано. Если оставить описание оповещения не обработанным – то останется блокировка в веб-клиенте. Данная ошибка присутствует в платформе версии 8.3.6. В общем модуле ОтсутствияКлиент к процедурам, созданным для учета данной особенности, относятся:
- ПоказатьПредупреждениеОбОтсутствииПоЗаписиРабочегоКалендаря,
- ПоказатьПредупреждениеОбОтсутствииПоМероприятию,
- ПоказатьПредупреждениеОбОтсутствииПоПроектнойЗадаче,
- ПоказатьПредупреждениеОбОтсутствииПоПроекту.
Запрос отсутствий и формирование итоговой информации по отсутствиям выполняется на сервере в модуле ОтсутствияВызовСервера в следующих функциях:
- ПроверитьОтсутствиеАдресатов,
- ПроверитьОтсутствиеПользователей,
- ПроверитьОтсутствиеИсполнителей.
Показ информации об отсутствии выполняется с помощью функции ОбработатьИнформациюОбОтсутствии общего модуля ОтсутствияКлиент. В данную функцию необходимо передать сформированную информацию об отсутствии и настройки для формы ПредупреждениеОбОтсутствии, какой следует выводить текст вопроса, текст команды и текст предупреждения на данной форме. В используемом описании оповещения следует предусмотреть обработку следующих вариантов:
- КодВозвратаДиалога.Да – пользователь решил продолжить выполняемое действие;
- КодВозвратаДиалога.Нет – пользователь решил прервать выполняемое действие;
- Неопределено – пользователь закрыл форму, следует обрабатывать, как желание прерывать обрабатываемое действие.
Как выполняется проверка дел
При записи отсутствия выполняется проверка наличия дел у пользователя. Если на момент отсутствия у пользователя будут какие-либо дела, то будет показано соответствующее предупреждение. К делам пользователя относятся записи календаря, мероприятия, проекты и задачи.
Проверка наличия дел начинается в процедуре ПроверитьВозможностьОтсутствия общего модуля ОтсутствияКлиент. В случае наличия дел будет показана форма предупреждения, где пользователь может решить, следует ли продолжить запись, несмотря на наличие дел, либо прервать. В используемом описании оповещение следует предусмотреть обработку следующих вариантов:
- КодВозвратаДиалога.Да – пользователь решил продолжить запись отсутствия;
- КодВозвратаДиалога.Нет – пользователь решил прервать запись отсутствия;
- Неопределено – пользователь закрыл форму, следует обрабатывать, как желание прервать запись отсутствия.
Основная логика проверки наличия дел выполняется на сервере функции ПроверитьВозможностьОтсутствия в общем модуле ОтсутствияВызовСервера. Данная функция возвращает только факт наличия или отсутствия дел. Проверка выполняется по типу возможных дел в соответствующих функциях:
- ВозможноОтсутствиеПоКалендарю – для проверки наличия записей календаря;
- ВозможноОтсутствиеПоМероприятиям – для проверки наличия мероприятий;
- ВозможноОтсутствиеПоПроектам – для проверки наличия проектных задач;
- ВозможноОтсутствиеПоЗадачам – для проверки наличия задач.
Получение списка дел происходит непосредственно в форме ПредупреждениеОНаличииДел с помощью функции ПолучитьДелаСотрудника общего модуля Отсутствия.
Помимо проверки пересечения с делами, выполняется проверка пересечения с отсутствиями. Отличие от проверки пересечения с делами в том, что данная проверка является блокирующей для создания отсутствия. Пока есть пересечение с другими отсутствиями, записать отсутствие не получится.
Проверка пересечения с отсутствиями начинается в функции ПроверитьПересечениеОтсутствий общего модуля ОтсутствияКлиент. В случае наличия пересекающихся отсутствий будет показана форма предупреждения, где пользователь сможет ознакомиться со списком пересекающихся отсутствий, попробовать удалить их и повторить запись. В используемом описании оповещения следует предусмотреть обработку следующих вариантов:
- Истина – пользователь решил повторить запись;
- Неопределено – пользователь закрыл форму, следует обрабатывать, как желание прервать запись отсутствия.
Основная логика проверки наличия пересекающихся отсутствий прописана в функции ПроверитьПересечениеОтсутствий общего модуля ОтсутствияВызовСервера. Данная функция возвращает только факт наличия пересекающихся отсутствий. Заполнение списка пересекающихся отсутствий происходит непосредственно в форме ПредупреждениеОПересеченииОтсутствий. Для формирования списка пересекающихся отсутствий используется функция ПолучитьПересекающиесяОтсутствия общего модуля Отсутствия.
Создание писем на основании отсутствия
На основании отсутствий возможно создание писем. Логика заполнения письма на основании отсутствия прописана следующих местах:
- В процедуре ЗаполнитьСтруктуруРеквизитовПоОтсутствию в модуле объекта ИсходящееПисьмо – заполнение основных реквизитов письма;
- В процедуре ПолучитьПредставлениеОтсутствияДляТекстаПисьма в модуле Отсутствия – формирование текста письма.
При создании нового отсутствия программа самостоятельно предлагает создать исходящее письмо, если оно ещё не создано. Пользователь может самостоятельно задать в персональных настройках, следует ли программе спрашивать этот вопрос. Работа с персональными настройками отсутствий производится через ПолучитьПерсональнуюНастройку и УстановитьПерсональнуюНастройку в общем модуле Отсутствия. Рассмотрим эти персональные настройки:
- ВопросСоздатьПисьмоБольшеНеСпрашивать – отвечает за необходимость задавать вопрос о создании письма. Если установлено в значение Ложь – будет задаваться вопрос каждый раз при закрытии карточки нового отсутствия. Если установлено в значение Истина – вопрос задаваться не будет, в качестве ответа будет использоваться значение в настройке ВопросСоздатьПисьмоВариантОтвета.
- ВопросСоздатьПисьмоВариантОтвета – выбранный вариант ответа на вопрос по умолчанию. Истина означает, что письмо будет создаваться автоматически, Ложь означает, что письмо не будет создаваться.
В ОбработкаОповещения формы ФормаДокумента документа Отсутствие происходит отслеживание записываемых писем. В случае если на основании отсутствия письмо было создано вручную, тогда при закрытии вопрос показан не будет. Для этого значение реквизита ПредложитьОтправитьПисьмо устанавливается в Ложь.
Основная логика вызова предложения о создании письма расположена в процедуре ПредложитьОтправитьПисьмо общего модуля ОтсутствияКлиент.
Создание правил автоответа на основании отсутствия
На основании отсутствий возможно создание правил автоответа. Логика заполнения правил автоответа на основании отсутствия прописана в следующих местах:
- В процедуре ПриСозданииНаСервере формы ФормаЭлемента справочника ПравилаОбработкиПисем. Данный участок кода обозначен комментарием // Заполнение на основании отсутствия.
- В процедуре ЗагрузитьПравилов формы ФормаЭлемента справочника ПравилаОбработкиПисем. Данный участок кода обозначен комментарием // Заполнение на основании отсутствия.
При создании нового отсутствия программа самостоятельно предлагает создать правило автоответа, если оно ещё не создано. Пользователь может самостоятельно задать в персональных настройках, следует ли программе задавать этот вопрос. Работа с персональными настройками отсутствий производится через ПолучитьПерсональнуюНастройку и УстановитьПерсональнуюНастройку в общем модуле Отсутствия. Рассмотрим эти персональные настройки:
- ВопросСоздатьПравилоБольшеНеСпрашивать – отвечает за необходимость спрашивать вопрос о создании правила автоответа. Если установлено в значение Ложь – будет задаваться вопрос каждый раз при закрытии карточки нового отсутствия. Если установлено в значение Истина – вопрос задаваться не будет, в качестве ответа будет использоваться значение в настройке ВопросСоздатьПравилоВариантОтвета.
- ВопросСоздатьПравилоВариантОтвета – выбранный вариант ответа на вопрос по умолчанию. Истина означает, что правило автоответа будет создаваться автоматически, Ложь означает, что правило автоответа не будет создаваться.
В ОбработкаОповещения формы ФормаДокумента документа Отсутствие происходит отслеживание записываемых правил обработки писем. В случае если на основании отсутствия письмо создано правило автоответа, тогда при закрытии вопрос показан не будет. Для этого значение реквизита ПредложитьСоздатьПравилоОбработкиПисем устанавливается в Ложь.
Основная логика вызова предложения о создании письма расположена в процедуре ПредложитьСоздатьПравилоОбработкиПисем общего модуля ОтсутствияКлиент.
Создание делегирования прав доступа на основании отсутствия
На основании отсутствия возможно создание делегирования прав доступа. Автоматическое предложение о создании делегирования прав доступа не предусмотрено. Возможность создания есть только у пользователя с полными правами. Логика заполнения делегирования прав на основании отсутствия прописана в процедуре ОбработкаЗаполнения в модуле объекта справочника ДелегированиеПрав.
Права доступа
Ограничение прав доступа к отсутствиям прописано в роли БазовыеПраваПользователя. При этом вводить отсутствиям может, как и сам сотрудник, так и другой сотрудник за него. Правом изменения отсутствия обладает автор отсутствия, сотрудник для которого оно введено, их руководители и делегаты.
Рекомендации по доработке
Как добавить проверку отсутствия
Чтобы добавить проверку отсутствия необходимо:
- Создать на форме реквизит ПроверятьОтсутствие;
- При создании на сервере считывать значение реквизита ПроверятьОтсутствие с помощью функции ПредупреждатьОбОтсутствии модуля Отсутствия;
- Разместить вызовы соответствующих прикладному объекту методов ПроверитьОтсутствие* и, возможно, ПоказатьПредупреждениеОбОтсутствииПо*. Данные методы описаны ранее в пункте "Как выполняется проверка отсутствия".
- Если подходящие методы отсутствуют следует написать свой, используя методы ПроверитьОтсутствиеАдресатов, ПроверитьОтсутствиеПользователей, ПроверитьОтсутствиеИсполнителей общего модуля ОтсутствияВызовСервера для формирования информации об отсутствии, и метод ОбработатьИнформациюОбОтсутствии общего модуля ОтсутствияКлиент для показан предупреждения.