
Все сотрудники бывают в командировках, отпуске и на больничном, а в это время им падают задания по согласованию различных документов и все это нужно как-то делегировать, желательно без участия этого самого сотрудника. В Битрикс24 нет стандартного функционала замещения, но мы сами можем частично воспроизвести его хотя бы в бизнес-процессах. Статья ориентирована на коробочную версию Битрикс 24.
Содержание
Создание заместителя в профиле пользователя
Идем в Администрирование —> Настройки —> Пользователи —> Список пользователей
Заходим в любого пользователя, открываем вкладку Дополнительно и нажимаем Добавить пользовательское свойство.

Тип данных устанавливаем Привязка к сотруднику, заполняем код поля, XML_ID и название поля на русском и английском. Код поля важно указать UF_USR_….., тогда его потом можно будет прочитать через действие Информация о сотруднике.

Чтобы разместить поле в нужной вкладке, в любом пользователе или в форме добавления пользователя нажмите справа на шестеренку и выберите Настройки.

Далее в доступных вкладках выберите Доп.поля, вкладку Работа, в доступных полях Заместителя и с помощью стрелки перенесите в выбранные поля. Затем с помощью кнопок Выше и Ниже переставьте поле под должность.




Вывод заместителя в профиле пользователя
Для вывода заместителя в профиле пользователя перейдите в профиль пользователя и справа внизу нажмите Общий вид карточки –> Настройка показа полей.

Появится окно Настройки полей. В списке полей для просмотра справа нажмите стрелку, прокрутите список и отметьте галочкой поле Заместителя и оно появится в списке полей для просмотра. То же самое повторите в списке полей для редактирования и нажмите Сохранить.


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

Блок-схема бизнес-процесса. Пример с заместителем в Битрикс24

В этом примере простое утверждение документа, это может быть договор или заявление на отпуск. Создаем процесс в Живой ленте, формируем поля документа, а затем создаем непосредственно сам процесс.
Переменные в бизнес-процессе

- Руководитель (или любой другой сотрудник, которого необходимо заменять в данном процессе) – тип переменной Привязка к сотруднику;
- Статус руководителя – тип переменной Строка;
- Зам руководителя – тип переменной Привязка к сотруднику;
Действия бизнес-процесса
Определение руководителя
- Заголовок – Определение руководителя;
- Тип – начальник;
- Для пользователя – выбираем поле документа с сотрудником, для которого нужно определить руководителя для согласования документа;
- Уровень начальника – 1 (непосредственный начальник);
- Резервные пользователи – на всякий случай укажем Администратора;
- Пропускать отсутствующих – Нет, убираем галочку;
- Пропускать с завершенным рабочим днём – Нет, убираем галочку;


Руководитель
- Заголовок – Руководитель;
- Текст – вставляем из предыдущего действия (для этого нужно нажать кнопку “…”, выбрать раздел Дополнительные результаты и найти нужное действие). После вставки значения в конце нужно добавить параметр >friendly, он нужен чтобы имя отображалось в обычном виде, а не в виде ID;
- Загрузить отчет для доступа из бизнес-процесса – устанавливаем галочку;


Обновление руководителя
- Заголовок – Обновление Руководителя;
- Переменная – Руководитель;
- Значение – вставляем из действия Определение руководителя (для этого нужно нажать кнопку …)
Проверка отсутствия
Действие PHP-код. Проверим на месте ли Руководитель. Данный параметр определяется на основе графика отсутствия Битрикс. Вы можете найти его в разделе Время и отчеты.


- Заголовок – Проверка отсутствия Руководителя;
- PHP код:
global $DB;
$USER_ID = {=Variable:Ruk};
if (is_array($USER_ID))
$USER_ID = $USER_ID[0];
$USER_ID = preg_replace("/[^0-9]/", '', $USER_ID);
if (CIntranetUtils::IsUserAbsent($USER_ID))
{
$this->SetVariable('RukState', 'absent');
}
else
{
$this->SetVariable('RukState', 'be_present');
}
return CBPActivityExecutionStatus::Closed;
- {=Variable:Ruk} – переменная Руководитель;
- ‘RukState’ – переменная Статус руководителя;
- ‘absent’ и ‘be_present’ – значения, которые будут записаны в переменную Статус руководителя в зависимости от результата
В Битриксе появилось действие Информация о сотруднике, с помощью него также теперь можно проверить отсутствие.

- Заголовок – по умолчанию;
- Сотрудник – указываем сотрудника, отсутствие которого нас интересует;
Далее с помощью действия Изменение переменных вносим в переменную Статус руководителя (RukState) информацию об отсутствии.

- Заголовок – Статус руководителя;
- Переменная – выбираем переменную Статус руководителя и вставляем в него значение Дополнительные результаты –> Информация о сотруднике –> Отсутствует (по графику отсутствий).

Статус руководителя
- Заголовок – Статус Руководителя;
- Текст – вставляем переменную Статус Руководителя, так как мы записали в неё значение в предыдущем действии (для этого нужно нажать кнопку “…” , выбрать раздел Переменные и найти нужную).
- Загрузить отчет для доступа из бизнес-процесса – устанавливаем галочку.

