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

06.05.2020
Заместители

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

Содержание

Создание заместителя в профиле пользователя

Идем в Администрирование —> Настройки —> Пользователи —> Список пользователей

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

Настройки пользователя
Создание дополнительного поля

Тип данных устанавливаем Привязка к сотруднику, заполняем код поля, XML_ID и название поля на русском и английском.

Вывод заместителя в профиле пользователя

Для вывода заместителя в профиле пользователя в блоке Контактная информация внизу выберите поля, которые хотите отобразить.

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

Профиль

Блок-схема бизнес-процесса. Пример с заместителем в Битрикс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) информацию об отсутствии.

Изменение переменных
  • Заголовок — Статус руководителя;
  • Переменная — выбираем переменную Статус руководителя и вставляем в него значение Дополнительные результаты —> Информация о сотруднике —> Отсутствует (по графику отсутствий).
Вставка отсутствия
Действие Информация о сотруднике возвращает N — когда сотрудник на месте и Y — когда сотрудник отсутствует, поэтому не забудьте поправить условие ниже, если будете пользоваться этим действием.

Статус руководителя

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

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

Выбираем конструкцию «Условие» и указываем в каком случае Руководитель на месте, а в каком нет.
Условие
Условие да
Условие Да
  • Заголовок — Да;
  • Тип условия — Значение переменной;
  • Свойство или переменная — Статус руководителя;
  • Условие — равно;
  • Значение — be present (мы прописали его в PHP коде в случае присутствия).

 

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

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

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

 

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

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

Действие 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’ — переменная Зам руководителя. В переменную вносится Заместитель, если он есть, если же нет, то записывается пустое значение.
Зам руководителя

Зам Руководителя

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

 

Уведомление руководителя

Отправим уведомление Руководителю и/или его Заместителю об утверждении документа. Возьмем действие Уведомление пользователя.
  • Заголовок — Уведомление Руководителя;
  • Отправитель уведомления — выбираем сотрудника, который направляет документ на утверждение;
  • Получатель уведомления — выбираем переменную Руководитель и Зам руководителя;
  • Текст уведомления для сайта — пишем что предстоит согласовать или утвердить, при необходимости добавляем характеристики документа;
  • Тип уведомления — Персонализированное.
Уведомление

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

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

Лайфхак

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

Блок действий
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x