Руководитель на месте?


Условие Да
- Заголовок – Да;
- Тип условия – Значение переменной;
- Свойство или переменная – Статус руководителя;
- Условие – равно;
- Значение – be present (мы прописали его в PHP коде в случае присутствия).
Условие Нет
- Заголовок – Нет;
- Тип условия – Значение переменной;
- Свойство или переменная – Статус руководителя;
- Условие – равно;
- Значение – absent (мы прописали его в PHP коде в случае отсутствия).

Разветвление

Руководитель на месте
- Заголовок – Разветвление;
- Текст – Руководитель на месте;
- Загрузить отчет для доступа из бизнес-процесса – устанавливаем галочку.
Руководитель отсутствует
- Заголовок – Разветвление;
- Текст – Руководитель отсутствует;
- Загрузить отчет для доступа из бизнес-процесса – устанавливаем галочку.

Определение Заместителя

- Заголовок – Определение Заместителя ;
- PHP код:
global $DB;
$USER_ID = {=Variable:Ruk};
if (is_array($USER_ID))
$USER_ID = $USER_ID[0];
if (substr($USER_ID,0,5)=='user_')
$USER_ID = substr($USER_ID,5);
$PROPERTY_CODE = "UF_ZAM";
$rsUsers = CUser::GetList(($by="login"), ($order="asc"), array("ID"=>$USER_ID), array("SELECT"=>array($PROPERTY_CODE)));
if ($arUser = $rsUsers->GetNext())
{
$this->SetVariable('RukZam', 'user_'.$arUser[$PROPERTY_CODE]);
}
else
{
$this->SetVariable('RukZam', '');
}
return CBPActivityExecutionStatus::Closed;
- {=Variable:Ruk} – переменная Руководитель;
- UF_ZAM – пользовательское поле, которое мы добавили в карточку пользователя в самом начале;
- ‘RukZam’ – переменная Зам руководителя. В переменную вносится Заместитель, если он есть, если же нет, то записывается пустое значение.
Если код поля при создании вы указали как UF_USR_…, то заместителя можно определить с помощью действия Информация о сотруднике.

- Заголовок – по умолчанию;
- Сотрудник – указываем сотрудника, заместитель которого нас интересует;
Также мы можем использовать то действие, которое мы уже добавили выше. Далее с помощью действия Изменение переменных вносим заместителя в переменную Заместитель (RukZam). Не забудьте перед переменной добавить user_. Т.е. будет выглядеть как user_Заместитель.

Зам Руководителя
- Заголовок – Зам Руководителя;
- Текст – вставляем переменную Зам Руководителя, так как мы записали в неё значение в предыдущем действии (для этого нужно нажать кнопку “…” , выбрать раздел Переменные и найти нужную).
- Загрузить отчет для доступа из бизнес-процесса – устанавливаем галочку.
Уведомление руководителя
- Заголовок – Уведомление Руководителя;
- Отправитель уведомления – выбираем сотрудника, который направляет документ на утверждение;
- Получатель уведомления – выбираем переменную Руководитель и Зам руководителя;
- Текст уведомления для сайта – пишем что предстоит согласовать или утвердить, при необходимости добавляем характеристики документа;
- Тип уведомления – Персонализированное.

Утверждение документа

- Заголовок – Утверждение документа;
- Утверждают сотрудники – выбираем переменную Руководитель и Зам руководителя;
- Тип утверждения – Любой сотрудник (если руководитель в командировке или на встрече, то сам сможет утвердить документ, если же нет, то это может сделать и заместитель);
- Название задания – Укажите в названии наименование документа, который нужно утвердить;
- Описание задания – Укажите что нужно утвердить, добавьте ссылку на документ, укажите его параметры, которые влияют на решение. Полезно указывать дату и время в начале описания.
- Устанавливать текст статуса – Нет (т.к. мы выбрали, что утверждает любой сотрудник, то нам неинтересен процент согласования, он всегда будет 100).
- Текст статуса – установлен по умолчанию, можно изменить по желанию;
- Текст кнопки подтверждения в задании – можно оставить по умолчанию, либо изменить на более подходящее выражение;
- Текст кнопки отказа в задании – можно оставить по умолчанию, либо изменить на более подходящее выражение;
- Показывать поле ввода комментария – по Вашему усмотрению;
- Обязательность комментария – по Вашему усмотрению;
- Метка для поля комментария – можно оставить по умолчанию;
- Период утверждения – по умолчанию неограниченный период, но можно задать срок, по истечению которого процесс пойдет дальше;
- Ограничить доступ – Нет;
- Тип делегирования – Всем сотрудникам (нет смысла запрещать делегирование вышестоящим сотрудникам).
Лайфхак
Для того чтобы применять эту конструкцию, не создавая каждый раз заново, поместите ее в Блок действий, а блок в Мои действия дизайнера бизнес-процессов, это позволит быстро применять часто повторяющиеся схемы, которые Вы используете.
