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

Что такое Бизнес-процессы

Бизнес-процесс - это процесс обработки документа, для которого задана одна точка входа и несколько точек выхода и последовательность действий (шагов, этапов, функций), совершаемых в заданном порядке и в определенных условиях.

Другими словами Бизнес-процесс – последовательность действий, направленных на получение заданного результата.

В системе все бизнес-процессы работают с так называемыми документами (файл, элемент инфоблока, элемент CRM) и их версиями. Для каждого документа (инфоблок, списки и т.п.) существуют свои шаблоны бизнес-процессов. Поддерживаемые типы документов:

  • Элементы инфоблоков в административной части
  • Элементы универсального списка
  • Файлы из библиотеки документов («Битрикс24 в коробке»)
  • Элементы CRM («Битрикс24 в коробке»)
  • "Виртуальный документ" (для бизнес-процессов организаций, реализуемых с помощью компонента Бизнес-процесс (комплексный компонент) в публичной части сайта)

Где можно найти Бизнес-процессы

В продуктах компании 1С-Битрикс бизнес-процессы можно найти в следующих местах:

  • Инфоблоки в административной части сайта («1С-Битрикс: Управление сайтом» и «Битрикс24 в коробке»)
  • Универсальные списки («Битрикс24 в коробке», Сервисы > Списки)
  • Библиотека документов («Битрикс24 в коробке», Документы)
  • CRM («Битрикс24 в коробке»)

Права на бизнес-процесс

В большинстве случаев для корректной работы модуля Бизнес-процессы необходимо произвести настройки прав доступа для пользователей и настройки инфоблоков.

При создании бизнес-процесса при выборе пользователей в настройках действий в форме Вставка значений выводятся только те пользователи, которые имеют соответствующий уровень доступа к типу документа, для которых создаётся бизнес-процесс.

Например, если в настройках информационного блока для определённой группы пользователей будет выставлен уровень прав Чтение, то они не будут иметь доступа к работе с бизнес-процессами инфоблока, хотя могут просматривать его элементы.

Видео

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

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

Функционал может меняться со временем выхода новых версий и отличаться от показанного в ролике.

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

Вебинар Роботы и бизнес-процессы. RPA с точки зрения разработчика. Техноволна 1 от 06 апреля 2020.

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

Документация по теме:

  • Пользовательская документация по модулю "Бизнес-процессы"
  • Модуль Бизнес-процессов (блог)

© «Битрикс», 2001-2008, «1C-Битрикс», 2008-2020 1С-Битрикс


Типы бизнес-процессов
2 / 184

При помощи модуля Бизнес-процессы могут быть описаны два типа бизнес-процессов: последовательный и со статусами.


Последовательный бизнес-процесс
3 / 184

Шаг за шагом

Последовательный бизнес-процесс — действия выполняются одно за другим от точки входа до точки выхода.

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

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


Бизнес-процесс со статусами
4 / 184

Если нужно настроить произвольные действия и состояния

Бизнес-процесс со статусами (так же известный как машина состояний или автомат на состояниях) — начала и конца не имеет, в процессе работы происходит переход из одного состояния в другое.

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

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

При возникновении события выполняется последовательный подпроцесс, соответствующий принятому событию (связанный с ним).

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

Если для данного статуса определен последовательный подпроцесс для финализации этого статуса, то он выполняется непосредственно перед выходом из данного статуса (перед переходом в другой статус).

Документация по теме:

  • Создание шаблона бизнес-процесса со статусами
  • Пример использования бизнес-процесса со статусами для организации обработки и доработки документа


Выбор типа бизнес-процесса
5 / 184

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

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

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


Типовые бизнес-процессы
6 / 184
Типовые бизнес-процессы - образцы часто используемых процессов, которые включены в состав продуктов «1C-Битрикс», содержащих модуль Бизнес-процессы.


Список типовых бизнес-процессов
7 / 184

Какие процессы часто используются

Типовые бизнес-процессы - образцы часто используемых процессов, которые включены в состав продуктов «1C-Битрикс», содержащих модуль Бизнес-процессы.

Типовые бизнес-процессы включены в состав младших редакций как неизменяемые процессы. Они настраиваются на работу с нужными сотрудниками, но схема прохождения документа остается неизменной. Изменение шаблонов типовых бизнес-процессов, а также создание собственных шаблонов возможно только при наличии модуля Дизайнер бизнес-процессов , который доступен только в старших редакциях .

Типовые бизнес-процессы для документов

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

Универсальный бизнес-процесс оплаты счетов (только для коробочной версии Битрикс24)

Запускается в рамках Универсального списка Счета на странице Счета (Сотрудники > Списки > Счета). Бизнес-процесс реализован с учетом новых прав доступа и интегрирован с задачами. Он "проводит" счет по этапам утверждения от сотрудника до директора, и только затем счет уходит в бухгалтерию на оплату.

Настроим бизнес-процесс перед началом работы:

  • Дадим права доступа к списку (выполняет администратор);
  • Настроим параметры шаблона;
  • Создадим разделы.

Бизнес-процесс построен так:

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

Типовые бизнес-процессы организации

Бизнес-процессы организации предназначены для автоматизации деятельности организации. По умолчанию создано и представлено пять типовых бизнес-процессов:

  1. Выдача наличных
  2. Исходящие документы
  3. Счет на оплату
  4. Заявление на отпуск
  5. Заявление на командировку

Администратор изменяет и копирует бизнес-процессы. А в редакции продукта Компания - создает собственные.


Создание шаблонов типовых бизнес-процессов
8 / 184

Как создать шаблон

Типовые шаблоны бизнес-процессов создаются автоматически при установке продуктов «1C-Битрикс». Посмотрим, каким образом создать их, если по каким-либо причинам типовые процессы не были созданы при установке.

Действия по созданию шаблонов

  • Универсальные списки (публичная часть сайта)
    • перейти к желаемому списку на соответствующей странице Списки (Сервисы > Списки);
    • перейти к списку шаблонов бизнес-процессов с помощью кнопки Бизнес-процессы , расположенной на странице просмотра списка;
    • воспользоваться соответствующей ссылкой для создания шаблонов бизнес-процессов.

  • Общий диск
    • перейти на страницу Общий диск (Диск > Общий диск);
    • перейти к списку шаблонов бизнес-процессов с помощью пункта Бизнес процессы в меню настроек;
      Примечание: Если в меню настроек нет пункта Бизнес-процессы, то нужно включить поддержку бизнес-процессов для библиотеки, выбрав пункт Настройка бизнес-процессов, и в открывшейся форме включив опцию Активировать бизнес-процессы .
    • воспользоваться соответствующей ссылкой для создания шаблонов бизнес-процессов.

  • Инфоблоки (административная часть сайта)
    • перейти на страницу редактирования инфоблока (Контент > Инфоблоки > Типы инфоблоков > [требуемый_инфоблок]);
    • включить поддержку бизнес-процессов установив для опции Участвует в документообороте или бизнес процессах значение бизнес процессы ;
    • на закладке Шаблоны бизнес-процессов отобразятся типовые шаблоны.
      • Примечание: Перейти к списку шаблонов возможно непосредственно из самого инфоблока с помощью кнопки Шаблоны бизнес-процессов (если данный инфоблок участвует в бизнес-процессах).

  • CRM (публичная часть сайта, «Битрикс24 в коробке»)
    • перейти на страницу настроек бизнес-процессов в CRM (CRM > Настройки > Роботы и бизнес-процессы > Бизнес-процессы);
    • перейти на страницу со списком шаблонов бизнес-процессов для требуемой сущности с помощью соответствующей ссылки ;
    • воспользоваться соответствующей ссылкой для создания шаблонов бизнес-процессов.

  • Бизнес процессы организаций (публичная часть сайта, «Битрикс24 в коробке»)

    Типовые шаблоны устанавливаются автоматически с установкой модуля Бизнес-процессы.

Удаление шаблонов типовых бизнес-процессов

Для удаления шаблона бизнес-процесса используйте пункт меню действий Удалить .

Важно: удалить шаблон незавершенного бизнес-процесса нельзя.


Типовые бизнес-процессы для коробочной версии «Битрикс24»
9 / 184

В данной главе будут рассмотрены штатные бизнес процессы, которые присутствуют только в коробочной версии "Битрикс24".


Бизнес-процессы документов
10 / 184

Запускаем бизнес-процесс документов

Давайте посмотрим как настроить автозапуск и запуск вручную для бизнес-процессов документов в коробочной версии Битрикс24.

Важно! Для работы с бизнес-процессами на портале у пользователя должен быть определенный уровень доступа. Если вы не можете работать с бизнес-процессами на портале, обратитесь к Администратору портала.

Настройка автозапуска для бизнес-процессов документов

Настройка выполняется на странице Бизнес-процессы (меню настроек в разделе Диск > Общий диск):

  • открываем список бизнес-процессов;
  • на странице Шаблоны бизнес-процессов в меню действий выбираем способ автоматического запуска бизнес-процесса - Запускать при создании или Запускать при изменении;
  • статус запуска бизнес-процесса отобразится в колонке Автозапуск .

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

Запуск бизнес-процессов вручную

Чтобы запустить вручную бизнес-процесс для некоторого документа:

  • В меню действий документа выберите пункт Бизнес-процессы, а затем в предложенном списке найдите необходимый бизнес-процесс (например, Ознакомление с документом);
  • Укажите необходимые параметры запуска бизнес-процесса и нажмите кнопку Запустить .

Бизнес-процесс запустится и начнет выполняться в соответствии со своим шаблоном и произведенными настройками.

Бизнес-процессы сотрудника

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

Выполнение назначенных заданий по бизнес-процессу осуществляется на закладке Бизнес-процессы личной страницы.


Бизнес-процессы организации
11 / 184

Запускаем бизнес-процесс документов

Бизнес процессы организации предназначены для автоматизации деятельности организации. По умолчанию создано и представлено пять типовых бизнес-процессов :

  1. Выдача наличных
  2. Исходящие документы
  3. Счет на оплату
  4. Заявление на отпуск
  5. Заявление на командировку

Администратору доступно изменение и копирование бизнес процессов. А в редакции продукта Компания - создание собственных . Работа с бизнес-процессами осуществляется через пункт меню Бизнес-процессы .

Выполнение заданий бизнес-процессов

Видео: Работа с бизнес-процессами организации (содержание может отличаться от текущей версии продукта)

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

Содержание видеоролика может отличаться от текущей версии продукта. Более актуальная информация содержится в тексте урока.

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

Варианты получения подробной информации о каждом действии:

  • Выберите соответствующую команду в меню действий.
  • Кликните правой кнопкой мыши по строке действия и выберите Подробнее.
  • Дважды кликните левой кнопкой мыши по строке действия.

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

Процессы в ленте

На странице Процессы в ленте (Бизнес-процессы> Процессы в ленте) пользователь просматривает и запускает бизнес-процессы, к которым у него есть доступ. Также в этом разделе администратор указывает , какие из этих процессов доступны для вызова прямо из Живой ленты .

Вызов бизнес-процессов из вкладки Мои процессы

Вызов бизнес-процессов на исполнение возможен и через закладку Бизнес-процессы> Мои процессы. Эта страница хранит все процессы, которые вызывались вами, включая историю их исполнения и полную информацию о них.

Расположение вкладки Мои процессы в старых версиях коробочного Битрикс24

После нажатия на кнопку Запустить процесс предлагается заполнить поля с входными параметрами вашего процесса. Однако настройки параметров работы (Кто утверждает, Кто оплачивает и т.п.) должны быть предварительно проведены, иначе бизнес-процесс не начнет свое выполнение.

Все активные

На странице Все активные (Бизнес-процессы> Все активные) отображен список активных запущенных процессов. На этой странице отслеживаем выполнение запущенных процессов, контролируем зависшие. Обычный пользователь видит список процессов запущенных только им самим. Администратору портала видны все процессы запущенные на портале, которые он удалит в случае зависания.

1 выберите модули, для которых были запущены процессы. Также доступен выбор зависших процессов.

2 используйте фильтр для поиска определенных задач.

3 настройте отображение колонок списка, кликнув правой кнопкой по шапке таблицы.

4 с помощью меню действий перейдите к документу (для администратора доступно удаление).


Журнал выполнения бизнес-процесса
12 / 184

Узнаем подробности в журнале

При разработке и использовании уже готовых процессов бывает необходимо узнать подробности выполнения того или иного процесса / действия. Для этого в системе предусмотрен журнал выполнения бизнес-процессов (лог).

Административная часть сайта

Для просмотра журнала выполнения бизнес-процесса перейдем в режим редактирования элемента инфоблока (документа, для которого запущен бизнес-процесс) на вкладку Бизнес-процессы и затем используем ссылку в поле Текущий статус. Откроется форма с Историей выполнения бизнес-процесса .

Для просмотра более подробной информации используем ссылку Расширенный режим .

Идентификатор действия в расширенном режиме
В расширенном режиме в скобках отображается идентификатор конкретного действия. Посмотрите или задайте его непосредственно при создании/редактировании шаблона бизнес-процесса в форме Настройка параметров действия с помощью ссылки [Ид].

В поле допустимо вводить только символ подчеркивания (_), буквы латинского алфавита или цифры.

Публичная часть

Скриншоты публичной части даны на примере шаблона "Битрикс24 в коробке". Функционал аналогичен, даже если на вашем реальном сайте внешний вид отличается.

Для просмотра текущего статуса созданного вами процесса откроем вкладку Процесс выполнения страницы Мои процессы. Вы увидите сам статус, в котором находится процесс, а также пользователя, ответственного за его выполнение на каждом шагу развития процесса.

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


Задания бизнес-процессов
13 / 184

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

Администратор, помимо списка своих заданий бизнес-процессов, имеет доступ к списку заданий остальных пользователей:

  • в публичной части сайта;

  • в административной части сайта на странице Задания (Сервисы > Бизнес-процессы > Задания).

С помощью этой страницы администратор просматривает и выполняет задания за других пользователей. Например, выполняет срочное задание за сотрудника, ушедшего в отпуск.

Примечание: Задания бизнес-процессов автоматически удаляются при удалении документа, для которого они были запущены.

Документация по теме:

  • Задания
  • Просмотр задания


Создание и настройка бизнес-процессов
14 / 184
В главе дана информация по созданию и настройке бизнес-процессов. Также рассмотрены примеры и наиболее часто встречающиеся приемы работы с бизнес-процессами.


Настройка библиотек документов на работу с бизнес-процессами
15 / 184
Настройка библиотек документов на работу с бизнес-процессами

Для настройки инфоблоков, используемых для организации библиотек документов (инфоблоки типа Документы), на работу с бизнес-процессами необходимо выполнить следующие действия:

  1. Настройка инфоблоков
  2. Настройка прав доступа

Настройка инфоблоков

Чтобы документы и файлы определенного инфоблока работали в режиме Бизнес-процессов необходимо произвести настройки этого инфоблока в административном разделе. Это может сделать администратор системы либо пользователи с правами доступа к модулю Бизнес-процессы не ниже Полного доступа.

Примечание: Один и тот же информационный блок не может работать и в режиме Документооборота и в режиме Бизнес-процессов.
  • Для настройки инфоблока перейдите на страницу настройки свойств инфоблока (Контент > Информ. блоки > Типы информ. блоков > [Нужный_тип_инфоблока] > [Нужный_инфоблок] ).
  • На закладке Инфоблок в поле Участвует в документообороте или бизнес процессах выберите Бизнес-процессы.

    • Инфоблок участвует в бизнес процессах

  • Нажмите кнопку Применить для внесения изменений.

Теперь выбранный инфоблок будет участвовать в Бизнес-процессах.

Примечание: включить участие инфоблока в документообороте можно и из публичного раздела.

Настройка прав доступа

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

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

    • Инфоблок участвует в бизнес процессах

    Внимание! Уровень доступа Бизнес-процессы позволяет указанным группам пользователей только лишь участвовать в бизнес-процессах. Для того чтобы пользователи смогли сами запускать бизнес-процессы, необходимо выставить более высокий уровень прав доступа для инфоблока, например Изменение.
  • Нажмите кнопку Применить для внесения изменений.

Примечание: Работа с бизнес процессами библиотеки документов рассмотрена в курсе Пользователь портала в уроке Бизнес-процессы документов


Настройка инфоблоков на работу с бизнес-процессами
16 / 184

Настраиваем работу инфоблока с бизнес-процессами

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

Настройка инфоблоков

Для участия инфоблока в Бизнес-процессах:

  • Перейдем на страницу настройки свойств инфоблока (Контент > Информ. блоки > Типы информ. блоков > [Нужный_тип_инфоблока]).
  • На закладке Инфоблок в поле Участвует в документообороте или бизнес процессах выбираем Бизнес-процессы .

Настройка прав доступа

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

Внимание! Уровень доступа Бизнес-процессы позволяет указанным группам пользователей только участвовать в бизнес-процессах. Для того чтобы пользователи смогли сами запускать бизнес-процессы, необходимо выставить более высокий уровень прав доступа для инфоблока, например Изменение.

Настройка автозапуска бизнес-процесса при создании/изменении элемента инфоблока

Модуль Бизнес-процессы позволяет автоматически запускать выбранные бизнес-процессы при создании/изменении элемента инфоблока.

  • Перейдем на закладку Шаблоны бизнес-процессов настраиваемого инфоблока.
  • В строке с названием нужного бизнес-процесса установим флаг в поле Автозапуск: Создание и Изменение .

    • Примечание: Если у вас установлена старшая редакция продукта (модуль Дизайнер бизнес-процессов), то вы имеете возможность редактировать шаблоны типовых бизнес-процессов и создавать собственные, поэтому вам названия шаблонов типовых процессов отображаются в виде ссылок и доступна ссылка Список шаблонов бизнес-процессов.

Для запуска бизнес-процесса вручную используйте пункт меню действий Запустить бизнес-процесс желаемого элемента инфоблока.

Настройка формы создания/изменения элемента инфоблока

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

  1. Выбираем команду Отменить настройки формы и все доступные закладки появятся перед вами. Этот способ не удобен тем, что из всего, что появится, требуется только одна закладка, остальные мешаются;
  2. Выберите команду Настройки. Откроется окно Настройка формы редактирования. В секции Доступные вкладки выберите Бизнес-процессы и нажмите кнопку [image], чтобы в форме создания/редактирования элемента была доступна вкладка Бизнес-процессы с соответствующими полями.

Теперь, например, в форме добавления новости в публичной части сайта будет доступна вкладка Бизнес-процессы .


Бизнес-процессы в Универсальных списках
17 / 184

Бизнес процессы

Бизнес процессы в Универсальных списках могут быть типовыми либо пользовательскими. Перед использованием типовых процессов, их нужно включить и настроить. Пользователи Битрикс24 могут создать собственные Бизнес-процессы для своих Универсальных списков. (Ссылка уводит на другой курс.)

Бизнес-процессы Универсальных списков можно выполнять как на странице Избранное> Бизнес-процессы, так и при просмотре списка элементов. Есть одно отличие: при работе с бизнес процессом из просмотра списка есть возможность остановить выполнение процесса:

Бизнес-процессы в Живой ленте

Начиная с редакции Компания есть возможность добавлять в список Бизнес-процессов Живой ленты собственные Бизнес-процессы (БП). Для того, чтобы в общем списке появился ваш Бизнес-процесс нужно:

  1. Вызвать форму создания универсального списка через кнопку Создать новый на странице Компания > Процессы или на странице Компания > Списки.

    Либо воспользоваться командой Создать новый процесс в списке бизнес-процессов Живой ленты. Последний способ - рекомендуемый нами для использования.
  2. Создать и настроить новый Универсальный список:

  3. Создать необходимый Бизнес-процесс в списке:

  4. Если Бизнес-процесс создавался со страницы Компания > Списки, то необходимо с помощью кнопки [image] открыть на редактирование параметры созданного списка и по команде [image] добавить его в список Живой ленты. Кнопка видна только администратору.

    Настроить отображение БП в списке Живой ленты также можно, воспользовавшись флажком Показать в Живой ленте на странице Компания > Процессы:

    После чего Бизнес-процесс появится в списке Живой ленты.

Особенности бизнес-процессов в Живой ленте

В список процессов в Живой ленте попадают только те процессы, у которых стоит автоматический запуск При добавлении. Если шаблон настроен на ручной запуск или на запуск При изменении, то он не будет запускаться из Живой ленты, а только из списка элементов:

Если в Универсальном списке несколько бизнес-процессов с настройкой автоматического запуска При добавлении, то в списке бизнес-процессов Живой ленты отображается тот, который создан позже. Например, надо создать список с двумя БП: по одному происходит уведомление какого-либо лица о запуске процесса, а по другому процессу должны начать выполняться какие-то действия. В этом случае надо сначала создать бизнес-процесс на уведомление, а только потом - БП на действия.


Бизнес-процессы организации
18 / 184


Настройки для бизнес-процессов организации
19 / 184

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

Внимание: Администратор системы может добавлять собственные процессы только при наличии модуля Дизайнер бизнес процессов.

Для настройки и создания публичного интерфейса бизнес-процессов организации:

  • В системе должен быть создан тип информационных блоков (например, Бизнес-процессы), инфоблоками которого будут бизнес-процессы организации:

  • После того как создан необходимый тип инфоблоков, следует создать новую страницу, разместить на ней комплексный компонент Бизнес-процесс (bitrix:bizproc.wizards) и в его настройках указать созданный тип инфоблоков.

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

  • В итоге в публичной части портала появится страница с бизнес-процессами организации.

Примечание: Работа с бизнес процессами организации рассмотрена в курсе Пользователь портала в уроке Бизнес-процессы организации


Создание и редактирование бизнес-процесса организации
20 / 184

Для создания нового бизнес-процесса организации необходимо:

Нажать на кнопку Создать новый:

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

Откроется форма создания нового бизнес-процесса:

  • Вкладка Настройки содержит основные настройки процесса

    • Название процесса - название нового бизнес-процесса организации.
    • Описание процесса - произвольное описание.
    • Сортировка - индекс сортировки бизнес-процесса, определяющий его положение в общем списке. Чем меньше меньше, тем выше в списке он будет располагаться.
    • Картинка - изображение для бизнес-процесса.

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

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

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

После того, как бизнес-процесс создан, можно его изменят и редактировать, щелкнув по нему в списке всех процессов.

В появившемся меню можно выделить следующие вкладки:

  • Добавить элемент - запустить экземпляр данного процесса. По сути это действие идентично вызову бизнес-процесса из вкладки Мои процессы.
  • Управление разделами - создание разделов для группировка элементов
  • Бизнес-процессы создание/редактирование шаблона бизнес-процесса с помощью Дизайнера
  • Настройки процесса - открыть меню настроек бизнес-процесса
  • Экспорт в Excel - экспорт списка элементов в Excel


Дизайнер бизнес-процессов
21 / 184
Модуль Дизайнер бизнес-процессов, входящий в старшие редакции продуктов "1С-Битрикс", предназначен для проектирования, создания и изменения бизнес-процессов.


Дизайнер бизнес-процессов
22 / 184

Проектируем бизнес-процесс

Модуль Дизайнер бизнес-процессов, входящий в старшие редакции продуктов "1С-Битрикс", предназначен для проектирования, создания и изменения бизнес-процессов.

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

Создание бизнес-процессов - это программирование, хоть и без написания кода (в большинстве случаев). Помимо знания предметной области, в которой проектируется шаблон, и знания реального процесса, требуется постановка задачи, алгоритмирование и тестирование. Для этого требуются определенные навыки и базовая подготовка.

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

Примечание: Если проектируемый процесс имеет сложную структуру, то лучше использовать Бизнес-процесс со статусами.


Визуальный конструктор
23 / 184

Как открыть визуальный конструктор

Визуальный конструктор - инструмент, входящий в состав модуля Дизайнер бизнес-процессов, который позволяет создавать и редактировать шаблоны бизнес-процессов.

Административная часть

В административной части есть два способа открытия списка шаблонов бизнес-процессов. Рекомендуемый нами (более удобный) способ вызова визуального конструктора: перейдите к желаемому инфоблоку и нажмите на контекстной панели кнопку Шаблоны бизнес-процессов.

Нажмите на рисунок, чтобы увеличить

После чего используйте меню кнопки Создать шаблон на контекстной панели или команду меню действий Изменить .

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

Нажмите на рисунок, чтобы увеличить

Публичная часть

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

Далее воспользуйтесь кнопками создания бизнес-процессов или отредактируйте существующий с помощью кнопки Изменить в меню действий.


Из чего состоит визуальный конструктор
24 / 184

Внешний вид визуального конструктора

Визуальный конструктор состоит из четырех областей. Его вид будет отличаться в зависимости от того, какой процесс редактируется.

Внешний вид визуального конструктора

1. Контекстная панель

Контекстная панель визуального конструктора состоит из набора кнопок:

  • Параметры шаблона - позволяет задать/изменить основные параметры и параметры запуска бизнес-процесса;
  • Список шаблонов - переход к списку шаблонов бизнес-процессов;
  • Создать шаблон <тип_бизнес-процесса> - позволяет перейти к созданию одного из типов бизнес-процессов;
  • Экспорт - экспорт текущего шаблона бизнес-процесса;
  • Импорт - импорт шаблона бизнес-процесса взамен текущего.

2. Основная рабочая область

Внешний вид основной рабочей области зависит от типа БП: последовательный бизнес процесс или бизнес-процесс со статусами .

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

Для копирования действий перетащите уже существующее действие, зажав клавишу Ctrl. Для удаления действия служит кнопка X, а для выполнения детальной настройки размещенного в шаблоне действия - кнопка X. Некоторые действия сворачиваются для экономии места на экране .

3. Панель действий конструктора

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

Создание своих групп действий в панели действий

Сгруппируйте действия в собственные группы. Для этого внесите изменения в конфигурационный файл .description.php, находящийся в папке конкретного действия (\bitrix\activities\bitrix\).

'CATEGORY' => array(
        'ID' => 'document',
        "OWN_ID" => 'crm',     // идентификатор новой создаваемой группы действий
        "OWN_NAME" => 'CRM',     // название группы, которое будет отображаться в дизайнере
    ),

В итоге получим следующие группировки действий.

4. Кнопки управления

Если осуществляется создание/редактирование шаблона последовательного бизнес-процесса, то отображаются кнопки: Сохранить, Применить и Отменить.

Если же выполняется создание/редактирование шаблона бизнес-процесса со статусами, то отображается только кнопка Вернуться к настройке статусов, которая служит для перехода к схеме шаблона, где и выполняется сохранение/отмена внесенных изменений в статусы и их действия.

Примечание: Если шаблон был изменен, но не сохранен, то при попытке покинуть страницу появится предупреждение о возможной потере несохраненных данных, с возможностью сохранить изменения.

Заключение

Мы узнали, где запустить Визуальный конструктор и как проектировать в нем шаблоны бизнес-процессов. Инструмент, с помощью технологии drag&drop, позволяет наглядно и удобно создавать и редактировать шаблоны бизнес-процессов.


Форма "Вставка значения"
25 / 184

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


Форма "Вставка значения"
26 / 184

Заполняем поля с помощью формы "Вставка значения"

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

Нажмите на рисунок, чтобы увеличить

Разделы

  • Параметры шаблона - вставка параметров шаблона. Задаются для конкретного шаблона в форме, доступной по кнопке Параметры шаблона на контекстной панели визуального конструктора бизнес-процесса. Значение параметра - то, что введет пользователь в соответствующих полях при запуске бизнес-процесса.
  • Переменные - вставка пользовательских переменных, которые могут изменяться по ходу выполнения бизнес-процесса. Пример: дополнительное числовое поле, заполняемое пользователем в процессе выполнения бизнес-процесса.
  • Константы - вставка заранее заданных констант, которые остаются неизменными в процессе исполнения бизнес-процесса. Их значение задается в параметрах шаблона и пользователь, не имеющий доступа к изменению процессов, не может менять их значение.
  • Поля документа - вставка значения какого-либо поля документа, участвующего в бизнес-процессе. Например: Дата создания или Кем создан.
  • Дополнительные результаты - вставка результатов выполнения некоторых действий. Не все действия предоставляют дополнительные результаты. В списке отображаются сразу все доступные результаты для всех действий, добавленных в текущий процесс, если они их поддерживают.
  • Пользователи - вставка пользователя или группы пользователей, которые будут причастны к выполнению бизнес-процесса. Есть возможность выбрать несколько пользователей/групп пользователей. Для этого в качестве разделителя используется символ ;.
  • Категории пользователей - позволяет подробно указать пользователей, которые будут причастны к выполнению бизнес-процесса. В том числе можно выбрать Отдел или Группу соцсети.
Примечание: Возможна вставка как отдельных групп пользователей, так и целых отделов и групп социальной сети . Для этого в настройках прав доступа к элементам и разделам процесса указываем группы, которые вы хотите чтобы отображались в форме . Любая помещенная в эту вкладку группа вне зависимости от указанного уровня доступа будет отображаться в списке.
Дополнительные значения (недоступны напрямую из формы)

Следующие значения недоступны напрямую из формы, но могут быть внесены вручную при проектировании шаблона бизнес-процесса:

  • {=Workflow:ID} - идентификатор бизнес-процесса;
  • {=User:ID} - идентификатор текущего пользователя в формате user_[номер_пользователя_в_системе];
  • {=Template:TargetUser} - параметр, в котором содержится идентификатор пользователя, запустившего бизнес-процесс в формате user_[номер_пользователя_в_системе];
  • {=System:Now} - текущая дата со временем на сервере;
  • {=System:NowLocal} - текущая дата со временем у клиента (учитывается часовой пояс);
  • {=System:Date} - текущая дата без времени;
  • {=Document:DETAIL_PAGE_URL} - позволяет получить ссылку на страницу детального просмотра документа, при условии, что в настройках инфоблока корректно заполнен URL страницы детального просмотра.

Использование некоторых значений полей контактов/компаний (для облачной версии Битрикс24)

В рамках бизнес-процессов для сделок в CRM воспользуйтесь некоторыми значениями из полей контакта или компании, которые связаны с этой сделкой.

Значения для Контактов:

  • {=Document:CONTACT_ID} - ID контакта;
  • {=Document:CONTACT_TYPE_ID} - ID типа контакта;
  • {=Document:CONTACT_NAME} - имя контакта;
  • {=Document:CONTACT_SECOND_NAME} - фамилия контакта;
  • {=Document:CONTACT_LAST_NAME} - отчетство контакта;
  • {=Document:CONTACT_FULL_NAME} - ФИО контакта;
  • {=Document:CONTACT_ADDRESS} - фактический адрес контакта.

Значения для Компаний:

  • {=Document:COMPANY_ID} - ID компании;
  • {=Document:COMPANY_TITLE} - Название компании;
  • {=Document:COMPANY_INDUSTRY} - ID сферы деятельности;
  • {=Document:COMPANY_REVENUE} - годовой оборот;
  • {=Document:COMPANY_CURRENCY_ID} - ID валюты;
  • {=Document:COMPANY_TYPE} - ID типа компании;
  • {=Document:COMPANY_ADDRESS} - фактический адрес компании;
  • {=Document:COMPANY_BANKING_DETAILS} - банковские реквизиты.

Заключение

Мы узнали, как с помощью формы Вставка значение добавлять различные переменные в параметры действий, параметры шаблона и настройки статуса. В следующем уроке посмотрим, как модифицировать эти данные.


Модификация типов данных
27 / 184

Модифицируем данные

Указанные нами параметры, переменные шаблона или поля документа возможно модифицировать. Для этого существуют специальные модификаторы, которые преобразуют данные.

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

Возьмем переменную типа пользователь. Результат, если значение переменной равно Автор:

{=Variable:user}                          author
{=Variable:user_printable}                Автор

Если для поля документа или параметра доступен такой вариант отображения, то он представлен в форме Вставка значения. Если же печатная форма не предусмотрена, запросите вывод печатной формы от любого значения (переменная, дополнительный результат и т.п.). Кроме того, доступно преобразовывать не только в печатную форму, но и менять тип данных .

Таблица преобразования типов данных

Начальный/конечный | bool (Да/Нет) | date (Дата) | datetime (Дата/Время) | double (Число) | int (Целое число) | file (Файл) | select (Список) | string (Строка) | text (Текст) | user (Пользователь)
bool (Да/Нет) | --- | x | x | 1 или 0 | 1 или 0 | х | х | Y или N | Y или N | x
date (Дата) | x | --- | по формату | timeslamp | timeslamp | x | x | по формату | по формату | x
datetime (Дата/Время) | x | по формату | --- | timeslamp | timeslamp | x | x | по формату | по формату | x
double (Число) | 0==N !0==Y | из timeslamp | из timeslamp | --- | (int) | x | x | (string) | (string) | user_<ID>
int (Целое число) | 0==N !0==Y | из timeslamp | из timeslamp | (float) | --- | x | x | (string) | (string) | user_<ID>
file (Файл) | x | x | x | x | x | --- | x | x | x | x
select (Список) | Y или N | x | x | (float) | (int) | x | --- | (string) | (string) | user_<ID> group_<CODE> <ID>
string (Строка) | Y или N | strtotime | strtotime | (float) | (int) | x | x | --- | (string) | user_<ID> group_<CODE> <ID>
text (Текст) | Y или N | strtotime | strtotime | (float) | (int) | x | x | (string) | --- | user_<ID> group_<CODE> <ID>
user (Пользователь) | x | x | x | ID | ID | x | x | (string) | (string) | ---

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

Примечание: при преобразовании типа Список в Строку или Текст берутся значения списка, при преобразовании Списка в Список - ключи списка. Для получения значения ключа списка используйте конвертирование, например: {=Variable:Select > select}.

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

Пример: {=Document:CREATED_BY} > User_1

{=Document:CREATED_BY > printable} > Иван Иванов [1]

{=Document:CREATED_BY > friendly} > Иван Иванов

Важно! Для версий модуля до 15.6.0 преобразование типов данных, в том числе и запрос печатной формы для значений, не имеющих таковой, возможно с помощью переменных и действия PHP-код.

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

Решение некоторых проблем (для коробочной версии)

Если для документа было создано дополнительное поле и оно по каким-либо причинам не отображается в форме Вставка значения, то необходимо перейти к настройкам инфоблока в административной части сайта (Контент > Инфоблоки > Типы инфоблоков > [требуемый_инфоблок], закладка Свойства), и в параметрах свойств этого поля отметить опцию Выводить на странице списка элементов поле для фильтрации по этому свойству:.

Если этого не сделать, то будет невозможно использовать это свойство в бизнес-процессах.


Вычисление значений выражений в параметрах действий
28 / 184

Вычисляем выражения

В системе имеется возможность вычислять значения выражений в параметрах действий. Для этого ставим знак = в поле перед операциями.

Пример: =6^2 + {=Document:PROPERTY_NUM}/2 или =if({Document:ID}=5, "текст1", "текст2").

В каждом поле доступно использовать сразу несколько разных вычислений. Если Вы хотите не только произвести вычисление, но и вывести дополнительные данные (значение переменных, текст), то используйте оператор конкатенации (&), а текст напишите в кавычках (").

Пример : ="Ответ:" & (1+3) или ="Автор: " & {=Document:CREATED_BY} & ", " & "Конечный срок: " & Dateadd({=Document:DATE_CREATE}, "1d")

Примечание: С версии 15.6.0 вычисляемые значения можно просто размещать в тексте, поместив вычисление в конструкцию {{=...}}. Например: Вам необходимо оформить документы до {{=DateAdd({=Document:CREATED}, '5d')}}.

Примечание: Синтаксис символьных операторов аналогичен синтаксису соответствующих php-функций.


Примеры работы с выражениями
29 / 184

Посмотрим примеры работы с выражениями

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

Использование переменных в ссылках

В полях действий, поддерживающих тег [url], доступно использование собственных переменных для создания ссылок.
    [url=http://{=Variable:Domain}/{=Variable:Path}]название ссылки[/url]
где: {=Variable:Domain} и {=Variable:Path} - переменные, содержащие адрес сервера и требуемый путь.

Создание прямой ссылки на страницу с заданием

Используйте ссылку, например, для отправки пользователю сообщения о необходимости выполнить задание в рамках бизнес-процесса.

    Ссылка на страницу с заданием: [url=http://[адрес_портала]/company/personal/bizproc/{=Workflow:ID}/]ссылка на страницу просмотра документа[/url]

Создание ссылки на страницу детального просмотра документа

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

    Ссылка на страницу детального просмотра документа: [url]{=Document:DETAIL_PAGE_URL}[/url]

Примечание: Выражение {=Document:DETAIL_PAGE_URL} формирует нужную ссылку при условии, что в настройках инфоблока корректно заполнен URL страницы детального просмотра.

Создание прямой ссылки к файлу на сервере

Такой сценарий понадобится, если нужно отправить, например, ссылку на скачивание файла клиенту (т.е. кому-то извне).

Допустим, в документе имеется поле Файл. Для получения внутренней ссылки используем: вставка значения Поля документа > Файл (имя).

Ссылка на файл  - {=Document:PROPERTY_FILE_PRINTABLE}

Такая ссылка потребует авторизации на портале. Получить публичную ссылку можно с помощью модификатора src, который нужно указать вручную таким образом:

// удалим _PRINTABLE и добавим модификатор >src и bb-code [url].
Ссылка на файл - [url={=Document:PROPERTY_FILE>src}]link[/url]

Внимание! Использование такого модификатора на коробочных версиях может быть небезопасно. Например, если данный файл загружает пользователь: он может загрузить HTML и по такой ссылке откроется в браузере страница вашего сайта, в которой пользователем может быть написан вредоносный код. Но возможно обойти использованием CDN (как в облачной версии Битрикс24) или настройкой вашего сервера (правила .htaccess и т.п., запрещающие выполнение html/php файлов в папке из папки /upload/).

Проверка корректности времени

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

    =if(and((intval(substr({=Template:Parameter1}, 0, 2)) >= 0), (intval(substr({=Template:Parameter1}, 0, 2)) < 25), (substr({=Template:Parameter1}, 2, 1) = ":"), (intval(substr({=Template:Parameter1}, 3, 2)) >= 0), (intval(substr({=Template:Parameter1}, 3, 2)) < 60)), {=Template:Parameter1}, "время указано неправильно")

Если в параметре {=Template:Parameter1} передается время (в 24 часовом формате ЧЧ:ММ, например 21:45), то возвращается его значение. Иначе вернется время указано неправильно.


Функции калькулятора выражений
30 / 184

Функции для вычислений

При вычислении значений выражений в параметрах действий вы можете использовать следующие функции и операторы:

Функции

Функция Описание
explode Функция разбивает строку с помощью разделителя. Полезна, когда нужно разбить строку и присвоить части как значение множественной переменной. Аналог explode в PHP.
Возвращает массив строк, полученных разбиением строки str с использованием delimiter в качестве разделителя.
explode(
   delimiter,
   str)
Параметры:
  • delimiter - разделитель;
  • str - строка для разделения.
Implode Объединяет множественные значения в строку. Полезна, когда нужно вывести в текст значения множественных переменных нестандартным разделителем (стандартный - просто запятая). Аналог implode в PHP.
Возвращает строку, содержащую строковое представление всех элементов массива в указанном порядке, со значением glue между каждым элементом.
Implode(
   glue,
   pieces
)
Параметры:
  • glue - по умолчанию равен пустой строке;
  • pieces - массив объединяемых строк.
toUserDate Функция приводит любое время к времени сотрудника (с учетом его часового пояса).
toUserDate(
   user,
   date=now
)
Параметры
  • user - пользователь, к чьему времени необходимо привести время БП;
  • date - начальная дата, по умолчанию - текущее время.
GetUserDateOffset Функция возвращает значение смещения часовой зоны пользователя в секундах (относительно серверного времени).
GetUserDateOffset(
   user
)
Параметры:
  • user - пользователь, относительно чьего времени нужно значение.

Операторы

Доступны следующие операторы:

Оператор | Описание
+ Сложение.
- Вычитание.
* Умножение.
/ Деление.
= Равно.
<> Не равно.
< Меньше.
> Больше.
<= Меньше или равно.
>= Больше или равно.
() Порядок действий.
& Оператор конкатенации, который возвращает строку, представляющую собой соединение левого и правого аргумента.
^ Возведение в степень.
% Вычисление процентов.
true | Правда.
false | Ложь.
and | Логический оператор И.
or логический оператор ИЛИ.

Пример: =if(or({=Variable:aaa}>2, {=Variable:bbb}<10), "yes", "no")
not | Отрицание.
min | Наименьшее значение.
abs | Вычисление модуля.
date | Для корректного форматирования даты . Работает аналогично функции Date в PHP.
dateadd Добавляет заданное количество дней, месяцев, лет, часов, минут и секунд к указанной дате.

Синтаксис: =dateadd([начальная_дата], [что_добавлять]);

Варианты написания и примеры
y, year, years, m, month, months, d, day, days, h, hour, hours, i, min, minute, minutes, s, second, seconds.
При написании можно использовать верхний или нижний регистр.
Примеры: =Dateadd({=Document:DATE_CREATE}, "-2d"), =Dateadd({=Document:DATE_CREATE}, "2 days 3 minutes").

В случае, если необходимое для добавления количество единиц времени содержится в поле, переменной и т.п., то необходимо использовать оператор конкатенации &.

Например: =DateAdd({=Document:DATE_CREATE}, {=Variable:WHAT2ADD} & "y 10h")
datediff Позволяет вычислить разницу между двумя датами.

Синтаксис:
=datediff([первая дата], [вторая дата], [как выводить разницу]);

Разницу можно выводить в разных единицах, в зависимости от решаемых вами задач.

Примеры:
=datediff({=Variable:Variable1}, {=Variable:Variable2},'%m month, %d days')
if Условие.

Синтаксис:
=if([условие], [результат_в_случае_выполнения_условия], [результат_в_случае_не_выполнения_условия]);

Пример:
=if ({=Variable:Variable1_printable}>0, "да", "нет")

При сравнении значений переменных также возможно сравнивать переменные с разным типом данных. Однако сравниваемые переменные должны соответствовать таблице преобразования типов.
intval Возвращает целое значение переменной;

Пример:
=intval("234j4hv5jhv43v53jk4vt5hj4") вернет 234.
substr Возвращает подстроку определенной длины, начиная с указанного символа. Данная функция аналогична существующей substr в php.

Синтаксис:
substr([входная строка], [с какого символа исходной строки начнется возвращаемая статья], [какой длины будет строка])

Имейте ввиду, что строка начинает с символа под номером 0. Например, в строке 'abcdef', в позиции 0 находится символ 'a', в позиции 2 - символ 'c', и т.д.

Пример:
{{=substr("0123456789", 3, 4)}} вернет 3456.

Внимание! Если синтаксис выражения будет неправильным, то оно отобразится как текст.
merge Позволяет объединять массивы.

Синтаксис:
= merge({=массив_1}, {=массив_2});

Пример:
= merge({=Document:FILES}, {=Variable:file}).

AddWorkDays Функция добавляет N рабочих дней к указанной дате.

Синтаксис:
=addworkdays([дата, к которой будут добавляться дни], [количество добавляемых рабочих дней]).

Примеры:

  • {{=addworkdays('07.03.2016', 1)}} - результат: 09.03.2016 00:00:00, т.к. в настройках сайта 8 марта - выходной.
  • {{=addworkdays('05.02.2016 16:14:00', 1)}} - результат: т.к. 05.02.2016 - пятница, то результат: 08.02.2016 16:14:00 - понедельник.
isWorkDay Проверяет, является ли дата рабочим днем (по Календарю).

Синтаксис:
=if(isWorkDay([проверяемая дата]), [сообщение, если дата является рабочим днем], [сообщение, если не является]).

Пример:
{{=if(isWorkDay({=Template:Parameter1}), 'Да', 'Нет')}} - в параметре содержится дата 28.04.2016. Результат - Да, т.к. это рабочий день.
isWorkTime Аналогична функции isWorkDay, но для типов данных Дата/Время.

Синтаксис:
=if(isWorkDay([проверяемая дата со временем]), [сообщение, если дата со временем является попадает на рабочее время], [сообщение, если не попадает]).

Пример:
{{=if(isWorkTime({=Template:Parameter1}), 'Да', 'Нет')}} - в параметре содержится дата со временем 27.04.2016 15:00:00. Результат - Да, т.к. это рабочее время.
WorkDateAdd Добавляет заданное количество рабочих дней, часов и минут к указанной дате.

Синтаксис:
=WorkDateAdd([начальная_дата], [что_добавлять]).

Варианты написания и примеры
Варианты написания: d, day, days, h, hour, hours, i, min, minute, minutes. Допустимо написание как в верхнем, так и в нижнем регистре.

Пример:
=WorkDateAdd({=Template:Parameter1}, "2d") - в параметре содержится дата 28.04.2016. Результат - 02.05.2016 09:00:00, т.к. 30.04 и 1.05 - это выходные дни, то они будут пропущены. 09:00:00 - начало рабочего дня. Список выходных дней и начало рабочего дня настраивается в Настройках портала.


Примеры работы с датами
31 / 184

Работаем с датами в бизнес-процессах

В уроке рассмотрим возможности работы с датами в бизнес-процессах:

  • Перевод даты на русский язык
  • Относительный формат даты
  • Добавление N дней из параметра
    •

    Результаты выведем с помощью действия Сообщение соц.сети .

    Перевод даты на русский язык

    Для вывода даты используется функция date . В примере используем параметр F - полное наименование месяца. Список всех параметров функции смотрите в документации по PHP.

    Текущий месяц - {{=date('F',{=System:Date})}}

    В результате получим уведомление вида Текущий месяц - April.

    Для получения названия месяца на русском языке понадобится создать Список соответствия для названий месяцев. Введем переменную бизнес-процесса типа Список:

    В вариантах значений в квадратных скобках укажем ключ - номер месяца, а после - значение (название месяца на русском языке).

    Вернемся к шаблону бизнес-процесса и перед сообщением соц.сети добавим действие Изменение переменных в котором укажем функцию {{=date('n')}}, где n - порядковый номер месяца без ведущего нуля (из документации по PHP).

    В действии Уведомление соц. сети поменяем текст сообщения на вывод нашей переменной Variable1:

    Текущий месяц - {=Variable:Variable1 > printable}

    Результат:

    Таким же образом можно выводить дни недели и др. подобные даты.

    Относительный формат даты

    Задание: необходимо вывести дату - пятница следующей недели. Сделать это можно с помощью работы функции strtotime и относительных форматов PHP.

    Создадим новую переменную Дата и снова воспользуемся действием Изменение переменных, как в примере выше. Укажем значение ='next week friday':

    А в тексте сообщения соц. сети выведем переменную Дата.

    Следующая пятница - {=Variable:Variable2 > printable}

    Результат

    Добавление N дней из параметра

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

    Для этого понадобится функция dateadd:

    Текущая дата + 2 дня: {{=dateadd({=System:Date}, '2d')}} // прибавим 2 дня к текущей дате

    Теперь посмотрим, как правильно добавлять количество дней, которое хранится в параметре БП:

    Текущая дата + N дней: {{=dateadd({=System:Date}, {=Template:Parameter1} & 'd')}} // прибавим дни из параметра к текущей дате

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

    Результат (при запуске БП для параметра указано значение 10):

    Дополнительно

    • Функции калькулятора выражений.


Вычисляем числовые значения с записью в поля документа
32 / 184

Пример вычисления числовых значений

Рассмотрим небольшой пример работы с полями документа и вычислением их значений . Для простоты воспользуемся функционалом списков (Сервисы > Списки). Описанные ниже действия применимы и к другим типам документов, например, CRM. За основу примера возьмем сообщение с форума:

"Доброго времени суток, может кто сталкивался с такой задачей, нужно чтоб во время оформления сделки высчитывалась чистая прибыль, т.е. от заложенной суммы сделки вычитался налог усн (6%), вычитались затраты на подряд (если они есть) и все это потом записывалось в отчет менеджера по проведенной сделке."

Порядок действий

  • Создадим новый список, а в нем набор полей типа число :

    • Сумма;
    • Затраты на подряд ;
    • Налог (6%). Считается автоматически;
    • Итоговая сумма. Считается автоматически.
  • Создадим шаблон последовательного бизнес-процесса и настроим его на запуск при добавлении нового элемента.
  • Добавим и настроим первое действие Изменение документа , которое вычислит налог от общей суммы :

    Поле: Налог (6%). Считается автоматически,

    Значение: ={=Document:PROPERTY_s}*0.06,

    где {=Document:PROPERTY_s} является значением поля Сумма.

  • Добавим и настроим второе действие Изменение документа, которое вычислит итоговую сумму с учетом всех вычетов:

    Поле: Итоговая сумма. Считается автоматически,

    Значение: ={=Document:PROPERTY_s}-{=Document:PROPERTY_contract}-{=Document:PROPERTY_tax},

    где

    {=Document:PROPERTY_s} - значение поля Сумма,
    {=Document:PROPERTY_contract} - значение поля Затраты на подряд,
    {=Document:PROPERTY_tax} - значение поля Налог (6%). Считается автоматически.

Дополнительно

Шаблон для ознакомления : Скачать


Шаблоны бизнес-процессов
33 / 184
Шаблон бизнес-процесса представляет собой последовательность шагов (действий) от начального к конечному, которые будут выполняться один за другим. Необходимо таким образом и в таком порядке составить шаги (действия), чтобы реализовать нужный нам алгоритм и получить необходимый результат.


Примечание для библиотеки документов
34 / 184

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

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


Настройка параметров шаблона
35 / 184

Настроим параметры шаблона

Шаблон БП представляет собой последовательность шагов (действий) от начального к конечному, которые выполняются один за другим. Необходимо таким образом и в таком порядке составить шаги (действия), чтобы реализовать нужный нам алгоритм и получить необходимый результат.

Шаблоны бизнес-процессов используются для быстрой и эффективной настройки формы бизнес-процесса согласно потребностям сотрудника. При создании бизнес-процесса на основе шаблона происходит не только изменение внешнего вида бизнес-процесса, но и заполнение его некоторыми начальными параметрами.

Создание шаблона

Процесс проектирования шаблона бизнес-процесса разделим на два этапа:
  • первый - это задание основных параметров шаблона ;
  • второй - конструирование шаблона, по которому будет выполняться бизнес-процесс.

Посмотрим первый этап. Форма настройки параметров шаблона бизнес-процесса разделена на несколько закладок, с помощью которых задаются параметры запуска и настройки бизнес-процесса.

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

Основное

На закладке Основное указываются название шаблона бизнес-процесса, его описание и определяются параметры автоматического запуска. Бизнес-процесс имеет два варианта автоматического запуска: при создании и/или при изменении элемента. Если оба флага сняты, то бизнес-процесс возможно запустить только вручную.

Параметры

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

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

    Примечание: для некоторых типов данных значение по умолчанию можем указать с помощью кнопки [...], по нажатии которой открывается форма Вставка значения .

После создания параметр отобразится в общем списке .

Переменные

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

Константы / Глобальные константы

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

Глобальные константы попадают сразу во все процессы. Создаются аналогично Константам.

Доступ

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

Особенности назначения прав в системе
Если для документа используется упрощенная (старая) версия прав, то они устанавливаются жестко извне (настройки доступа к инфоблокам/спискам/и т.д.). Единственный вариант, позволяющий устанавливать права прямо из бизнес-процесса - это установка для документа права бизнес-процессы извне (права на сам документ). В этом случае с помощью закладки Доступ или действия Установка прав можно менять права по ходу выполнения процесса.

Если используются расширенные права доступа, то из бизнес-процесса можно только добавлять новые права на документ, которые будут оставаться у документа даже после выполнения процесса. Переопределить права, которые были установлены извне, внутри бизнес-процесса нельзя.

Заключение

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


Создание шаблона последовательного бизнес-процесса
36 / 184

Создадим шаблон последовательного бизнес-процесса

Посмотрим видеоролик о создании шаблона последовательного бизнес-процесса . Узнаем как использовать визуальный конструктор и настраивать параметры действий.

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

Текстовое содержание видео

При проектировании шаблона последовательного бизнес-процесса после настройки и сохранения его параметров сразу становится доступным визуальный конструктор для конструирования шаблона.

Конструирование шаблона выполняется путем добавления в рабочую область необходимых действий с последующей настройкой их параметров.

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

Заполните необходимые поля. Для упрощения процедуры заполнения полей служит кнопка [image], при нажатии которой открывается зависящая от типа поля форма Вставка значения .

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

По окончании настройки параметров действия, сохраните его. Система вернется к созданию (редактированию) шаблона бизнес-процесса.

Когда в шаблон будут добавлены и настроены все необходимые действия, не забудьте сохранить его. Шаблон отобразится в списке всех шаблонов бизнес-процессов.


Создание шаблона бизнес-процесса со статусами
37 / 184

Создаем шаблон бизнес-процесса со статусами

Посмотрим видеоролики о создании шаблона бизнес-процесса со статусами . Мы создадим статусы документа, настроим действия внутри каждого из них, а также сделаем связи между ними.

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

Текстовое содержание видео

При проектировании шаблона бизнес-процесса со статусами, после настройки и сохранения его параметров осуществляется переход к конструированию непосредственно самого шаблона в 3 этапа:

  1. Создание необходимых статусов;
  2. Настройка действий внутри каждого статуса и создание связей между статусами;
  3. Настройка прав доступа для статуса.

Создание статусов

Создание статусов выполняется на главной странице построения шаблона бизнес-процесса:

  • Нажмите кнопку Добавить статус для создания нового статуса.

    Важно! Бизнес-процесс всегда начинается с первого созданного статуса. Изменить статус, с которого начинается процесс, в последующем невозможно.

  • В форме создания статуса указывается его название и права доступа к документу (элементу бизнес-процесса).
  • Сохраните статус.

Аналогичным образом добавляются все необходимые статусы .

Настройка действий внутри каждого статуса и создание связей между статусами

После того, как все статусы созданы, следует настроить операции и действия (подпроцессы), которые выполняются в каждом статусе, а также создать связи между статусами.

Для каждого статуса настраивается :

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

Настройка прав доступа для статуса

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

В настройках списка укажем следующие права доступа: Сотрудники = добавление; Автор = чтение. После такой настройки прав сотрудник сможет добавлять элементы списка и просматривать только свои, но он не сможет видеть текущий статус бизнес-процесса на соответствующей вкладке при детальном просмотре элемента списка.

Примечание: Смысл в том, что права на список и права у бизнес-процесса - это разные права. И по правилам списков (инфоблоков) они "не знают" такой тип пользователя как Автор (это понятие только для бизнес-процессов).

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

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

Содержание видеоролика может отличаться от текущей версии продукта. Более актуальная информация содержится в тексте урока.

Общая схема работы

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

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

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

Небольшой пример настройки статуса

Рассмотрим добавление команды для статуса Черновик:

  • В выпадающем меню для данного статуса выберите пункт Команда. Откроется форма настройки основных параметров команды.
  • Укажите название команды и пользователей, которые могут выполнить данную команду. Если документ должен сменить статус после выполнения команды, то выберите необходимый статус с помощью выпадающего списка. Список статусов формируется из статусов бизнес-процесса.
  • Сохраните параметры команды.

В результате будет создано действие в статусе и связь между статусами.

Поскольку команда - это собственный последовательный бизнес-процесс, то процесс необходимо создать :

  • Кликнете по названию команды. Откроется визуальный конструктор . В конструкторе уже содержится действие Установить статус, так как в ходе выполнения команды происходит смена статуса бизнес-процесса. В схему команды добавьте необходимые вам действия и выполните их настройку. Для возврата на главную страницу создания шаблона бизнес-процесса со статусами служит кнопка Вернуться к настройке статусов.
  • Для настройки действий в каждом статусе повторите описанные выше шаги. Результат:

  • По окончании выполнения необходимых настроек не забудьте сохранить шаблон с помощью кнопки Сохранить, доступной на главной странице со статусами бизнес-процесса.


Пример использования параметров шаблона
38 / 184

Посмотрим, как использовать параметры шаблона

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

Настройки

  • В форме Параметры шаблона на закладке Параметры создан параметр Ознакомить типа Пользователь.
  • В действии Почтовое сообщение созданный параметр указан в поле Получатель (с помощью формы Вставка значения , группа Параметры шаблона).

В результате при запуске бизнес процесса у пользователя запрашиваются дополнительные параметры:


Пример: организация обработки и доработки документа
39 / 184

Используем бизнес-процесс со статусами

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

Начальные действия:

  • Создадим 3 статуса: Рассмотрение документа, Доработка, Утвержден.
  • В каждом добавим подпроцесс Вход в статус .

Cтатус Рассмотрение документа

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

Получится такой процесс : в случае если проверяющий сотрудник утвердит документ, то бизнес процесс перейдет в статус Утвержден, иначе - в статус Доработка.

Статус Доработка

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

В результате в этом статусе мы получим от автора нужные исправления/комментарии и отправим документ на повторное утверждение.

Статус Утвержден

В этом статусе, например, добавляем действие для оповещения автора о результатах утверждения документа.

В итоге, после всех настроек, наш бизнес процесс со статусами выглядит так:

Дополнительно

Шаблон для ознакомления: Скачать


Экспорт и импорт
40 / 184

Если нужно перенести шаблон

Процесс переноса шаблона с одного проекта на другой достаточно простой. Для этого необходимо воспользоваться кнопками на контекстной панели дизайнера бизнес-процессов .

Перед этим в проекте, куда импортируется шаблон, необходимо создать такие же типы документов (инфоблок/список/и т.д.) как и в проекте, откуда экспортируется шаблон.

Внимание! Нельзя экспортировать шаблон процесса с одним типом документа в процесс с другим. Пример: экспортировать шаблон из CRM в Списки.

Особенности импорта шаблона бизнес-процесса списков
В связи с особенностью работы модуля списков импорт шаблона бизнес-процесса проводят с некоторыми условиями.

Наиболее простой вариант - это изначально создать и настроить список, поля и шаблон бизнес-процесса:

  • Создать пользовательские поля в исходном списке не через интерфейс списков, а прямо через интерфейс конструктора бизнес-процессов;
  • После экспорта шаблона из исходного списка в новый обязательно проверить все действия, где используются пользовательские поля.

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

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

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


Действия
41 / 184

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


Общие моменты
42 / 184

Что общего у большинства действий

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

Настройка параметров действия

Настройка параметров действия производится в соответствующей форме, которая вызывается с помощью двойного клика по тексту заголовка действия или с помощью кнопки [image] расположенной на нем.

Общие моменты для большинства действий

  • Поле Заголовок - позволяет задать заголовок действия, который будет отображен в визуальном конструкторе.
  • [Ид] - ссылка, позволяющая просмотреть/изменить уникальный идентификатор действия . Например, его можно использовать при просмотре истории выполнения бизнес-процесса в административной части сайта.
  • Поля выбора пользователей/групп. Пользователя/группу можно выбрать из списка или задать непосредственно вручную. Для этого нужно указать в поле идентификатор в квадратных скобках для пользователя, например [1] или без скобок - для группы пользователей.
  • Поля Описание задания позволяют использовать следующие теги bb-code: [img], [url], [b], [i], [s], [u]. Тег [url] можно использовать и в уведомлениях, например, в поле Текст сообщения действия Сообщение соц.сети .
  • В любых действиях, где есть возможность множественного выбора полей или условий, доступен выбор только из одной сущности. Например, в действии Цикл выход из цикла можно организовать либо по сочетанию группы полей, либо по сочетанию группы условий.

Документация по теме:

  • Создание собственных действий


Обработка документа
43 / 184

В группе собраны действия, связанные с этапами обработки документа.


Публикация на подключенных сайтах
44 / 184

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

Описание Параметров

Тип выбора сайтов - указывается, на каких сайтах будет опубликован элемент инфоблока

  • Все сайты;
  • Сайты принадлежащие определенным группам;
  • Выбранные сайты из одной группы.

Синхронизировать элементы:

  • немедленно - элементы будут синхронизированы немедленно;
  • используя задачи - синхронизация будет происходить с использованием задач .

Важно! С версии 15.5.0 Дизайнера бизнес-процессов данное действие включено только для модуля Инфоблоки.


Создание элемента списка
45 / 184

Действие позволяет создать элемент указанного списка.

Описание параметров

Тип документа - выбор инфоблока создаваемого элемента. В зависимости от выбранного типа будет предложено заполнить необходимые поля.


Запуск бизнес-процесса
46 / 184

Действие выполняет другой шаблон бизнес-процесса.

Параметры

ID документа - идентификатор документа, который запускает бизнес-процесс.

Для запуска бизнес-процесса над элементами CRM синтаксис будет другой:
  1. если процесс для Компании, то COMPANY_{=Document: ID} - запустит БП для этой же компании, LEAD_{=Document: LEAD_ID} - запустит бизнес-процесс для связанного лида;
  2. если процесс для Контакта, то CONTACT_{=Document: ID} - запустит БП для этого же контакта, LEAD_{=Document: LEAD_ID} - запустит бизнес-процесс для связанного лида;
  3. если процесс для Сделки, то DEAL_{=Document: ID} - запустит БП для этой же сделки, LEAD_{=Document: LEAD_ID} - запустит БП для связанного лида, CONTACT_{=Document: CONTACT_ID} - запустит БП для связанного контакта, COMPANY_{=Document: COMPANY_ID} - запустит бизнес-процесс для связанной компании;
  4. если процесс для Лида, то LEAD_{=Document: ID} - запустит бизнес-процесс для этого же лида.

Сущность - какой элемент запускает бизнес-процесс.

Тип документа

Шаблон - шаблон запускаемого бизнес-процесса.

Ожидать завершения бизнес-процесса - бизнес-процесс будет ожидать выполнения запущенного действия и только потом продолжит свое исполнение.


Создание нового документа
47 / 184

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

Описание Параметров

В зависимости от типа документа, поля могут отличаться.

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


Удаление документа
48 / 184

Действие удаляет документ, запустивший бизнес-процесс.


Блокировка документа
49 / 184

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

Блокировка продлится до завершения текущего бизнес-процесса либо пока не выполнится действие Разблокировка

Важно! С версии 15.5.0 Дизайнера бизнес-процессов данное действие исключено для модуля Диск.


Публикация документа
50 / 184

Действие переводит документ в статус опубликован.

Актуально в коробочной версии для бизнес-процессов, запущенных на инфоблоках.


Сохранение истории документа
51 / 184

Действие позволяет создать слепок документа с внесенными на момент запуска действия изменениями. Доступно автоматическое задание названия копии с настройками параметров.

Описание Параметров

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

Оставьте поле пустым для того, чтобы название бралось из документа.

Важно! С версии 15.5.0 Дизайнера бизнес-процессов данное действие исключено для модуля Диск.


Изменение документа
52 / 184

Действие изменяет указанные поля документа.

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

Ссылка Добавить поле создает новое поле в документе.

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


Разблокировка документа
53 / 184

Действие разблокирует документ для других бизнес-процессов.

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

Важно! С версии 15.5.0 Дизайнера бизнес-процессов данное действие исключено для модуля Диск.


Снятие документа с публикации
54 / 184

Действие снимает документ с публикации.

Противоположно действию Публикация документа .


Задания
55 / 184

В группе содержатся действия, создающие задания бизнес-процессов для пользователей.


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

Действие позволяет произвести утверждение документа , для которого запущен бизнес-процесс. В зависимости от результата (утвержден документ или нет) возможны 2 варианта развития дальнейших действий.

Описание Параметров

Утверждают сотрудники - указываются пользователи, которые должны утвердить документ.

Тип утверждения:
  • Все сотрудники - утвердить должны все пользователи указанные выше;
  • Любой сотрудник - утвердить должен любой из пользователей, указанных выше;
  • Голосование сотрудников - утверждение производится методом голосования среди указанных выше пользователей.
    дополнительные поля
    Для варианта Голосование сотрудников доступны поля Более скольки процентов голосов необходимо для принятия решения и Ожидать, чтобы проголосовали все указанные сотрудники.
    Последнее поле можно использовать для автоматизации передавая в него значения Y или N. Если выбран вариант да, то действие будет ожидать, пока не проголосуют все указанные выше сотрудники. Если выбран вариант нет, то действие будет ожидать, пока не наберется указанный процент голосов.

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

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

Устанавливать текст статуса - позволяет изменить текст статуса документа на произвольный. Это может, например, позволить отслеживать на каком этапе сейчас находится бизнес-процесс.

Текст статуса - задается текст статуса.

Модификаторы
Можно использовать следующие модификаторы в тексте статуса: #PERCENT# - процент, #VOTED# - ознакомлено человек, #TOTAL# - всего должно быть ознакомлено, #APPROVERS# - список утвердивших, #REJECTERS# - список отклонивших.

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

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

Обязательность комментария - опция позволяет назначить добавление комментария при выполнении действия обязательным. Можно включить обязательность комментария только для утверждения или отклонения документа.

Метка для поля комментария - подпись для поля с комментарием.

Период утверждения - Можно задать период, за время которого, если документ не будет утвержден либо отклонен, то документ будет автоматически отвергнут. Пустое значение или 0 - отсутствие периода.

Ограничить доступ - делает текст задания видимым только для исполнителя задания и не показывает его в живой ленте. Это очень полезная опция, если нужно, например, передать исполнителю конфиденциальную информацию: пароли, пин-коды и т.п.

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

Например
Eсли в Списке для определенной группы пользователей задать право только на добавление, то историю изменения (и комментарии соответственно), пользователь этой группы при выполнении задания не увидит:

Результаты выполнения действия

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

Доступно следующее:

  • Комментарий;
  • Сколько проголосовало;
  • Сколько должно проголосовать;
  • Процент проголосовавших;
  • Процент утвердивших;
  • Процент отклонивших;
  • Количество утвердивших;
  • Количество отклонивших;
  • Последний голосовавший;
  • Утвердили пользователи;
  • Утвердили пользователи (текст) - получение списка пользователей;
  • Отклонили пользователи;
  • Отклонили пользователи (текст)- получение списка пользователей;
  • Автоматическое отклонение - поле будет содержать 1, если документ был автоматически отклонен (см. Период утверждения).


Запрос доп.информации (с отклонением)
57 / 184

Действие создаст задание, в ходе которого, у пользователя (или пользователей) запрашивается дополнительная информация, необходимая для выполнения бизнес-процесса. В отличие от стандартного действия Запрос дополнительной информации , пользователь имеет возможность отклонить ввод информации.

Описание Параметров

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

Название задания - задается название, которое отобразится в интерфейсе для пользователей.

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

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

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

Тип отклонения - указывается принцип, по которому будет проводиться отклонение ввода информации:

  1. Все сотрудники - запрос информации будет проводиться, пока все указанные сотрудники его не отклонят;
  2. Любой сотрудник - при первом же отклонении каким-либо сотрудником, другие сотрудники запросы не получают.

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

Обязательность комментария - опция позволяет назначить добавление комментария при выполнении действия обязательным.

Метка для поля комментария - подпись для поля с комментарием.

Устанавливать текст статуса - позволяет изменить текст статуса документа на произвольный. Это может, например, позволить отслеживать на каком этапе сейчас находится бизнес-процесс.

Текст статуса - задается текст статуса.

Период ожидания информации: По окончании периода задание будет автоматически завершено. Пустое значение или 0 - отсутствие периода. - позволяет установить время, в течение которого действие будет ожидать выполнения.

Ограничить доступ - делает текст задания видимым только для исполнителя задания и не показывает его в живой ленте. Это очень полезная опция, если нужно, например, передать исполнителю конфиденциальную информацию: пароли, пин-коды и т.п.

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

Переменные

В этом разделе можно получить содержимое дополнительных полей, созданных в разделе Поля.

Результаты выполнения действия

Результаты выполнения этого действия можно получить с помощью формы Вставка значения - Дополнительные результаты, в которой они будут доступны сразу после добавления действия в шаблон:

  • Комментарий.
  • Автоматическое завершение.
  • Пользователь, предоставивший информацию.


Запрос дополнительной информации
58 / 184

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

Описание Параметров

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

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

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

Текст кнопки в задании - позволяют задать собственный текст для соответствующей кнопки.

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

Обязательность комментария - опция позволяет назначить добавление комментария при выполнении действия обязательным.

Метка для поля комментария - подпись для поля с комментарием.

Устанавливать текст статуса - позволяет изменить текст статуса документа на произвольный. Это может, например, позволить отслеживать на каком этапе сейчас находится бизнес-процесс.

Текст статуса - задается текст статуса.

Период ожидания информации: По окончании периода задание будет автоматически завершено. Пустое значение или 0 - отсутствие периода. - позволяет установить время, в течение которого действие будет ожидать выполнения.

Ограничить доступ - делает текст задания видимым только для исполнителя задания и не показывает его в живой ленте. Это очень полезная опция, если нужно, например, передать исполнителю конфиденциальную информацию: пароли, пин-коды и т.п.

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

Содержимое полей после выполнения действия можно получить в форме Вставка значения - Переменные.

Переменные

В этом разделе можно получить содержимое дополнительных полей, созданных в разделе Поля.

Результаты выполнения действия

Результаты выполнения этого действия можно получить с помощью формы Вставка значения - Дополнительные результаты, в которой они будут доступны сразу после добавления действия в шаблон:

  • Комментарий.
  • Автоматическое завершение.
  • Пользователь, предоставивший информацию.
  • Измененные поля.


Ознакомление с документом
59 / 184

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

Описание Параметров

Ознакомить пользователей - указываются пользователи, которые должны ознакомиться с документом.

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

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

Должны ознакомиться:

  • Все сотрудники - задача не будет выполнена пока с документом не ознакомятся все пользователи, указанные выше;
  • Любой сотрудник - с документом должен ознакомиться любой из пользователей, указанных выше.

Устанавливать текст статуса - позволяет изменить текст статуса документа на произвольный. Это может, например, позволить отслеживать на каком этапе сейчас находится бизнес-процесс.

Текст статуса - задается текст статуса.

Модификаторы
Можно использовать следующие модификаторы в тексте статуса: #PERCENT# - процент, #REVIEWED# - ознакомлено человек, #TOTAL# - всего должно быть ознакомлено, #REVIEWERS# - кто ознакомлен.

Текст кнопки в задании - позволяют задать собственный текст для соответствующей кнопки.

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

Обязательность комментария - опция позволяет назначить добавление комментария при выполнении действия обязательным.

Метка для поля комментария - подпись для поля с комментарием.

Период ознакомления - можно задать период, если до окончания которого пользователи не будут ознакомлены с документом, то задание по ознакомлению будет автоматически завершено. Пустое значение или 0 - отсутствие периода.

Ограничить доступ - делает текст задания видимым только для исполнителя задания и не показывает его в живой ленте. Это очень полезная опция, если нужно, например, передать исполнителю конфиденциальную информацию: пароли, пин-коды и т.п.

Результаты выполнения действия

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

Доступно следующее:

  • Комментарий;
  • Сколько ознакомлено;
  • Сколько должно быть ознакомлено;
  • Автоматическое ознакомление - поле будет содержать 1, если задание по ознакомлению было автоматически завершено (см. Период ознакомления);
  • Последний ознакомившийся - ID последнего пользователя ознакомившегося с документом.


Конструкции
60 / 184

В группе собраны управляющие конструкции.


Команда
61 / 184

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

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

Описание Параметров

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

Результаты выполнения действия

Результаты выполнения этого действия можно получить с помощью формы Вставка значения - Дополнительные результаты, в которой они будут доступны сразу после добавления действия в шаблон:

  • Пользователь, отправивший команду.

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

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


Условие
62 / 184

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

Проверка условий начинается слева направо. Если условие выполняется, то действия, расположенные в ветке под ним, будут исполнены. Если же какое-либо условие не выполняется, то будет произведен переход к условию, расположенному правее и так до тех пор, пока какое-либо условие не будет выполнено.

Тип условия - PHP код

В качестве условия указывается код . В случае если указанный PHP код вернет значение true, то будет выполнена ветка действий условия, если возвратится false, то будет произведен переход к следующему условию.

Внимание! Для этого типа условия можно использовать только PHP-код. Параметры типа {=Variable:Variable2_printable} не поддерживаются. Также результатом выполнения кода в условии должно быть логическое выражение (true или false).

Тип условия - Поле документа

Ветка действий условия будет выполнена, если совпадут параметры, связанные с полями документа.

Тип условия - Значение переменной

Ветка действий условия будет выполнена , если совпадут параметры, связанные с переменными бизнес-процесса.

Тип условия - Истина

Ветка действий будет выполнена сразу. Это условие выполняется всегда.

Тип условия - Было изменено

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

Как настроить этот тип условия (для разработчика)
Для того, чтобы можно было использовать данный тип условия, нужна реализация на стороне модуля, который работает с процессом. При старте процесса необходимо передавать массив изменившихся полей через параметр CBPDocument::PARAM_MODIFIED_DOCUMENT_FIELDS:
CBPDocument::StartWorkflow(
   $arDocumentState["TEMPLATE_ID"],
   BizProcDocument::getDocumentComplexId($arParams["IBLOCK_TYPE_ID"], $arResult["ELEMENT_ID"]),
   array_merge($arBizProcParametersValues[$arDocumentState["TEMPLATE_ID"]], array(
      CBPDocument::PARAM_TAGRET_USER => "user_".intval($GLOBALS["USER"]->GetID()),
      CBPDocument::PARAM_MODIFIED_DOCUMENT_FIELDS => $modifiedFields
   )),
   $arErrorsTmp
);

А для того, чтобы новое условие появилось в редакторе для настройки, необходимо реализовать в документе его поддержку:

public static function isFeatureEnabled($documentType, $feature)
{
   return in_array($feature, array(\CBPDocumentService::FEATURE_MARK_MODIFIED_FIELDS));
}

Внимание! Если ни одно из условий не выполнится, то, бизнес-процесс продолжит выполнять действия расположенные под конструкцией Условие. Другими словами он ее "перескочит".

Объединение условий

Для типов условия Поле документа и Значение переменной возможно объединять условия по правилу И / ИЛИ. При выборе И ветка условий будет исполняться при выполнении обоих условий, а при ИЛИ - любое из указанных.


Параллельное ожидание действия
63 / 184

Конструкция позволяющая направить бизнес-процесс по разным сценариям в зависимости от того, какое из событий наступит раньше.

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

Действие Пауза позволяет продолжить выполнение бизнес-процесса через определенное время в случае, если ни одна из команд не будет выполнена. Иначе бизнес-процесс просто остановится и будет ожидать выполнения какой-либо команды внутри конструкции.


Параллельное выполнение
64 / 184

Конструкция, позволяющая выполнять параллельные сценарии бизнес-процесса.

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


Установить статус
65 / 184

Действие позволяет перевести бизнес-процесс в другой статус , которое доступно только для бизнес-процессов со статусами.

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


Итератор
66 / 184

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

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

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

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


Цикл
67 / 184

Конструкция выполняет свои поддействия до тех пор, пока выполняется заданное условие.

Другими словами цикл работает пока условие истино (true), иначе (false) происходит выход из цикла.

Тип условия - PHP код

В качестве условия указывается код .

В случае если указанный PHP код вернет значение true, то цикл продолжит работу, если возвратится false, то будет произведен выход из цикла.

Тип условия - Поле документа

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

Тип условия - Значение переменной

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

Тип условия - Истина

В этом случае цикл будет выполняться всегда

Внимание! Для облачной версии Битрикс24 количество итераций цикла ограничено 1000.

Дополнительно

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


Уведомления
68 / 184

В группе собраны все виды уведомления о событии.


График отсутствия
69 / 184

Действие позволяет добавить событие в график отсутствия.

Внимание! Действие относится к продукту Корпоративный портал и работает только там.

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.

Пользователь - указывается пользователь, для которого будет занесено событие в график отсутствия.


Информационный звонок
70 / 184

Действие позволяет совершить информационный звонок на указанный номер.

Внимание! Действие работает только при работающей телефонии.

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.

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

Ожидать результата - Приостановить или нет действие Бизнес-процесса пока не будет завершено выполнение информационного звонка.


Календарь
71 / 184

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

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

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.

Пользователь - указывается пользователь, для которого будет создано событие в календаре.


Событие календаря
72 / 184

Действие позволяет добавить событие в календарь (используется для модуля Календарь событий).

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.

Тип календаря (не обязательное) - задается тип календаря, в котором будет создано событие .

Доступные типы календарей можно посмотреть в настройках модуля (Настройки > Настройки продукта > Настройки модулей > Календарь событий, закладка "Типы календарей").

ID владельца календаря (не обязательное) - указывается идентификатор владельца календаря. В случае создания события в календаре группы указывается ее идентификатор (см. пример ниже).

Примечание: Данное поле актуально, только если Тип календаря не равен user.

Пользователь - указывается пользователь, для которого будет создано событие в календаре.

Пример:
Для создания события в группе (которая, например, имеет адрес http://site_domen/workgroups/group/5/), помимо основных полей, необходимо заполнить поля следующим образом:
  • Тип календаря (не обязательно): group
  • ID владельца календаря (не обязательно): 5

Внимание! Получить значение поля ID секции календаря (не обязательно) можно из базы данных, из исходного кода страницы или из анализа AJAX запроса. Поэтому данное поле лучше заполнять программисту.


Уведомление пользователя
73 / 184

Действие позволяет отправлять сообщения на сайт /XMPP/e-mail .

Описание Параметров

Текст уведомления для сайта - задается текст сообщения, который будет отображаться в качестве уведомления на сайте, если пользователь не использует XMPP.
Для текста доступно форматирование BBCode ([b], [i], [s], [u], [url]).

Текст уведомления для email/jabber - задается текст сообщения для e-mail/XMPP, который будет отправлен, если пользователь не авторизован на сайте. Текст сообщения можно задать как отличный от текста уведомления для сайта, так и такой же, оставив для этого поле пустым.

Тип уведомления - позволяет указать от кого придет сообщение: от конкретного человека или же это будет системное сообщение.


Почтовое сообщение
74 / 184

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

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.

Тип сообщения - указывается, как будет отправлено сообщение: в виде текста или с использованием html.

Кодировка - Задается кодировка отправляемого сообщения.

Способ отправки - выбирается способ отправки сообщения:

  • Прямая отправка - сообщение будет отправлено сразу ;
  • Отправка через систему сообщений - сообщение будет отправлено через встроенную почтовую систему. Отправка может произойти не сразу .

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

Вложение - позволяет добавить к письму документы, хранящиеся в полях, параметрах либо переменных типа Файл или Файл (Диск).

Разделитель почтовых адресов - указывается символ, которым можно разделить почтовые адреса получателей при групповой рассылке.


Установить текст статуса
75 / 184

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

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.


Сообщение соц.сети
76 / 184

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

Если пользователь не активен в течение 10 минут, то сообщение будет отправлено на почту.

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.


Контроль
77 / 184

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

Примечание: данное действие доступно для Сделок и Лидов в бизнес-процессах в CRM.

Параметры действия

Текст сообщения - текст уведомления, отправляемого руководителю.

Отправить руководителю - выбирать ли непосредственного начальника ответственного менеджера, согласно структуре компании.

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


Задача
78 / 184

Действие позволяет создать задачу .

Описание Параметров

Настройка параметров действия аналогична созданию новой задачи в публичной части сайта .

Остановить процесс на время выполнения задачи - при отмеченной опции бизнес-процесс будет остановлен до тех пор, пока созданная задача не перейдет в статус Завершена.

Результаты выполнения действия

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

Доступно:

  • ID задачи;
  • Дата завершения задачи;
  • Пользователь, закрывший задачу.


Сообщение в живую ленту
79 / 184

Действие позволяет отправлять сообщения в Живую ленту указанному пользователю или группе пользователей.

Описание параметров

Автор - от чьего имени будет размещена запись в Живой ленте.

Внимание! Если вдруг в этом поле окажется несколько авторов, то автором записи будет тот, кто указан в поле первым.

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

Тема сообщения - с какой темой будет размещено сообщение.

Текст сообщения - содержание сообщения. Для сообщения поддерживается работа с BB-кодами.

Целевой сайт - в Живой ленте какого сайта публиковать данное сообщение.


Диск
80 / 184

В группе собраны действия для работы с объектами диска.


Детально об объекте Диска
81 / 184

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

Описание параметров

Исходный объект - файл или папка на диске, информацию о которых необходимо получить.

Папка или файл Диска - можно указать дополнительные данные для действия, например ID ранее созданной папки.

Результаты выполнения действия

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

Доступно:

  • Тип объекта;
  • Название;
  • Размер в байтах;
  • Размер (форматированное);
  • URL для просмотра;
  • URL для загрузки.


Загрузить в Диск
82 / 184

Действие загружает файл в хранилище Диска.

Описание параметров

Куда загрузить - куда именно нужно загрузить файл. Возможны следующие варианты:

  • Диск пользователя - в этом случае так же указывается и пользователь, в диск которого будет загружаться файл;
  • Диск группы соцсети - файл будет загружен в диск указанной группы;
  • Общий диск - файл будет загружаться в выбранный общий диск;
  • Папка диска - файл будет загружен в папку на Диске.

Файл для загрузки - необходимо указать сам загружаемый файл;

Загружать от имени - от чьего имени будет загружен файл на диск.

Результаты выполнения действия

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

Доступно:

  • ID файлов Диска;
  • URL для просмотра;
  • URL для загрузки.


Удалить объект Диска
83 / 184

Действие удаляет объект Диска.

Описание параметров

Исходный объект - файл или папка, которые должны быть удалены;

Папка или файл Диска - можно указать дополнительные данные для действия, например ID ранее созданной папки;

Удалять от имени - от чьего имени будет удален файл.


Копировать/Переместить в Диске
84 / 184

Действие позволяет копировать элементы или перемещать их в Диске.

Описание параметров

Исходный объект - файл или папка, которые будут скопированы;

Папка или файл Диска - можно указать дополнительные данные для действия, например ID созданной ранее папки;

Тип операции - какая операция будет производиться: Перемещение или Копирование.

Куда - куда будет произведено копирование/перемещение. Возможны следующие варианты:

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

Выполнять от имени - от чьего имени будет выполняться операция.

Результаты выполнения действия

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

Доступно:

  • ID объектов Диска;
  • URL для просмотра;
  • URL для загрузки.


Загрузить новую версию в Диск
85 / 184

Загружает новую версию документа на Диск.

Описание параметров

Файл Диска - файл на диске, который будет обновлен;

Файл для загрузки - новая версия обновляемого файла на диске;

Загружать от имени - от чьего имени будет произведено обновление.


Создать папку в Диске
86 / 184

Действие создает папку в Диске.

Описание параметров

Где создать - где будет создана папка. Возможны следующие варианты:

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

Название папки - как будет называться созданная папка;

Создатель папки - от чьего имени будет создана папка.

Результаты выполнения действия

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

Доступно:

  • ID папки Диска;
  • URL папки.


CRM
87 / 184
В группе собраны действия для работы с CRM.


Создание новой компании
88 / 184

Действие аналогично действиям в публичной части CRM по созданию новой компании.

Примечание: если при создании элемента появляются неописанные поля, то это заведенные на портале пользовательские поля .


Создание нового контакта
89 / 184

Действие аналогично действиям в публичной части CRM по созданию нового контакта .

Примечание: если при создании элемента появляются неописанные поля, то это заведенные на портале пользовательские поля


Реклама Яндекс
90 / 184

Добавляет email и телефонные номера в рекламный сегмент Яндекс.Аудитории.

Важно! Роботы рекламы не настраиваются через дизайнер бизнес-процессов. Они настраиваются отдельно в CRM в разделе Автоматизация .


Сменить ответственного
91 / 184

Действие позволяет сменить ответственного за сущность, на которой был запущен бизнес-процесс.

Параметры действия

Новый ответственный - указывается новый ответственный за сущность.


Создать на основании
92 / 184

Действие позволяет создать новую сделку на основании лида .

Параметры действия

Создать на основании - выбирается тип сущности, который будет создан на основании лида (пока что доступно только создание сделки).

Направление сделки - указывается направление создаваемой сделки.


Выбор данных crm
93 / 184

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

Параметры действия

ID сущности - уникальный идентификатор.

Тип сущности - для каких типов записей (Контакты, Лиды, Сделки, Компании) будет осуществляться выборка полей.

Выберите поля - укажите, какие из полей будут выбраны.

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


Задание
94 / 184

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

Параметры действия

Тема - название создаваемого дела.

Описание - подробная информация о содержании дела.

Ответственный - менеджер, отвечающий за создаваемое дело.

Важное дело - указать для дела повышенную важность. Важные дела в списке дел помечаются значком [image].

Автоматически завершать дело при переходе в другой статус - при выборе данной опции дело будет считаться завершенным, как только статус Лида/Сделки изменится.


Ожидание статуса лида
95 / 184

Действие приостанавливает выполнение бизнес-процесса, пока не будет достигнут указанный статус лида.

Описание параметров

ID лида - идентификатор лида.

Статус - укажите статус, по достижении которого процесс продолжит свое выполнение.


Отправить SMS
96 / 184

Действие позволяет отправить SMS клиенту.

Параметры действия

Текст сообщения - что будет отправлено клиенту.

Провайдер - с помощью какого провайдера нужно отправить сообщение. Провайдера необходимо установить через Маркетплейс.


Реклама Вконтакте
97 / 184

Добавляет e-mail и телефонные номера в рекламную аудиторию Вконтакте.

Важно! Роботы рекламы не настраиваются через дизайнер бизнес-процессов. Они настраиваются отдельно в CRM в разделе Автоматизация .


Реклама Google AdWords
98 / 184

Добавляет e-mail и телефонные номера в рекламную аудиторию Google AdWords.

Важно! Роботы рекламы не настраиваются через дизайнер бизнес-процессов. Они настраиваются отдельно в CRM в разделе Автоматизация .


Реклама Facebook
99 / 184

Добавляет e-mail и телефонные номера в рекламную аудиторию Facebook.

Важно! Роботы рекламы не настраиваются через дизайнер бизнес-процессов. Они настраиваются отдельно в CRM в разделе Автоматизация .


Отправить письмо
100 / 184

Действие позволяет отправить письмо клиенту.

Параметры действия

Тема - тема письма.

Текст письма - текст письма.


Запланировать звонок
101 / 184

Действие позволяет запланировать звонок клиенту.

Описание параметров

Тема - название события.

Дата начала - дата и время начала звонка.

Дата завершения - дата и время завершения звонка.

Описание - детальное описание назначения звонка.

Напомнить за - количество единиц времени, за которое будет выслано уведомление.

Интервал напоминания - выбор единиц времени.

Ответственный - сотрудник, ответственный за звонок клиенту.

Важное дело - указать высокую важность события.


Запланировать встречу
102 / 184

Действие позволяет запланировать встречу с клиентом.

Описание параметров

Тема встречи - название события.

Дата начала - дата и время начала встречи.

Дата завершения - дата и время завершения встречи.

Описание - детальное описание создаваемой встречи.

Место - место проведения встречи.

Напомнить за - количество единиц времени, за которое будет выслано уведомление.

Интервал напоминания - выбор единиц времени.

Ответственный - сотрудник, ответственный за встречу с клиентом.

Важное дело - указать высокую важность события.


Создание новой сделки
103 / 184

Действие аналогично действиям в публичной части CRM по созданию новой сделки .

Примечание: если при создании элемента появляются неописанные поля, то это заведенные на портале пользовательские поля .


Сменить статус
104 / 184

Действие позволяет сменить статус лида или сделки и немедленно прервать исполнение процесса.

Параметры действия

Изменить на статус - какой статус для записи нужно установить.


Создание нового лида
105 / 184

Действие аналогично действиям в публичной части CRM по созданию нового лида .

Примечание: если при создании элемента появляются неописанные поля, то это заведенные на портале пользовательские поля .


Запись события в crm
106 / 184

Действие позволяет создать запись события в CRM .

Действие выполняется только в контексте бизнес-процессов, работающих в CRM.


Ожидание стадии сделки
107 / 184

Действие приостанавливает выполнение бизнес-процесса пока не будет достигнута указанная стадия сделки.

Описание параметров

ID сделки - ID сделки. Для удобства можно использовать Форму вставки значения.

Стадия - нужно указать стадию, по достижении которой процесс продолжит свое выполнение.

Действие выполняется только в контексте бизнес-процессов, работающих в CRM.


Прочее
108 / 184

В группе собраны все остальные команды.


PHP код
109 / 184

Действие позволяет выполнить произвольный PHP код .

Внимание! Данное действие доступно только для коробочной версии «Битрикс24».

Описание Параметров

Смысл большинства полей ясен из их названия, поэтому их описание будет пропущено.

Примеры использования

Примечание: Код нужно указывать без открывающих и закрывающих тегов (<?, ?>).

Важно! Не рекомендуется использовать в теле кода выражения типа {=...}. Они могут содержать параметры, которые может изменить любой пользователь портала, даже не имеющий необходимых прав.
Например, вместо конструкции {=Variable:COMPANY_NAME} лучше использовать $root->GetVariable('COMPANY_NAME').

1. Установка значения переменной

$this->SetVariable('Variable1', 12345);

где:

Variable1 - идентификатор переменной, которой будет присвоено значение (число 12345).

2. Запись нескольких пользователей в переменную типа "Пользователь"

$this->SetVariable("user", array("user_1", "user_2"));

где:

array("user_1", "user_2") - массив пользователей в формате user_[идентификатор_пользователя_в_системе].

3. Использование php-кода и значений полей/переменных для получения названия элемента инфоблока

$arFilter = Array("IBLOCK_ID" => {=Variable:Variable1_printable}, "ID" => {=Document:PROPERTY_1});
$dc = CIBlockElement::GetList(array(), $arFilter, array("NAME"));
$br = $dc->Fetch();
$Pbrr = $br["NAME"];
$this -> SetVariable('Variable2', $Pbrr);

где:

{=Variable:Variable1_printable} - значение переменной, в которой содержится идентификатор инфоблока;
{=Document:PROPERTY_1} - поле документа, содержащее идентификатор элемента инфоблока;
Variable2 - идентификатор переменной, которой будет присвоено вычисленное название элемента инфоблока.

4. Преобразование формата поля документа и дальнейшее его использование

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

  1. В шаблоне бизнес процесса следует создать переменную для хранения преобразованного значения поля документа;
  2. Укажем в действии PHP-код приблизительно следующее:
    $rsUser = CUser::GetByID({=Document:PROPERTY_USER});
$arUser = $rsUser->Fetch();
$this->SetVariable('#Имя_переменной#', $arUser[NAME].' '.$arUser[SECOND_NAME].' '.$arUser[LAST_NAME]);
  3. После чего в блоке, используемом для уведомления, необходимо уже использовать вывод данной переменной вместо поля документа.

Документация по теме:

  • Произвольный PHP код в бизнес-процессе
  • Добавление информации в инфоблок из бизнес-процесса


Пауза в выполнении
110 / 184

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

Описание Параметров

Режим:

  • Промежуток - указывается промежуток времени, через который продолжится выполнение бизнес-процесса;
  • Время - указывается конкретное время возобновления бизнес-процесса.

Примечание: Если в режиме Время, на момент выполнения действия, указанная дата имеет место в прошлом (например был указан прошлый год, а действие начало выполняться в текущем), то будет произведен автоматический переход к следующему за "паузой в выполнении" действию. Другими словами процесс "перескочит" через него.


Блок действий
111 / 184

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

Обратите внимание на это действие. Оно позволяет существенно сэкономить трудозатраты на типовых блоках действий при создании шаблона бизнес-процесса. Однажды созданный и настроенный блок действий можно сохранить в группе Мои действия и многократно использовать.


Выбор сотрудника
112 / 184

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

Описание Параметров

Тип:

  • случайный - выбор обычного сотрудника случайным образом;
  • начальник - выбор начальника для указанного сотрудника.

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

Для пользователя - указывается пользователь, для которого будет выбран начальник.

Уровень начальника (чем больше, тем выше уровень) - выбирается уровень начальника для указанного пользователя.

Резервные пользователи - Указываются пользователи, которые будут выбраны в случае невозможности выбора из основных пользователей, указанных выше. Например, если указанная в поле Из пользователей группа не содержит сотрудников, то будет выбран кто-то из резервных пользователей.

Пропускать отсутствующих - позволяет автоматически пропускать отсутствующих сотрудников, например, если они в отпуске.

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

Подробнее про ситуацию с отсутствующим сотрудником/начальником

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

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

Если все начальники будут недоступны или у сотрудника нет начальника, то действие вернет пустое значение.

Результаты выполнения действия

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

Доступно:

  • Выбранный сотрудник.


Создание группы
113 / 184

Действие позволяет создать рабочую группу.

Описание параметров

Название группы - необходимо указать название создаваемой группы.

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

Участники группы - необходимо выбрать участников группы. Можно выбрать как отдельных пользователей, так отделы и членов другой рабочей группы.


WebHook
114 / 184

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

Параметры действия

Хендлер - URL, который нужно использовать при отправке данных из Битрикс24.


Запись в отчет
115 / 184

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

Описание Параметров

Загрузить отчет для доступа из бизнес-процесса - позволяет получить содержимое всего отчета в рамках бизнес-процесса для дальнейших действий (например, отправить по почте) используя форму Вставка значения (секция Дополнительные результаты). В противном случае данные отчета нельзя будет получить в рамках бизнес-процесса и просмотреть возможно будет только в логе.

Опцию Загрузить отчет для доступа из бизнес-процесса логично использовать на этапе завершения бизнес-процесса для формирования конечного отчета без лишних запросов к базе.

Результаты выполнения действия

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

Доступно:

  • Отчет.

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


Изменение переменных
116 / 184

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

Описание Параметров

В выпадающих списках выбираются переменные и устанавливаются для них необходимые значения.


Установка прав
117 / 184

Действие позволяет устанавливать права на доступ к документу.

Описание Параметров

Право на операцию "..." имеют - установка прав документа для указанных пользователей/групп пользователей.

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

Особенности назначения прав в системе
Если для документа используется упрощенная (старая) версия прав, то они устанавливаются жестко извне (настройки доступа к инфоблокам/спискам/и.т.д.). Единственный вариант, позволяющий устанавливать права прямо из бизнес-процесса - это установка для документа права бизнес-процессы извне (права на сам документ). В этом случае с помощью закладки Доступ или действия Установка прав можно менять права по ходу выполнения процесса.

Если используются расширенные права доступа, то из бизнес-процесса можно только добавлять новые права на документ, которые будут оставаться у документа даже после выполнения процесса. Переопределить права, которые были установлены извне, внутри бизнес-процесса нельзя.

Важно! С версии 15.5.0 Дизайнера бизнес-процессов данное действие исключено для модулей Диск и CRM.


Прерывание процесса
118 / 184

Действие позволяет прекратить выполнение бизнес-процесса.

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

Описание параметров:

Текст статуса - устанавливает текст статуса действия.


Мои действия
119 / 184

Мои действия позволяют сохранять настроенные действия/конструкции и использовать их повторно.

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

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

Документация по теме:

  • Создание собственных действий


Примеры работы с действиями
120 / 184
Давайте посмотрим примеры использования действий в бизнес-процессах.


Пример использования цикла для утверждения документа
121 / 184

Используем цикл для процесса утверждения документа

Рассмотрим такой пример: документ проходит процедуру утверждения до тех пор, пока начальство не исправит его и не одобрит. Если документ не утвержден, то запрашивается дополнительная информация и он вновь направляется на утверждение.

Пример упрощен, и описание касается только работы конструкции Цикл . В примере используем тип условия - Поле документа.

Порядок действий:

  • Первым делом добавим действие Изменение документа . C помощью ссылки Добавить поле создадим дополнительное поле типа список с названием Результат утверждения. Укажем 2 варианта значений поля с новой строки: на рассмотрении и утвержден. По значениям этого поля будет принято решение - выходить из цикла или нет.

    Теперь выберем созданное поле Результат утверждения и установим для него значение на рассмотрении .

  • Добавим действие Цикл. В параметрах укажем : тип условия - поле документа; условие - равно; значение - на рассмотрении.
  • В цикле добавим действие Утверждение документа :
    • В ветку Да добавляем действие Изменение документа. В параметрах поля Результат утверждения выбираем значение утвержден. Этим мы заставим процесс больше не входить в цикл.
    • После этого действия, если требуется, ставим дополнительные действия .
    • В ветку Нет добавляем действие Запрос дополнительной информации . Оно используется, например, для указания информации о правках старой версии документа или каких-либо замечаний, связанных с повторным рассмотрением документа.
    • Добавляем действие Изменение документа. В поле Результат утверждения выбираем значение на рассмотрении. Этим мы заставим процесс повторно войти в цикл. Также в этом действии мы обновим значения полей документа на значения, полученные из предыдущего действия, т.е. отправим на рассмотрение уже измененный документ.
    • При необходимости укажем в этой ветке дополнительные действия.
  • После конструкции Цикл установим действие, которое оповестит нас о том, что цикл завершил свою работу. В качестве оповещения выберем действие Установить текст статуса или Почтовое сообщение .

Итоговая схема шаблона бизнес-процесса с Циклом:


Пример работы с переменными и дополнительными результатами действий
122 / 184

Когда нужна дополнительная информация

Рассмотрим пример создания простого шаблона последовательного бизнес-процесса , в котором у пользователя запрашивается дополнительная информация, и затем она используется для записи в отчет и установку статуса документа.

Порядок действий:

  • Добавим действие Запрос дополнительной информации .
  • Перейдем к форме настройки параметров действия. Заполним обязательные поля и добавим новые с помощью cсылки Добавить поле:
    • Дата начала (тип Дата/Время);
    • Количество (тип Число);
    • Согласовано (тип Список).

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

  • Добавим действие Запись в отчет . Вызовем окно настроек действия и, используя форму Вставка значений, вставим в поле Текст наши переменные (группа Переменные) и комментарии (группа Дополнительные параметры).
  • Добавим действие Установить текст статуса и укажем текст .
  • Запустим бизнес-процесс на исполнение и введем требуемые данные .
  • Во вкладке Мои процессы отображается статус завершенного бизнес-процесса.
  • Перейдем к просмотру журнала исполнения процесса , там отображена запись, содержащая значения переменных.

Получили такой шаблон:


Пример использования действия "Выбор сотрудника"
123 / 184

Пример: начальник в отпуске

Рассмотрим небольшой пример использования действия Выбор сотрудника . Используем его для выбора начальника, который утверждает документ. Если начальник находится в отпуске, то выбирается вышестоящий начальник и так далее. Когда действие, таким образом, дойдет до генерального директора, или начальник не выбран вообще (в случае отсутствия всего начальства), то назначается заместитель начальника.

Порядок действий

  • Создадим новый шаблон, а в нем 2 переменные типа Пользователь:
    • переменная Начальник, которая меняется по ходу процесса;
    • переменная Заместитель, которая практически постоянна, и меняется вручную в случае ухода в отпуск заместителя. Укажем для нее сотрудника по умолчанию, который утвердит документ в случае отсутствия начальства.
  • Первым добавим действие Выбор сотрудника. В параметрах укажем , что производим выбор непосредственного начальника для Автора с пропуском отсутствующих.
  • Добавим действие Изменение переменной . В параметрах укажем , что значение переменной Начальник равно сотруднику, который был выбран действием Выбор сотрудника (форма Вставка значения - Дополнительные результаты - Выбор сотрудника - Выбранный сотрудник).
  • Добавим конструкцию Условие и создадим в ней 3 ветви. Нумерация условий в действии такая же, как и порядок их выполнения действием: слева направо.
    1. В первой ветке определим условие, при котором, в случае выбора генерального директора, ответственным назначается заместитель. Для этого в самом условии укажем генерального директора , а после добавим действие Изменение переменной. В нем укажем , что значение переменной Начальник равно значению переменной Заместитель.
    2. Во второй ветке определим условие, при котором заместитель утверждает документ, в случае отсутствия всего начальства. Для этого в самом условии укажем , что значение переменной Начальник должно быть пустым . Теперь добавим действие Изменение переменной, которое настраивается аналогично предыдущей ветке. После, например для заместителя, добавим уведомление о том, что все начальство отсутствует.
    3. В последней ветке условия мы не меняем сотрудников, в результате у нас значение переменной Начальник останется равно результату работы действия Выбор сотрудника.

В результате шаблон выглядит так:


Ручной переход по действиям процесса с помощью "Ознакомления с документом"
124 / 184
В ряде случаев полезно включить в шаблон ручной переход от задания к заданию (например, в целях обучения пользователей работе с созданным бизнес-процессом). С помощью действия Ознакомление с документом , создадим обязательный шаг переключения бизнес-процесса вручную к следующему исполнителю.

Как это выглядит в публичной части

В публичной части это будет выглядеть так:

Маленький минус использования этого действия в том, что ссылку Перейти к документу удалить нельзя.


Пример использования действия "Утверждение документа"
125 / 184

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

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

Порядок действий:

  • В данном шаблоне используем Цикл . Голосование повторится до тех пор, пока кто-либо из сотрудников не возьмет на себя работу.
  • Остановимся на настройках действия Утверждение документа подробнее :
    • В поле Утверждают сотрудники укажем тех сотрудников, которым высылается уведомление.
    • Тип утверждения - выберем Голосование сотрудников .
    • Более скольки процентов голосов необходимо для принятия решения - в данном поле укажем 0. Как только любой пользователь из указанных утвердит документ, а в нашем случае согласится взять на себя работу, то голосование прекратится.
    • Ожидать, чтобы проголосовали все указанные сотрудники - укажем Да, таким образом, цикл голосования повториться только после того, как все проголосуют.
  • После того, как сотрудник утвердил документ, ему поставлена Задача. Сотрудника, утвердившего документ, возможно указать используя Дополнительные результаты предыдущего действия с помощью формы Вставка значения.
  • Действие Изменение переменной используется только для того, чтобы контролировать выход из цикла.

Шаблон полученного процесса:


Распространенные ошибки при работе с бизнес-процессами
126 / 184

Постараемся не делать ошибок

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

На каждом физическом сервере в Битрикс24 одновременно работает несколько порталов. Аномальная нагрузка от одного из них негативно влияет на остальные. Одна из причин - бизнес-процессы . В связи с этим, рекомендуется проверить и скорректировать свои бизнес-процессы. При выявлении аномальной нагрузки создаваемой бизнес-процессами, портал блокируется согласно пункту 8.1 лицензионного соглашения .

Распространенные ошибки

Рассмотрим наиболее распространенные ошибки при проектирование бизнес-процессов, которые увеличивают нагрузку на портал:

  1. Изменения различных полей документа несколькими действиями — достаточно частая ошибка . Конечно, не запрещено изменять каждое поле документа отдельным действием, однако это значительно увеличивает количество выполняемых запросов при работе бизнес-процесса. Рекомендуется изменять все необходимые поля документа в рамках одного действия .

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

    В некоторых случаях лучше предусмотреть отдельное условие прекращения выполнения циклов. Оно обеспечит выход из него, даже если основное условие по каким-либо причинам не было выполнено за разумное время/циклы. Например условие: бизнес-процесс прекращается после того как время обработки лида становится больше 1000 минут, несмотря на то, что статус лида еще не изменился на нужный. Это позволяет останавливать бизнес-процесс, если он не был обработан в рамках разумного времени (например, по причине увольнения ответственного).

  3. Использование проверки статуса в цикле с паузой — бывает, что вместо действия Ожидание стадии сделки используется цикл с паузой . В этом случае при запуске процесса на создание документа, накапливается большое число запущенных экземпляров шаблона бизнес-процесса, для разных документов. При постоянном частом подъеме из паузы они создают нагрузку и в определенный момент могут привести к неработоспособности проекта. Правильнее в данном случае использовать действие Ожидание стадии сделки . В этом случае бизнес-процесс проснется только во время смены статуса документа на нужный и не будет создавать нагрузку все остальное время.

  4. Некорректное использование пауз и заданий — ошибка случается часто для бизнес-процессов, которые запускаются при изменении документа .

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

  5. Ошибки при работе с Параллельным ожидания действия – очень часто возникают сложности при работе с этой конструкцией . При ее использовании процесс выполняется по той ветке, которая следует за первой выполненной Командой . Но если ни одна из команд не выполнена, то и процесс зависнет и исполняться дальше не будет. Чтобы такого не происходило, всегда стоит добавлять ветку, содержащую Паузу в выполнении . Таким образом, бизнес-процесс продолжит свое исполнение по истечению указанного в нем времени, даже если ни одна из команд не будет выполнена.

    6. © «Битрикс», 2001-2008, «1C-Битрикс», 2008-2020 1С-Битрикс


Каталог примеров
127 / 184

В главе приведены примеры использования бизнес-процессов.

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

Внимание! Обязательно производите сверку и настройку под себя импортируемых шаблонов бизнес-процессов.


Список шаблонов для импорта
128 / 184

В данном уроке для удобства собраны все шаблоны, присутствующие в курсе и доступные для импорта на портал. В других примерах из главы содержатся описания шаблонов бизнес-процессов, которые можно создать самостоятельно по присутствующим в уроках инструкциях. Список имеющихся на данный момент шаблонов:

  • Шаблон бизнес-процесса для обслуживания заявок клиентов. Сложный бизнес-процесс, регламентирующий работу нескольких сотрудников компании и поставщиков по обработке входящего лида.
    Прочитать урок / Скачать шаблон

  • Шаблон бизнес-процесса со статусами по созданию счета для клиента в CRM. Бизнес-процесс включает в работу многих сотрудников компании по формированию счета клиента. Пример включает в себя также настройку полей в CRM и работу с пользовательскими полями.
    Прочитать урок / Скачать шаблон

  • Шаблон бизнес-процесса для последовательного создания задач. Задачи должны создаваться одна за другой, при том что каждая последующая задача должна создаваться только после того, как предыдущий пользователь закончит выполнение своей задачи. Бизнес-процесс включает работу с действием PHP код.
    Прочитать урок / Скачать шаблон

  • Шаблон измененного бизнес-процесса Выдача наличных. Измененный процесс отличается от типового тем, что пользователю нужно обязательно указать назначение выдаваемых денег. В зависимости от выбранного назначения уже определяется сотрудник, отвечающий за выдачу.
    Прочитать урок / Скачать шаблон

  • Шаблон измененного бизнес-процесса Заявление на отпуск. Усложнение заключается в том, что в процесс добавляются 2 периода, во время которых сотрудникам нельзя уходить в отпуск. Если выбранный период пересекается с запрещенным, то процесс автоматически отклоняет заявку.
    Прочитать урок / Скачать шаблон

  • Шаблон измененного бизнес-процесса Исходящие документы. В типовой бизнес-процесс добавляется цикл проверки и утверждения исходящего документа.
    Прочитать урок / Скачать шаблон

  • Шаблон бизнес-процесса для подачи заявки на отпуск. В отличии от типового процесса, работа данного базируется на Универсальных списках.
    Прочитать урок / Скачать шаблон

    • © «Битрикс», 2001-2008, «1C-Битрикс», 2008-2020 1С-Битрикс


Пример использования бизнес-процессов и списков
129 / 184

В данном уроке будет рассмотрен пример создания сервиса сбора и размещения заявок на закупку согласно ТЗ на портале.

ТЗ по размещению заявок на закупку на портале
  1. Общие требования к функционалу
    1. Требуется создать область для размещения, обработки и хранения заявок на закупку. Заявка на закупку представляет собой карточку, состоящую из набора именованных полей определенного типа. Заявка на закупку также может содержать неограниченное количество файлов (а может и не содержать ни одного).
    2. Любой пользователь (входящий в определенную группу доступа) может создать заявку на закупку. Данный пользователь в дальнейшем рассматривается как автор заявки.
    3. В дальнейшем, никакой программной обработки заявок не производится.
  2. Требования к работе с данными
    1. Заявка состоит из следующих полей (символом ‘*’ отмечены поля, обязательные к заполнению):
      1. Тип закупки* (выбор из списка: «менее 100.000 руб», «100.000 руб и более»)
      2. Предмет закупки* (строка)
      3. Стоимость, руб (целое число)
      4. Обоснование* (многострочное поле)
      5. Выбранный поставщик* (строка)
      6. Потенциальные поставщики* (многострочное поле)
      7. Статус закупки* (выбор из списка: «на согласовании», «одобрена», «отклонена»).
      8. Инициатор* (автор заявки)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
      9. Непосредственный руководитель* (выбор из списка пользователей)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
      10. Бюджетный контролер* (выбор из списка пользователей)
        Желательно, чтобы выбор производился из ограниченного списка пользователей
      11. Юрист* (выбор из списка пользователей)
        Желательно, чтобы выбор производился из ограниченного списка пользователей
      12. Главный бухгалтер* (выбор из списка пользователей)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
      13. Финансовый директор* (выбор из списка пользователей)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
    2. Пользователи должны иметь возможность редактировать свои (и, в отдельных случаях, чужие) заявки. При этом в системе должны сохраняться: дата и время создания, дата и время изменения, автор и автор последнего изменения.
    3. Любой пользователь (п 1.2) должен иметь доступ к списку заявок, автором которых он является. Доступ к списку заявок, созданных другими пользователями, должен быть предоставлен только пользователям – членам определенной группы (как на чтение, так и на редактирование). Допускается разделение доступа на уровне интерфейса
    4. Область просмотра заявок должна представлять собой таблицу. Колонки таблицы соответствуют полям заявки.
      1. В рамках области просмотра должны быть представлены следующие поля (в указанном порядке)
        • Дата создания
        • Тип закупки
        • Предмет закупки
        • Стоимость, руб
        • Инициатор
        • Выбранный поставщик
      2. В таблице должна быть представлена группировка/сортировка по статусу закупки.
      3. Интерфейс должен предоставлять фильтрацию по значению полей заявок (как минимум: выбор значения фильтра из списка возможных значений), по любому полю, если его тип отличен от «многострочный текст».
      4. Дополнительные требования (желательно). Пользователь с правами конфигуратора системы должен иметь возможность (не прибегая к средствами разработки PHP):
        • Создавать другие представления данных, подходящие под описание п. 2.4, с произвольным набором полей, сортировок, группировок, фильтров.
        • Проводить массовые операции с заявками (например – удаление всех заявок, отвечающих критериям определенного фильтра).
        • Создавать новые типы закупки и настраивать доступность полей в зависимости от типа.
        • Редактировать состав полей заявки.
  3. Прочие требования
    1. Необходимо предусмотреть функционал оповещений – пользователи, входящие в определенную группу, должны получать оповещения внесении любых изменений в какую-либо заявку. Оповещение должно содержать значения всех полей заявки.
    2. В качестве групп пользователей, упомянутых в данных требованиях, должна быть возможность использовать ранее созданные группы портала (которые используются для предоставления доступа к другим ресурсам).

Согласно условиям ТЗ наиболее подходящим под задачу функционалом будут штатные списки.

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


Подготовка списка и его настройка
130 / 184

Подготовка списка и его настройка

  • Создадим новый список с поддержкой бизнес-процессов:

    и произведем настройку подписей.

    В данном примере мы не будем использовать разделы, поэтому их не переименовываем.

  • Добавим требуемые поля согласно ТЗ (Настройки списка > Поля списка > Добавить поле). Не забудем отметить нужные поля, как обязательные к заполнению.

    Пример настройки поля типа список:

    В обязательных полях, которые будут заполняться автоматически, установим в поле Значение по умолчанию текст-пояснение:

    Примечание: Такими полями будут Инициатор, Непосредственный руководитель, Главный бухгалтер, Финансовый директор.

    Пример настройки поля с автоматическим значением по умолчанию, равному дате и времени создания заявки:

    ТЗ не требует выбора пользователей системы, поэтому укажем требуемых сотрудников текстом с использованием поля типа список:

    Примечание: Такими полями будут Бюджетный контролер, Юрист.

    В результате создания полей, согласно ТЗ, получится следующее:

Теперь форма создания новой заявки будет иметь следующий вид:


Настройка внешнего вида и доступа для списка
131 / 184

Настройка внешнего вида списка и фильтра

  • Настроим внешний вид списка согласно ТЗ:

  • Настроим фильтр:

Настройка прав доступа к списку

Перейдем опять к настройке списка на закладку Доступ и укажем права доступа следующим образом:

  • чтобы только сотрудники требуемой группы смогли добавлять заявки

    Bitrix24: Все сотрудники отдела с подотделами - Добавление

  • право на просмотр и изменение своих заявок будет у автора (причем в этом случае разные авторы смогут видеть и редактировать только свои заявки)

    Автор - Изменение

  • читать и изменять любые заявки сможет сотрудник, ответственный за сервис

    Ответственный сотрудник - Изменение

В результате получим следующее:


Создание бизнес-процессов
132 / 184

Для работы с заявками мы создадим 2 шаблона последовательных бизнес процессов. Один будет запускаться при создании заявки, а второй - при ее изменении.

БП для создания заявки на закупку

Произведем настройку параметров шаблона:

  • на вкладке Основное укажем название и отметим опцию автоматически запускать при добавлении:

  • На вкладке Переменные создадим новые обязательные переменные типа Привязка к сотруднику, в которых явно зададим 3 неизменных на момент создания заявки сотрудников: Главный бухгалтер, Финансовый директор, Проверяющий (сотрудник ответственный за сервис заявок).

    Эти сотрудники в ходе процесса будут автоматически подставляться в карточку заявок.

    Внимание! В случае ухода в отпуск или смены сотрудника необходимо будет произвести в этих полях соответствующие изменения.

    Примечание: Вынесение сотрудников в переменные позволит централизованно произвести их замену сразу по всему шаблону.

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

В результате получим следующее:

Перейдем к непосредственному созданию шаблона бизнес-процесса:

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

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

    • Для полей Главный бухгалтер и Финансовый директор с помощью формы Вставка значения укажем соответствующие им переменные.

    В результате получим следующее:

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

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

В итоге получим следующую схему шаблона бизнес-процесса:

БП для изменения заявки на закупку

Произведем настройку параметров шаблона:

  • На вкладке Основное укажем название и отметим опцию автоматически запускать при изменении:

  • На вкладке Переменные создадим новую обязательную переменную типа Привязка к сотруднику, в которой явно зададим Проверяющего (сотрудника ответственного за сервис заявок).

Перейдем к непосредственному созданию шаблона бизнес-процесса:

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

  • Добавим конструкцию Условие и создадим 3 условия: Одобрена, На согласовании, Отклонена. Это позволит отправлять автору разные сообщения о статусе его заявки.
  • Настроим условие Одобрена. Для этого в поле Поле документа укажем, что условие будет выполняться, если статус закупки будет равен одобрена.

  • Аналогичным образом настроим условия для оставшихся вариантов статуса закупки.

    • Добавим действие Сообщение соц.сети в ветки условий Одобрена и Отклонена. Тем самом мы будем оповещать автора о том, что заявка на закупку после ее изменения перешла в эти статусы.

  • Произведем настройку действия Сообщение соц.сети для ветки условия Одобрена:

  • Аналогичным образом произведем настройку действия и для ветки условия Отклонена, изменив лишь часть текста сообщения.

В итоге получим следующую схему шаблона бизнес-процесса:


Пример бизнес-процесса со статусами по созданию счета для клиента в CRM
133 / 184

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

ТЗ по созданию счета для клиента на портале

  1. Менеджер по продажам начинает бизнес-процесс и заполняет поля:

    • Название сделки,
    • Менеджер по продажам,
    • Менеджер по закупкам,
    • Клиент (название),
    • Сумма сделки,
    • Адрес доставки.

  2. Менеджер по закупкам продолжает процесс и заполняет поля:

    • Поставщик (название),
    • Поставщик (контактное лицо),
    • Сумма закупки,
    • Срок поставки от поставщика,
    • Вес отправления,
    • Объем отправления,
    • Адрес отгрузки,
    • Счет от поставщика, опционально (номер и вложение),
    • Договор от поставщика, опционально (номер и вложение).
  3. Менеджер по продажам изучает ответ от менеджера по закупкам.

    Выставление срока поставки для клиента. Сверяются сроки поставки, если срок поставки до клиента равен или > срок поставки до поставщика +5 дней, процесс продолжается, иначе открывается поле комментирования сроков поставки, комментарии обязателен. Заполняются следующие поля:

    • Срок поставки до клиента.

  4. Юрист изучает договор вложенный менеджером по закупке (в случае его наличия) и создает договор для клиента. Заполняются следующие поля:

    • Договор для клиента (номер и вложение),
    • Договор от поставщика, опционально (номер и вложение).

  5. Процесс переходит менеджеру по продажам, согласование договора. Заполняются следующие поля:

    • Договор для клиента (номер и вложение).

  6. Процесс переходит менеджеру по закупкам, согласование договора. Заполняются следующие поля:

    • Договор для клиента (номер и вложение).

  7. Процесс переходит в бухгалтерию — создание и прикрепление счета для клиента. Заполняются следующие поля:

    • Счет для клиента (номер и вложение).
  8. Процесс переходит помощнику руководителя, который должен иметь возможность получить для печати всех документов сделки.

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

    • Счет для клиента (номер и вложение),
    • Договор для клиента (номер и вложение).

Примечание: Данный пример подразумевает, что составитель бизнес-процесса знаком с CRM и бизнес-процессами со статусами.

Шаблон для ознакомления: Скачать


Настройки CRM
134 / 184

Прежде всего, необходимо произвести настройки в самой CRM. Они будут состоять из нескольких этапов:

  • Создание и настройка пользовательских полей
  • Настройка прав доступа
  • Настройка формы создания сделки
    •

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

    В качестве основы будем использовать такую сущность CRM, как Сделка. Поэтому первым делом мы создадим и настроим пользовательские поля для карточки сделки согласно ТЗ (CRM > Настройки > Пользовательские поля > Сделка > Список полей).

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

    В итоге в форме будет всего 2 поля, которые требуют обязательного заполнения: Название (обязательно к заполнению всегда) и Адрес доставки. Остальные поля буду заполнены автоматически, а также посредством выполнения заданий разными участниками процесса.

    Настройка прав доступа

    Укажем пользователей/группы пользователей, которые будут иметь доступ к бизнес-процессам (менеджеры, юрист, бухгалтер и остальные, согласно ТЗ) на странице Права доступа (CRM > Настройки > Права)

    В нашем примере это будет группа Моя компания: Сотрудники, это позволит в дальнейшем, при создании шаблона бизнес-процесса, выбирать в нем любого сотрудника.

    Внимание! В описании далее и самом шаблоне-примере для всех участвующих в процессе сотрудников задан по умолчанию сотрудник с идентификатором 1. Это позволит сразу ознакомиться со всем процессом, не создавая и не настраивая других пользователей.

    Настройка формы создания сделки

    Перейдем к форме создания новой сделки (CRM > Сделки > Список сделок) и произведем ее настройку согласно ТЗ:

    В итоге должны получить следующий вид:


Создание бизнес-процесса
135 / 184

Создание бизнес-процесса тоже будет состоять из нескольких этапов:

  • Начальные настройки
  • Статусы шаблона
    •

    Создадим новый шаблон бизнес-процесса со статусами для сделки на странице CRM – Настройки - Бизнес-процессы.

    После чего перейдем к настройке его параметров.

    Начальные настройки

    • Укажем в параметрах шаблона, что процесс будет автоматически запускаться при добавлении новой сделки.
    • Создадим новые переменные типа Привязка к пользователю:
      • Менеджер по продажам (*),
      • Менеджер по закупкам (*),
      • Юрист (*),
      • Бухгалтер (*),
      • Логист (*),
      • Помощник руководителя (*).

      Для всех них по умолчанию укажем требуемых сотрудников (в нашем случае это пользователь с идентификатором 1).

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

    • Создадим переменную Адрес портала (*) типа Строка и укажем для нее значение по умолчанию, равное адресу портала.

      Например: http://myportal.com.

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

    В результате список переменных должен будет выглядеть следующим образом:

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

    Кроме этого будет использоваться переменная Флаг "Поля Пусты", про которую будет написано ниже.

    Статусы шаблона

    Начальный статус

    Подпроцесс первого статуса начинается с Блока действий.

    Он используется для группировки однотипных действий, которые будут проверять, указаны ли требуемые сотрудники в форме Сделка, а также будут автоматически записывать в пустые поля пользователей из переменных Менеджер по продажам (*), и.т.д. Это позволит автоматизировать заполнение формы, позволяя каждый раз не указывать всех необходимых сотрудников, которые, в большинстве случаем одни и те же.

    Проверка полей состоит в непосредственной проверке поля на то, что оно пустое, и дальнейшей записи в это поле сотрудника из переменной, которая была задана в начале создания шаблона бизнес-процесса (Менеджер по продажам (*), и.т.д.).

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

    Этап 1 - Менеджер по продажам

    Этап начинается с действий по проверке заполнения требуемых от менеджера по продажам полей. Если поле окажется пустым, то будет изменено значение специальной переменная Флаг "Поля пусты" на Да (в Параметрах шаблона по умолчанию значение этой переменной задается как Нет).

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

    Если же поля окажутся заполнены, то значение переменной Флаг "Поля пусты" будет сброшено на Нет и процесс перейдет на следующий этап.

    Этап 2 - Менеджер по закупкам

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

    Также менеджер по продажам будет уведомлен через "Веб-Мессенджер" о том, что менеджер по закупкам заполнил требуемые поля. В сообщении будут указаны значения этих полей и ссылки на Поставщика и приложенные файлы.

    Рассмотрим эти ссылки поподробнее:

    • Для автоматического формирования ссылки на карточку просмотра сделки будет использоваться следующее выражение

      [url]{=Variable:domain_printable}/crm/deal/show/{=Document:ID}/[/url]

      где {=Variable:domain_printable} будет являться значением переменной Адрес портала (*), которая была ранее задана при создании шаблона бизнес-процесса, а {=Document:ID} - Идентификатор сделки, который входит в стандартный набор полей сделки.

    • Для автоматического формирования ссылки на карточку просмотра поставщика будет использоваться следующее выражение

      [url]{=Variable:domain_printable}/crm/company/show/{=Document:UF_CRM_1369312906}/[/url]

      где {=Document:UF_CRM_1369312906} будет являться значением поля Поставщик (название).

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

      [url]{=Variable:domain_printable}/bitrix/components/bitrix/crm.deal.show/show_file.php?ownerId={=Document:ID}&fieldName=UF_CRM_1369315496&fileId={=Document:UF_CRM_1369315496}/[/url]

      где {=Document:UF_CRM_1369315496} будет являться значением поля Счет от поставщика (файл). Также идентификатор этого поля используется для параметра &fieldName=UF_CRM_1369315496 ссылки.

    Этап 3 - Менеджер по продажам

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

    Этап 3а - Комментарий относительно сроков доставки

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

    Проверка осуществляется следующим образом: если значение поля документа Срок поставки до клиента не меньше чем вычисленное выражение =Dateadd({=Document:UF_CRM_1369314998}, "5d") (где {=Document:UF_CRM_1369314998} - поле сделки Срок поставки от поставщика), то никаких действий выполняться не будет. Во всех остальных случаях менеджеру по продажам будет выставлено задание.

    Этап 4 - Этап 8

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


Пример работы с бизнес-процессами
136 / 184

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

Рассмотрим работу с бизнес-процессами на примере создания новости контент-менеджером и утверждение ее администратором информационного портала.

Действия для пользователей группы "Администраторы"

  • Включить в группу Контент-менеджеры желаемых пользователей;
  • Настроить инфоблок Новости на работу с бизнес процессами;
  • Настроить права доступа для группы Контент-менеджеры. В нашем случае необходимо выбрать право Изменение , чтобы менеджеры могли создавать и редактировать элементы инфоблока (новости);
  • На закладке Шаблоны бизнес-процессов настроить автозапуск бизнес-процесса Простое утверждение/голосование на Создание и Изменение;
  • Настроить форму создания/изменения элемента инфоблока , если требуется, чтобы в публичной части сайта контент-менеджер смог указать параметры запуска бизнес-процесса.

Действия для пользователей группы "Контент-менеджеры"

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

Действия для пользователей группы "Администраторы информационного портала"

Для публикации новости, созданной контент-менеджером, воспользуемся ссылкой Перейти к списку заданий в центре уведомлений или перейдем на страницу Задания (Сервисы > Бизнес-процессы > Задания).

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

Дополнительная информация

Пример создания бизнес-процесса (курс Администратор сервиса Битрикс24 (коробочная версия))


Пример создания бизнес-процесса
137 / 184

Рассмотрим процедуру создания БП на примере алгоритма согласования подотчетных денег. С использованием компонента Бизнес-процесс. Создание БП с использованием других механизмов будет частично выглядеть иначе. Пусть в нашей условной организации согласование подотчетных денег осуществляется следующим образом:

  1. Составляется заявка на выдачу подотчетных денег;
  2. Заявка согласуется с руководителем (или несколькими руководителями). Пусть согласование производится по очереди с двумя заранее известными руководителями;
  3. Оформление заявки в бухгалтерии;
  4. Выдача денег;
  5. Предоставление отчета;
  6. Проверка отчета в бухгалтерии.

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


Создание нового бизнес-процесса
138 / 184

Для создания нового БП нажмите на кнопку Новый бизнес-процесс на странице Бизнес-процессы > Процессы в ленте:

И заполните форму создания нового БП:

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

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

  • Подотчетное лицо: идентификатор – TargetUser, тип – Привязка к сотруднику.

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

  • Сумма: идентификатор – Summ, тип – Число, обязательный.
  • Цель: идентификатор – Purpose, тип – Список, обязательный, заполнить поле Варианты значений (закупка материалов, представительские расходы и так далее).
  • Описание: идентификатор – Purpose_text, тип – Текст.

В итоге имеем:

Зададим на закладке Доступ права на доступ к БП (Для выбора групп пользователей можно воспользоваться кнопкой [image] рядом с полем ввода):

  • любой сотрудник может запустить экземпляр БП (т.е. подать заявление на подотчетные деньги), а так же может видеть свои заявки (группа Автор);
  • администраторы могут видеть все экземпляры БП и могут управлять ими (группа Администраторы);
  • руководство может видеть все экземпляры БП (группа Руководство).

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


Создание шаблона бизнес-процесса. Часть1.
139 / 184

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

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

  • Сохраните в документе входящие параметры БП: сумму, цель и описание назначения подотчетных денег. Это необходимо для того, чтобы иметь возможность посмотреть и обработать эти параметры даже после завершения БП.

    Для сохранения параметров разместите в шаблоне БП действие Изменение документа (раздел Обработка документа). Это действие позволяет сохранить любую информацию в полях документа таким образом, что к ней всегда можно будет обратиться. Кроме того, это действие позволяет создавать для документа дополнительные поля.

  • Настройте параметры действия (кнопка [image] в правом верхнем углу действия):
    • Измените название документа, которое выводится в списке документов. Допустим необходимо, чтобы документ назывался по шаблону: Подотчетное лицо, цель, сумма подотчетных денег. (Например: Иван Иванов, закупка оборудования, 3800).

      Для этого в окне настройки параметров действия выберите в выпадающем списке поле Название элемента и в качестве значения укажем строку {=Template:TargetUser_printable}, {=Template:Purpose}, {=Template:Summ}. Значения в фигурных скобках - это ссылки на значения входящих параметров БП. Они имеют вид {=Template:КодВходящегоПараметра}.

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

      Примечание: Обратите внимание, что для входящих параметров, содержащих коды пользователей, их реальные значения можно получить строкой {=Template:КодПараметра} (например, user_1), а их печатные значения - строкой {=Template:КодПараметра_printable} (например, Иван Иванов [1]).

    • Сохраните сразу в документ все входящие параметры БП. Для этого добавьте новое поле (ссылка Добавить условие). Выберите Текст для предпросмотра и в качестве значения укажите ссылку на входящий параметр БП Описание, т.е. строку {=Template:Purpose_text}. Для вставки этой строки нажмите на кнопку [image] рядом с полем ввода и в открывшемся диалоге на закладке Параметры шаблона выберите Описание.
    • Для сохранения параметра Сумма создайте новое поле (так как стандартного поля нет). Используйте ссылку Добавить поле и введите параметры нового поля. Задайте в качестве значения поля Сумма ссылку на входящий параметр БП Сумма, т.е. строку {=Template:Summ}.

  • Сохраните параметры действия Изменение документа.
  • Нажмите на кнопку Применить редактора БП. Теперь в случае возникновения каких-либо проблем не придется начинать конструировать БП с самого начала.

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

  • Установите статус с помощью действия Установить текст статуса из раздела Уведомления.

  • Откройте диалог настройки параметров действия Установить текст статуса и укажите в качестве текста статуса значение Согласование.


Создание шаблона бизнес-процесса. Часть 2.
140 / 184

Далее согласно алгоритму БП необходимо последовательно согласовать документ у двух руководителей.

  • Для организации согласования перенесите действие Утверждение документа (раздел Обработка документа) под действие Установить текст статуса.
  • Откройте диалог настройки параметров действия и заполните необходимые поля:
    • в поле Заголовок запишете значение: Утверждение начальником отдела;
    • в поле Утверждают сотрудники выберите с помощью кнопки [image] пользователя или группу пользователей, которые первыми утверждают документ (например, группы Администраторы и Руководство);
    • в поле Тип утверждения выберите значение Любой сотрудник (любой сотрудник из указанных может утвердить документ);
    • в поле Название задания введите строку Согласование подотчетных денег для {=Template:TargetUser_printable}, {=Template:Purpose} (значения в фигурных скобках могут быть выбраны с помощью кнопки [image]);
    • в поле Описание задания введите текст:
      Необходимо согласовать подотчетные деньги
Сотрудник: {=Template:TargetUser_printable}
Сумма: {=Template:Summ}
Цель: {=Template:Purpose}
Описание:
{=Template:Purpose_text};
    • в поле Устанавливать текст статуса - значение Да;
    • в поле Текст статуса измените значение на: этап 1;
    • в поле Период утверждения введите значение 5 и выберите в выпадающем списке значение дней (в этом случае если в течение 5 дней документ не будет согласован, то он будет автоматически отвергнут).

  • Сохраните внесенные изменения.

В момент обработки реальной заявки, когда конкретный экземпляр БП дойдет до шага Утверждение начальником отдела, будет сделано следующее:

  • пользователям, указанным в действии Утверждение начальником отдела, будет выставлено задание утвердить или отклонить заявку;
  • данный экземпляр БП будет поставлен в ожидание (приостановлен), пока кто-либо из указанных пользователей не выполнит задание (утвердит или отклонит заявку);
  • после выполнения задания исполнение экземпляра БП будет продолжено в соответствии с алгоритмом БП.

В случае, если первый этап согласования не будет пройден (т.е. документ будет отвергнут), выполнение БП пойдет по ветке, обозначенной словом Нет.

  • Разместите в этой ветке действие Сообщение соц.сети с сообщением для подотчетного лица об отклонении.
    • При заполнении поля Отправитель сообщения нажмите на кнопку [image] рядом с полем ввода и на закладке Дополнительные результаты открывшегося диалогового окна выберем подпункт Последний голосовавший пункта Утверждение начальником отдела. Таким образом сообщение будет отправлено от имени того пользователя, который отклонил согласование подотчетных денег.
    • В качестве получателя сообщения укажите подотчетное лицо, т.е. значение {=Template:TargetUser}.

  • Установите в этой ветке текущий статус БП с помощью действия Установить текст статуса в значение Отклонено.

  • Нажмите на кнопку Применить редактора БП. Теперь в случае возникновения каких-либо проблем нам не придется начинать конструировать БП с самого начала.

Если первый этап согласования будет успешно пройден, выполнение БП пойдет по ветке, обозначенной словом Да.

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

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


Создание шаблона бизнес-процесса. Часть 3.
141 / 184

Обработка заявки в бухгалтерии.

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

Далее согласно алгоритму нашего БП необходимо оформить заявку в бухгалтерии.

  • Добавьте действие Ознакомление с документом из раздела Задания.
  • Откройте свойства действия Ознакомление с документом и заполните необходимые поля:
    • в поле Заголовок запишите значение Оформление в бухгалтерии;
    • в поле Ознакомить пользователей выберите с помощью кнопки [image] пользователя или группу пользователей, которые являются бухгалтерами (например, группы Администраторы и Бухгалтерия);
    • в поле Название задания введите строку: Оформление подотчетных денег для {=Template:TargetUser_printable}, {=Template:Purpose};
    • в поле Описание задания введите текст:
      Необходимо оформить согласованные подотчетные деньги

Сотрудник: {=Template:TargetUser_printable}
Сумма: {=Template:Summ}
Цель: {=Template:Purpose}

Описание:
{=Template:Purpose_text}
    • в поле Должны ознакомится выберите значение Любой сотрудник;
    • в поле Устанавливать текст статуса выберите значение Нет;
    • в поле Текст кнопки в задании введите значение Подотчетные деньги оформлены;
    • в поле Период утверждения значение оставьте незаполненным (т.е. БП будет дожидаться ознакомления бесконечно долго).
  • Установите текущий статус БП в значение Деньги даны в подотчет (действие Установить текст статуса).
  • Нажмите на кнопку Применить редактора БП. Теперь в случае возникновения каких-либо проблем нам не придется начинать конструировать БП с самого начала.

Далее, согласно алгоритму нашего БП, необходимо запросить отчет у подотчетного лица.

  • Используйте действие Запрос дополнительной информации (раздел Обработка документа).
  • Откройте параметры действия и заполните необходимые поля:
    • в поле Заголовок запишите значение Отчет подотчетного лица;
    • в поле Заполняют сотрудники выберите с помощью кнопки [image] подотчетное лицо из входящих параметров БП ({=Template:TargetUser});
    • в поле Название задания введите строку Отчет по подотчетным деньгам, {=Template:Purpose};
    • в поле Описание задания введите текст:
      Необходимо отчитаться по подотчетным деньгам
Сумма: {=Template:Summ}
Цель: {=Template:Purpose}
Описание:
{=Template:Purpose_text}.
    • Затем с помощью ссылки Добавить поле.. необходимо добавить поле, в которое подотчетное лицо введет отчет об использовании денег.

  • Сохраните внесенные изменения.

Следующим шагом сохраним отчет подотчетного лица в документе.

  • Воспользуйтесь действием Изменение документа.
  • В окне настройки параметров действия выберите в выпадающем списке поле Текст для просмотра и в качестве значения укажите строку {=Variable:report}. Значение в фигурных скобках - это ссылка на переменную БП, которая устанавливается действием Отчет подотчетного лица.
  • Сохраните внесенные изменения.
  • Установите текущий статус БП в значение Отчет (действие Установить текст статуса).

Далее обеспечим возможность бухгалтерии ознакомиться с отчетом подотчетного лица.

  • Добавьте действие Ознакомление с документом.
  • Откройте свойства действия Ознакомление с документом и заполните необходимые поля:
    • в поле Заголовок запишем значение Оформление в бухгалтерии;
    • в поле Ознакомить пользователей выберем с помощью кнопки [image] пользователя или группу пользователей, которые являются бухгалтерами (например, группы Администраторы и Бухгалтерия);
    • в поле Название задания введем строку Отчет подотчетного лица {=Template:TargetUser_printable}, {=Template:Purpose};
    • в поле Описание задания введем текст:
      "Отчет по подотчетным деньгам

Сотрудник: {=Template:TargetUser_printable}
Сумма: {=Template:Summ}
Цель: {=Template:Purpose}

Описание:
{=Template:Purpose_text}

Отчет:
{=Document:DETAIL_TEXT}";
    • в поле Должны ознакомиться выберем значение Любой сотрудник;
    • в поле Устанавливать текст статуса выберем значение Нет;
    • в поле Текст кнопки в задании введем значение Оформлено;
    • в поле Период утверждения значение оставим незаполненным.
  • Установите текущий статус БП в значение Завершено.

Получили готовый шаблон БП


Проверка работы
142 / 184

При создании элемента бизнес-процесса нам нужно будет настроить его параметры.

Обратите внимание, что параметр Подотчетное лицо не показывается. Параметр с кодом TargetUser устанавливается автоматически в значение, равное коду текущего пользователя.

После заполнения параметров и отправки формы будет запущен новый экземпляр БП (документ).

Примечание: Если по этому новому экземпляру БП для сотрудника, создавшего БП, сразу есть задание (т.е. он является одним из тех, кто осуществляет согласование на первом этапе), то он будет автоматически переправлен на страницу этого задания.

Далее экземпляр БП будет выполняться в соответствии с созданным БП:

  • будут выставляться задания указанным пользователям;
  • меняться статусы согласования подотчетных денег.

Конечным состоянием нашего экземпляра БП, которого он достигнет после выполнения определенного числа шагов, будет либо статус Отклонено (в случае отклонения заявки на одном из этапов согласования), либо статус Завершено (в случае одобрения заявки на обоих этапах согласования).

В случае изменения БП это изменение будет воздействовать только на вновь созданные экземпляры БП.


Пример динамического назначения прав на документ
143 / 184

Динамическое изменение прав

Рассмотрим пример динамического изменения прав на документ по мере выполнения бизнес-процесса на базе списков (Сервисы > Списки).

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

Особенности назначения прав в системе
Если для документа используется упрощенная (старая) версия прав, то они устанавливаются жестко извне (настройки доступа к инфоблокам/спискам/и т.д.). Единственный вариант, позволяющий устанавливать права прямо из бизнес-процесса - это установка для документа права бизнес-процессы извне (права на сам документ). В этом случае с помощью закладки Доступ или действия Установка прав можно менять права по ходу выполнения процесса.

Если используются расширенные права доступа, то из бизнес-процесса можно только добавлять новые права на документ, которые будут оставаться у документа даже после выполнения процесса. Переопределить права, которые были установлены извне, внутри бизнес-процесса нельзя.

Создадим простой пример бизнес-процесса:

  • По умолчанию, укажем в настройках списка для определенной группы пользователей, в которую входит необходимый нам сотрудник, право на Добавление ;
  • Создадим простой последовательный шаблон бизнес-процесса (в списке выбираем Действия > Настроить бизнес-процессы), который будет запускаться при создании элемента списка.

    • Добавим действие Утверждение документа . В поле Утверждают сотрудники укажем нашего пользователя . Это действие носит демонстрационный характер и позволит управлять сценарием выполнения бизнес-процесса.
    • В ветку положительного утверждения документа добавим действие Установка прав . Отметим в нем опцию Перезаписать и укажем нужного пользователя для операции Право на операцию "Чтение" имеют .

      После выполнения данного действия пользователь будет наделен правом на просмотр созданного им, и ранее недоступного, элемента списка.

    • Добавим еще одно действие Утверждение документа. Назначение и настройки будут полностью аналогичны первому.
    • В ветку положительного утверждения документа добавим действие Установка прав. Отметим опцию Перезаписать и укажем нужного пользователя для операции Право на операцию "Полный доступ" имеют .

      Таким образом, пользователь теперь имеет право на изменение созданного им, и ранее доступного только на чтение, элемента списка.

В результате получится такая схема:

Как работает наш бизнес процесс

Требуемый пользователь создает элемент списка, который не будет для него сразу отображаться:

После будет создано первое задание бизнес-процесса по утверждению документа:

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

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

Примечание: Если в первый раз отклонить утверждение, то пользователь не будет обладать правом на чтение и не сможет увидеть в списке созданный им элемент. Запрос на утверждение придет во второй раз. Если утверждение выполнено, то пользователь сразу сможет читать и изменять документ, так как он будет обладать правом полный доступ.

Документация по теме:

  • Действие "Установка прав"
  • Действие "Утверждение документа"


Использование пользователя в бизнес-процессе
144 / 184

Выбираем пользователя

Рассмотрим пример на основе списков (Сервисы > Списки):

  • При создании нового элемента списка мы указываем пользователя в соответствующем поле. Этот пользователь будет использован в бизнес-процессе.
  • После запуска бизнес-процесса пользователь из этого поля будет передан в переменную. Затем от его имени будет отправлено уведомление автору .

Для этого:

  • Создадим в списке новое поле Пользователи типа привязка к пользователю. Поле множественное не отмечаем;
  • Создадим простой последовательный шаблон бизнес-процесса, который будет запускаться при создании элемента списка.
    • В параметрах шаблона создадим не множественную переменную с названием Пользователи (v_user) типа Привязка к сотруднику;
    • Добавим действие Изменение переменных , в котором передадим значение поля элемента списка Пользователи в переменную Пользователи (v_user);
    • Добавим действие Уведомление пользователя , в котором в качестве получателя сообщения укажем Автора, а в качестве отправителя - пользователя из переменной Пользователи (v_user) {=Variable:v_user}.

В результате получится такой простой шаблон:


Утверждение документа с учетом времени
145 / 184

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

Рассмотрим простой пример, когда на утверждение документа отводится определенное время. Если документ не утвержден за указанное время (например, 10 минут с момента создания), то после выполнения задания пользователю будет выслано соответствующее уведомление.

Важно! Бизнес процесс выполняется на хитах , поэтому для точности выполнения процесса по времени на портале обязательно должны быть хиты.

Пример посмотрим на базе списков (Сервисы > Списки) для одного единственного пользователя:

  • Создадим простой последовательный шаблон бизнес-процесса (в списке выбираем Действия > Настроить бизнес-процессы), который будет запускаться при создании элемента списка;
  • В Параметрах шаблона создадим первую переменную с названием Окно утверждения (идентификатор укажем date) типа число. В поле Значение по умолчанию укажем количество минут (в нашем случае 10) на утверждение документа;
  • Там же создадим вторую переменную Вычисленная дата (название идентификатора c_date) типа Дата/Время. В эту переменную будет сохранена крайняя дата/время, относительно даты создания документа. После этого срока считается, что утверждение документа выполнено не вовремя;
  • Добавим первое действие Изменение переменных , в котором для переменной Вычисленная дата произведем расчет крайней даты/времени по формуле :
    =dateadd({=Document:DATE_CREATE}, {=Variable:date_printable} & "minutes")

    Подробнее про dateadd

    К Дате создания документа ({=Document:DATE_CREATE}) будет прибавлено требуемое количество минут ("minutes") из переменной Окно утверждения ({=Variable:date_printable}) .

  • Следующим добавим действие Утверждение документа . В поле Утверждают сотрудники укажем Автор ;
  • После утверждения документа добавим конструкцию Условие :

    • Левую ветку условия мы настроим так, чтобы значение переменной Вычисленная дата было больше чем {=System:Now};

      • Подробнее про {=System:Now}

      Где {=System:Now} - текущая дата на момент выполнения данного условия.

      В этом случае мы будем сравнивать дату/время, которая была рассчитана на момент утверждения документа (Вычисленная дата), с датой/временем, которое наступит после утверждения документа ({=System:Now}) и будет считаться текущим на момент выполнения конструкции Условие.

      Соответственно, ветка условия будет выполняться, если Вычисленная дата будет больше чем текущая дата/время (на момент после утверждения документа).

    • Правую ветку условия мы настроим так, чтобы в поле Тип условия было указано значение Истина , т.е. ветка условий будет выполняться всегда ;
    • После условия в правой ветке идет действие Уведомление пользователя. Оно будет оповещать Автора о том, что он не уложился с утверждением документа в срок.

    Ветки условия выполняются слева направо, поэтому в первую очередь будет проверено, что утверждение уложилось в указанные временные рамки, в остальных же случаях (Истина) утверждение будет считаться не уложившимся.

В результате получится такая схема шаблона:

Документация по теме:

  • Форма "Вставка значения"
  • Вычисление значений выражений в параметрах действий


Пример использования бизнес-процессов и списков
146 / 184

В данном уроке будет рассмотрен пример создания сервиса сбора и размещения заявок на закупку согласно ТЗ на корпоративном портале.


Техническое задание
147 / 184

Постановка технического задания

ТЗ по размещению заявок на закупку на корпоративном портале.

  1. Общие требования к функционалу:
    1. Требуется создать область для размещения, обработки и хранения заявок на закупку. Заявка на закупку представляет собой карточку, состоящую из набора именованных полей определенного типа. Заявка на закупку также может содержать неограниченное количество файлов (а может и не содержать ни одного).
    2. Любой пользователь (входящий в определенную группу доступа) может создать заявку на закупку. Данный пользователь в дальнейшем рассматривается как автор заявки.
    3. В дальнейшем, никакой программной обработки заявок не производится.
  2. Требования к работе с данными:
    1. Заявка состоит из следующих полей (символом ‘*’ отмечены поля, обязательные к заполнению):
      1. Тип закупки* (выбор из списка: «менее 100.000 руб», «100.000 руб и более»)
      2. Предмет закупки* (строка)
      3. Стоимость, руб (целое число)
      4. Обоснование* (многострочное поле)
      5. Выбранный поставщик* (строка)
      6. Потенциальные поставщики* (многострочное поле)
      7. Статус закупки* (выбор из списка: «на согласовании», «одобрена», «отклонена»).
      8. Инициатор* (автор заявки)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
      9. Непосредственный руководитель* (выбор из списка пользователей)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
      10. Бюджетный контролер* (выбор из списка пользователей)
        Желательно, чтобы выбор производился из ограниченного списка пользователей
      11. Юрист* (выбор из списка пользователей)
        Желательно, чтобы выбор производился из ограниченного списка пользователей
      12. Главный бухгалтер* (выбор из списка пользователей)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
      13. Финансовый директор* (выбор из списка пользователей)
        Желательно, чтобы это поле заполнялось автоматически при вводе заявки.
    2. Пользователи должны иметь возможность редактировать свои (и, в отдельных случаях, чужие) заявки. При этом в системе должны сохраняться: дата и время создания, дата и время изменения, автор и автор последнего изменения.
    3. Любой пользователь (п 1.2) должен иметь доступ к списку заявок, автором которых он является. Доступ к списку заявок, созданных другими пользователями, должен быть предоставлен только пользователям – членам определенной группы (как на чтение, так и на редактирование). Допускается разделение доступа на уровне интерфейса
    4. Область просмотра заявок должна представлять собой таблицу. Колонки таблицы соответствуют полям заявки.
      1. В рамках области просмотра должны быть представлены следующие поля (в указанном порядке)
        • Дата создания
        • Тип закупки
        • Предмет закупки
        • Стоимость, руб
        • Инициатор
        • Выбранный поставщик
      2. В таблице должна быть представлена группировка/сортировка по статусу закупки.
      3. Интерфейс должен предоставлять фильтрацию по значению полей заявок (как минимум: выбор значения фильтра из списка возможных значений), по любому полю, если его тип отличен от «многострочный текст».
      4. Дополнительные требования (желательно). Пользователь с правами конфигуратора системы должен иметь возможность (не прибегая к средствами разработки PHP):
        • Создавать другие представления данных, подходящие под описание п. 2.4, с произвольным набором полей, сортировок, группировок, фильтров.
        • Проводить массовые операции с заявками (например – удаление всех заявок, отвечающих критериям определенного фильтра).
        • Создавать новые типы закупки и настраивать доступность полей в зависимости от типа.
        • Редактировать состав полей заявки.
  3. Прочие требования:
    1. Необходимо предусмотреть функционал оповещений – пользователи, входящие в определенную группу, должны получать оповещения о внесении любых изменений в какую-либо заявку. Оповещение должно содержать значения всех полей заявки.
    2. В качестве групп пользователей, упомянутых в данных требованиях, должна быть возможность использовать ранее созданные группы портала (которые используются для предоставления доступа к другим ресурсам).


Подготовка списка и его настройка
148 / 184

Подготавливаем и настраиваем список

Согласно условиям ТЗ наиболее подходящим под нашу задачу будет функционал Универсальные списки .

Подготовка списка и его настройка

В нашем примере мы будем работать со списками продукта «Битрикс24 в коробке» (Сервисы > Списки).

Нажмите на рисунок, чтобы увеличить

  • Создадим новый список с поддержкой бизнес-процессов и произведем настройку подписей . Разделы мы использовать не будем, поэтому оставляем их как есть.
  • Добавим поля согласно ТЗ: во вкладке Действия выбираем Настроить поля . В открывшемся окне - [image]. Не забудем отметить нужные поля, как обязательные к заполнению.

Примеры настройки поля типа список
Поле Тип закупки.

Поле Статус закупки.

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

Примечание: Такими полями будут Инициатор, Непосредственный руководитель, Главный бухгалтер, Финансовый директор.

Пример настройки поля с автоматическим значением по умолчанию, равному дате и времени создания заявки

По ТЗ не требуется выбор пользователей системы, поэтому укажем требуемых сотрудников текстом с использованием поля типа Cписок :

Примечание: Такими полями будут Бюджетный контролер, Юрист.

Результат создания нами полей, согласно ТЗ, мы увидим в виде списка .

Теперь форма создания новой заявки будет иметь вид:


Настройка внешнего вида и доступа для списка
149 / 184

Настраиваем список

Теперь настроим внешний вид отображения области просмотра заявок в соответствии с техническим заданием, а также установим права доступа к списку.

Настройка внешнего вида списка и фильтра

  • С помощью кнопки [image] настроим внешний вид списка заявок в соответствии с требованиями ТЗ ;
  • В нашем примере интерфейс должен предоставлять фильтрацию по значению полей заявок. При помощи кнопки [image] настроим фильтр и отметим Для всех , чтобы наши настройки отображались для всех пользователей.

Настройка прав доступа к списку

Перейдем опять к настройке списка на закладку Доступ и укажем права доступа следующим образом:

  • Bitrix24: Все сотрудники отдела с подотделами - Добавление
  • Автор - Изменение
  • Ответственный сотрудник - Изменение


Создание бизнес-процессов
150 / 184

Создаем бизнес-процессы

Для работы с заявками мы создадим 2 шаблона последовательных бизнес-процессов (Бизнес-процессы > Процессы в ленте, кнопка Создать новый). Один будет запускаться при создании заявки, а второй - при ее изменении.

БП для создания заявки на закупку

Произведем настройку параметров шаблона:

  • На вкладке Основное укажем название и отметим опцию автоматически запускать при добавлении ;
  • На вкладке Переменные создадим новые обязательные переменные типа Привязка к сотруднику (Главный бухгалтер, Финансовый директор, Проверяющий ). Эти сотрудники в ходе процесса будут автоматически подставляться в карточку заявок;
  • Также создадим еще пару переменных типа Привязка к сотруднику для дальнейшей автоматизации, но без указания обязательности и значения по умолчанию: Инициатор, Непосредственный руководитель.

Перейдем к непосредственному созданию шаблона бизнес-процесса:

  • В основную область конструктора бизнес-процессов добавим действие Выбор сотрудника для вычисления начальника для автора, чтоб в будущем записать его имя в заявку автоматически.
  • Добавим действие Изменение документа, которое будет записывать нужные поля в карточке заявки. Заполним форму .
    • Статус закупки - указываем на согласовании. Это поможет избежать ошибки, если сотрудник при заполнении заявки укажет иной статус.
    • Инициатор - с помощью формы Вставка значения в секции Пользователи выберем Автор.
    • Непосредственный руководитель - с помощью формы Вставка значения в секции Дополнительные результаты выберем результат Выбранный сотрудник действия Выбор начальника.
    • Для полей Главный бухгалтер и Финансовый директор с помощью формы Вставка значения укажем соответствующие им переменные.
  • Добавим действие Сообщение соц.сети , которое будет отправлять уведомление сотруднику, ответственному за сервис заявок о том, что создана новая заявка. Также в сообщении будут указаны значения всех полей заявки.

В итоге получим такую схему шаблона бизнес-процесса:

БП для изменения заявки на закупку

Сначала настроим параметры шаблона:

  • На вкладке Основное укажем название и отметим опцию автоматически запускать при изменении ;
  • На вкладке Переменные создадим новую обязательную переменную типа Привязка к сотруднику, в которой явно зададим Проверяющего (сотрудника ответственного за сервис заявок).

Теперь перейдем к созданию шаблона бизнес-процесса:

  • В основную область конструктора бизнес-процессов добавим действие Сообщение соц.сети, которое отправит уведомление сотруднику, ответственному за заявки, о том, что заявка изменена. Также в сообщении будут указаны новые значения всех полей заявки;
  • Добавим конструкцию Условие и создадим 3 ветки условия: Одобрена, На согласовании, Отклонена. Это позволит отправлять автору разные сообщения о статусе его заявки;
  • Настроим условие Одобрена . Для этого в поле Поле документа укажем, что условие будет выполняться, если статус закупки будет равен одобрена;
  • Аналогичным образом настроим условия для остальных вариантов статуса закупки;

    • Добавим действие Сообщение соц.сети в ветки условий Одобрена и Отклонена. Тем самом мы будем оповещать автора о том, что заявка на закупку после ее изменения перешла в эти статусы.

  • Настроим действие Сообщение соц.сети для ветки условия Одобрена;
  • Аналогично настроим действие и для ветки условия Отклонена, изменив лишь часть текста сообщения.

В итоге наша схема шаблона бизнес-процесса выглядит так:


Пример бизнес-процесса со статусами по созданию счета для клиента в CRM
151 / 184
Рассмотрим пример бизнес-процесса со статусами по созданию счета для клиента в CRM согласно ТЗ.


Техническое задание
152 / 184

Постановка технического задания

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

ТЗ по созданию счета для клиента на корпоративном портале:

  1. Менеджер по продажам начинает бизнес-процесс и заполняет поля:

    • Название сделки,
    • Менеджер по продажам,
    • Менеджер по закупкам,
    • Клиент (название),
    • Сумма сделки,
    • Адрес доставки.

  2. Менеджер по закупкам продолжает процесс и заполняет поля:

    • Поставщик (название),
    • Поставщик (контактное лицо),
    • Сумма закупки,
    • Срок поставки от поставщика,
    • Вес отправления,
    • Объем отправления,
    • Адрес отгрузки,
    • Счет от поставщика, опционально (номер и вложение),
    • Договор от поставщика, опционально (номер и вложение).

  3. Менеджер по продажам изучает ответ от менеджера по закупкам.

    Выставление срока поставки для клиента. Сверяются сроки поставки, если срок поставки до клиента равен или > срок поставки до поставщика +5 дней, процесс продолжается, иначе открывается поле комментирования сроков поставки, комментарии обязателен. Заполняются следующие поля:

    • Срок поставки до клиента.

  4. Юрист изучает договор вложенный менеджером по закупке (в случае его наличия) и создает договор для клиента. Заполняются следующие поля:

    • Договор для клиента (номер и вложение),
    • Договор от поставщика, опционально (номер и вложение).

  5. Процесс переходит менеджеру по продажам, согласование договора. Заполняются следующие поля:

    • Договор для клиента (номер и вложение).

  6. Процесс переходит менеджеру по закупкам, согласование договора. Заполняются следующие поля:

    • Договор для клиента (номер и вложение).

  7. Процесс переходит в бухгалтерию — создание и прикрепление счета для клиента. Заполняются следующие поля:

    • Счет для клиента (номер и вложение).

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

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

    • Счет для клиента (номер и вложение),
    • Договор для клиента (номер и вложение).

Шаблон для ознакомления: Скачать


Настройки CRM
153 / 184

Как настроить CRM

Сначала произведем настройки в самой CRM.

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

В качестве основы будем использовать такую сущность CRM, как Сделка. Поэтому первым делом мы создадим и настроим пользовательские поля для карточки сделки согласно ТЗ (CRM > Настройки > Настройки форм и отчетов > Пользовательские поля > Сделка > Список полей).

Настроенные пользовательские поля CRM

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

Настройка прав доступа

Укажем, кто будет иметь доступ к бизнес-процессам (менеджеры, юрист, бухгалтер и остальные, согласно ТЗ) на странице Права доступа (CRM > Настройки > Права > Права доступа)

В нашем примере используем группу Моя компания: Сотрудники. Это позволит выбирать любого сотрудника при создании нового шаблона бизнес-процесса.

Внимание! В описании и шаблоне-примере для всех сотрудников в процессе задан по умолчанию сотрудник с идентификатором 1. Это позволит сразу ознакомиться со всем процессом, не создавая и не настраивая других пользователей.

Настройка формы создания сделки

Перейдем к форме создания новой сделки (CRM > Сделки) и произведем ее настройку согласно ТЗ.

Результат настройки формы

В итоге получим следующий вид:


Создание бизнес-процесса
154 / 184

Создаем бизнес-процесс

Создадим новый шаблон бизнес-процесса со статусами для сделки (CRM > Настройки > Роботы и бизнес-процессы > Бизнес-процессы) и настроим его параметры.

Начальные настройки

  • Укажем в параметрах шаблона, что процесс будет автоматически запускаться при добавлении новой сделки.
  • Создадим новые переменные типа Привязка к пользователю :
    • Менеджер по продажам (*),
    • Менеджер по закупкам (*),
    • Юрист (*),
    • Бухгалтер (*),
    • Логист (*),
    • Помощник руководителя (*).

    Для всех по умолчанию укажем требуемых сотрудников (в нашем случае это пользователь с идентификатором 1).

  • Создадим переменную Адрес портала (*) типа Строка и укажем для нее значение по умолчанию, равное адресу портала .

В результате получим список переменных . Остальные переменные будут созданы по мере необходимости .

Статусы шаблона

Начальный статус

Подпроцесс первого статуса начинается с Блока действий, который используется для группировки однотипных действий:

  • проверки, указаны ли требуемые сотрудники в форме Сделка,
  • автоматической записи пользователей в пустые поля из переменных Менеджер по продажам (*), и.т.д.
Таким образом он позволяет автоматизировать заполнение формы

Этап 1 - Менеджер по продажам

Этап проходит по алгоритму:
  1. Проверяется заполнение требуемых от менеджера по продажам полей:
    • Если поле окажется пустым, то значение специальной переменной Флаг "Поля пусты" будет изменено на Да. Переходим к п. 2 алгоритма.
    • Если поля окажутся заполнены, то значение переменной Флаг "Поля пусты" будет сброшено на Нет и процесс перейдет на следующий этап.
  2. Сначала значение переменной Флаг "Поля пусты" будет сброшено на Нет, а затем Менеджеру по продажам будет выставлено задание, в котором от него потребуется заполнить эти поля. После чего будет произведен переход на начало этапа (п. 1).

Этап 2 - Менеджер по закупкам

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

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

Рассмотрим эти ссылки поподробнее

  • Для автоматического формирования ссылки на карточку просмотра сделки будет использоваться следующее выражение

    [url]{=Variable:domain_printable}/crm/deal/show/{=Document:ID}/[/url]

    где {=Variable:domain_printable} будет являться значением переменной Адрес портала (*), которая была ранее задана при создании шаблона бизнес-процесса, а {=Document:ID} - Идентификатор сделки, который входит в стандартный набор полей сделки.

  • Для автоматического формирования ссылки на карточку просмотра поставщика будет использоваться следующее выражение

    [url]{=Variable:domain_printable}/crm/company/show/{=Document:UF_CRM_1369312906}/[/url]

    где {=Document:UF_CRM_1369312906} будет являться значением поля Поставщик (название).

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

    [url]{=Variable:domain_printable}/bitrix/components/bitrix/crm.deal.show/show_file.php?ownerId={=Document:ID}&fieldName=UF_CRM_1369315496&fileId={=Document:UF_CRM_1369315496}/[/url]

    где {=Document:UF_CRM_1369315496} будет являться значением поля Счет от поставщика (файл). Также идентификатор этого поля используется для параметра &fieldName=UF_CRM_1369315496 ссылки.

Этап 3 - Менеджер по продажам

Действия аналогичны действиям предыдущего этапа, с той разницей, что задается другой сотрудник и поля для заполнения.

Этап 3а - Комментарий относительно сроков доставки

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

Проверка осуществляется следующим образом

Если значение поля документа Срок поставки до клиента не меньше чем вычисленное выражение =Dateadd({=Document:UF_CRM_1369314998}, "5d") (где {=Document:UF_CRM_1369314998} - поле сделки Срок поставки от поставщика), то никаких действий выполняться не будет. Во всех остальных случаях менеджеру по продажам будет выставлено задание.

Этап 4 - Этап 8

Действия аналогичны действиям 3-го этапа, с той разницей, что задается другой сотрудник и поля для заполнения.


Добавление информации в инфоблок из бизнес-процесса
155 / 184

Как добавить информацию из Бизнес-процесса

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

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

  • Для начала создадим в списке дополнительные поля:

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

    Для поля Идентификатор инфоблока зададим значение по умолчанию , чтоб каждый раз не заполнять его при создании нового элемента списка. В примере это будет инфоблок с идентификатором =1. Это поле создано лишь для наглядности .

  • Перейдем к инфоблоку. На странице настроек инфоблока, закладка Свойства (Контент > Инфоблоки > Типы инфоблоков > требуемый_инфоблок), создадим новые пользовательские свойства, в которые у нас и будут записываться значения из полей списка.

Перейдем к самому бизнес-процессу. Создадим шаблон последовательного бизнес-процесса.

  • Создадим 2 переменные , которые будут использоваться в отладочных целях:

    • ELEMENT_ID - переменная бизнес процесса, в которую будет записан ИД созданного элемента инфоблока в случае удачи,
    • ERROR - переменная бизнес процесса, в которую будет записан текст ошибки в случае неудачи создания элемента инфоблока.

  • Возьмем код из примера АПИ-вызова CIBlockElement::Add

    Исходный код

    <?
$el = new CIBlockElement;

$PROP = array();
$PROP[12] = "Белый";  // свойству с кодом 12 присваиваем значение "Белый"
$PROP[3] = 38;        // свойству с кодом 3 присваиваем значение 38

$arLoadProductArray = Array(
  "MODIFIED_BY"    => $USER->GetID(), // элемент изменен текущим пользователем
  "IBLOCK_SECTION_ID" => false,          // элемент лежит в корне раздела
  "IBLOCK_ID"      => 18,
  "PROPERTY_VALUES"=> $PROP,
  "NAME"           => "Элемент",
  "ACTIVE"         => "Y",            // активен
  "PREVIEW_TEXT"   => "текст для списка элементов",
  "DETAIL_TEXT"    => "текст для детального просмотра",
  "DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif")
  );

if($PRODUCT_ID = $el->Add($arLoadProductArray))
  echo "New ID: ".$PRODUCT_ID;
else
  echo "Error: ".$el->LAST_ERROR;
?>

    и модифицируем его:

    <?
CModule::IncludeModule("iblock"); //подключаем модуль инфоблоков

$el = new CIBlockElement;

$PROP = array();
$PROP[IB_CUSTOM_PROPERTY] = {=Document:PROPERTY_117};
// задаем для свойства инфоблока "IB_CUSTOM_PROPERTY" типа "строка" значение из поля документа "PROPERTY_117"

$files = explode(', ',"{=Document:PROPERTY_118}");
foreach($files as $key=>$value)
 {
  $PROP[IB_FILE_PROPERTY]['n'.$key]=array('VALUE'=> CFile::MakeFileArray($value), 'DESCRIPTION' => '');
 }
// задаем для свойства инфоблока "IB_FILE_PROPERTY" типа "файл" (множественное) значение из поля документа "PROPERTY_118"

$arLoadProductArray = Array(
  "IBLOCK_ID" = >{=Document:PROPERTY_119},
// задаем  Идентификатор инфоблока, в котором будет создан элемент, из поля документа "PROPERTY_119" типа "строка"
  "NAME" => {=Document:NAME},
// задаем Название создаваемого элемента инфоблока из поля документа "Название"
 "PROPERTY_VALUES"	=> $PROP,
);

$ELEMENT_ID = $el->Add($arLoadProductArray);

if($ELEMENT_ID > 0)
 $this->SetVariable('ELEMENT_ID', $ELEMENT_ID);
// задаем для переменной бизнес-процесса "ELEMENT_ID" значение, содержащее номер созданного элемента инфоблока, в случае, если он будет создан
else
 $this->SetVariable('ERROR', $el->LAST_ERROR);
// задаем для переменной бизнес-процесса "ERROR" значение, содержащее текст ошибки, в случае, если  элемент инфоблока не будет создан
?>

    Этот код будет, с помощью АПИ-методов, создавать новый элемент инфоблока, в котором пользовательские свойства IB_CUSTOM_PROPERTY, IB_FILE_PROPERTY, а также название элемента инфоблока будут содержать значения пользовательских полей PROPERTY_117, PROPERTY_118, PROPERTY_119 и значение поля название элемента списка.

    После чего добавим в шаблон действие PHP-код, в котором укажем наш измененный код.

  • Добавим в шаблон действие Запись в отчет, в котором укажем следующий текст:
    {=Variable:ELEMENT_ID_printable}, {=Variable:ERROR_printable}

    Этим самым мы запишем в отчет по выполнению бизнес-процесса значение отладочных переменных для анализа в случае ошибок.

Документация по теме:

  • Действие "PHP код"
  • АПИ-метод "CIBlockElement::Add"
  • Произвольный PHP код в бизнес-процессе


Примеры изменения типовых бизнес-процессов
156 / 184

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


Пример изменения процесса Выдача наличных
157 / 184

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

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

Теперь при вызове бизнес-процесса нужно будет сразу указать назначение денег.

Редактирование шаблона

Рассмотрим ключевые изменения шаблона.

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

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

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

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

После того, как по платежу будет принято какое-то решение, нужно проверить, кто является утверждающим сотрудником. Осуществим это, используя Условие, зависящее от значения переменной Выбран начальник. Если утверждающий пользователь не является руководителем компании, то нам необходимо его ознакомить с деталями платежа, используя действие Ознакомление с документом.

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


Пример изменения процесса Заявление на отпуск
158 / 184

Сообщение от пользователя - Здравствуйте. Надеюсь, мое сообщение не останется без внимания. Только недавно изучаю бизнес-процессы, не могу понять. Есть стандартный процесс заявления на отпуск. У нас в компании 2 раза в год проводятся важные мероприятия, во время которых оговорено, что в отпуск никто не уходит. Можно как-то автоматизировать чтобы процесс был недоступен в это время или заявка на отпуск автоматически отклонялась, а то постоянно кто-то забывает? И можно ли как-то в стандартный процесс добавить категорию отпуска – для бухгалтерии это важно. Спасибо

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

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

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

Итоговый список констант бизнес-процесса (включающий кроме созданных уже существующие) будет выглядеть следующим образом.

Внесем корректировки в шаблон бизнес-процесса. Добавим в начало цикл проверки введенных пользователем дат.

Проверку дат осуществим с помощью действия Условие. Для ветки условий Нет, настроим зависимость даты отпуска от запрещенных для отпуска периодов. Т.к. выбранные для отпуска даты записываются в поля, то будем использовать тип условия Поле документа. Рассматривать будем следующие варианты:

  • Дата начала отпуска попадает в один из запрещенных периодов.
  • Дата завершения отпуска попадает в один из запрещенных периодов.
  • Сам запрещенный период целиком попадает в даты отпуска.

Примечание: даты начала и завершения в периоды не объединяются, поэтому каждую из дат нужно отдельно сравнивать с другой. Для объединения условий необходимо использовать логические операторы И/ИЛИ.

Добавим уведомление пользователя о том, что он выбрал некорректные даты для отпуска. Пользователю будет также предложено выбрать другие даты для своего отпуска. Используем для этого действие Запрос доп.информации (с отклонением). Если пользователь введет новые даты и сохранит их, то новые даты мы запишем в поле документа и цикл опять будет их проверять. Если пользователь не захочет по какой-либо причине вводить даты и отклонит ввод информации, то мы удалим его заявление на отпуск и прервем выполнение процесса.

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

Созданный цикл будет работать пока у данной переменной будет значение Нет. Если пользователь введет правильные даты, то изменим значение переменной на Да, чтобы выйти из цикла. Если пользователь ввел подходящие для отпуска даты, то бизнес-процесс заявления на отпуск продолжит свое обычное выполнение.

Скачать созданный шаблон бизнес-процесса можно здесь.


Пример изменения процесса Исходящие документы
159 / 184

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

Чтобы выполнить данную задачу отредактируем типовой бизнес-процесс Исходящие документы. Для начала, добавим поле со статусом документа. Пользователю не нужно будет заполнять это поле - оно будет изменяться в ходе исполнения процесса. Установим значение по умолчанию Не согласовано:

Отредактируем шаблон бизнес-процесса. Для того, чтобы автоматизировать процесс проверки документа, будем использовать цикл. Установим, что он должен выполняться, пока созданное нами поле документа не изменит свое значение.

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

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

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

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

В ветке Отказано добавим уведомление автору, что его документу отказано в публикации. Также изменим статус документа.

Шаблон бизнес-процесса (для ознакомления)

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


Создание задачи с приоритетом с помощью PHP-кода
160 / 184

Задание: необходимо создать задачу с помощью действия php-код, при этом приоритет задачи зависит от выбранного значения переменной бизнес-процесса.

Выбирать приоритет задачи будем через действие Запрос дополнительной информации. Приоритет задачи может принимать значения 0, 1, 2, соответствующий низкому, среднему и высокому приоритету (см. CTasks::Add). Пользователю нужно будет выбрать значение переменной типа Список. Очевидно, ему будет непонятно, что подразумевается под цифрами. Поэтому для списка варианты мы обозначим текстом, а значения каждого из вариантов укажем в квадратных скобках.

Когда пользователю придет задание, то он сможет выбрать вариант в понятной ему форме, но уже значение переменной будет численное.

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

{
$root = $this->GetRootActivity();
$priority_var= $root->GetVariable('prior');

$arFields = Array("TITLE" => "Рriority task",
        "DESCRIPTION" => "Task description",
        "RESPONSIBLE_ID" => 2,
        "CREATED_BY" => 1,
        "PRIORITY" => $priority_var
         );

    $obTask = new CTasks;
    $obTask->Add($arFields);
}


Пример бизнес-процесса для подачи заявки на отпуск
161 / 184

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

Краткий алгоритм работы

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

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

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

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

Примечание: Процесс подразумевает, что в компании используется структура с несколькими уровнями начальства и одним главным директором.

Шаблон для ознакомления: Скачать

Настройка списка

Необходимо создать следующие поля списка:

  • Номер - типа Счетчик;
  • С - типа Дата/Время (обязательное);
  • По - типа Дата/Время (обязательное);
  • Тип отпуска - типа Список (обязательное), со значениями: Очередной, За свой счет, Учебный;
  • Доп.инф. - типа Название (обязательное). Данное поле создано потому, что тип Название обязательный и удалить его невозможно.

    Значение по умолчанию: нет.

Используемые переменные

  • Автор (applicant) типа Пользователь - используется для указания автора заявки на отпуск;

    Значение по умолчанию: Автор.
  • Начальник (deptchief) типа Пользователь - используется для хранения начальника, который будет выбран для автора в ходе выполнения бизнес-процесса;
  • Директор (ceo) типа Пользователь - используется для указания директора компании;

    Значение по умолчанию: указывается_соответствующий_сотрудник_компании.
  • Бухгалтер (accountant) типа Пользователь - используется для указания бухгалтера компании;

    Значение по умолчанию: указывается_соответствующий_сотрудник_компании.
  • Утверждено? (approved) типа Да/Нет - используется в качестве флага, отображающего статус заявки. На его основе производится выбор дальних действий над заявкой после ее утверждения;

    Значение по умолчанию: Нет.
  • Кем отклонено (rejectedby) типа Пользователь - используется для хранения пользователя, отклонившего заявку на отпуск;
  • Ссылка (link) типа Строка - используется формирования ссылки для перехода к просмотру заявки на отпуск. Эта ссылка будет использоваться в тексте оповещения сотрудников, участвующих в процессе.

    Значение по умолчанию: http://адрес_портала/company/personal/bizproc/.

Настройка шаблона

  • Необходимо проставить свои поля (взамен тех, что будут после импорта шаблона) во всех действиях шаблона (через форму Вставка значения);

    Также замену полей необходимо произвести и в тексте сообщений:

  • Необходимо задать для переменных Директор, Бухгалтер и Ссылка свои Значения по умолчанию.

Общая схема работы бизнес-процесса

  • Первым делом идет действие по выбору начальника для автора.

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

  • Следующее действие (Роли) производит запись в переменные следующих пользователей:
    • Автор - сотрудник, который создал заявку на отпуск. Указывается с помощью выражения {=Document:CREATED_BY};
    • Начальник - сотрудник, который был выбран предыдущим действием (выбор начальника). Указывается с помощью формы Вставка значения (Дополнительные результаты - Выбор начальника - Выбранный начальник).

  • Далее следует действие по установке прав. В нем для основных сотрудников разрешается доступ на чтение к заявке на отпуск.

  • Следующим идет условие (Выбранный начальник?), по которому, в зависимости от того, какой именно начальник был выбран (действие выбор начальника), будут выполняться различные ветви последовательности действий.

    • Выполнение первой ветки условия происходит, если значение переменной Начальник равно значению переменной Директор.

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

      В случае одобрения заявки значение переменной Утверждено? будет установлено на да.

      В противном случае в качестве значения переменной Кем отклонено будет установлен сотрудник, отклонивший заявку - Директор.

    • Если условие 1-й ветки не будет выполнено, то тогда будет произведен переход к проверке условия 2-й ветки. Ее выполнение происходит, если значение переменной Начальник равно сотруднику, который был выбран действием выбор начальника.

      Таким образом, происходит проверка, что переменная Начальник не пуста и не равна Директору.

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

      В случае отклонения в качестве значения переменной Кем отклонено будет установлен сотрудник, отклонивший заявку - Начальник.

      В случае одобрения заявки будет выполнено последующее ее согласование с директором, аналогично 1-й ветки условия.

    • 3-я ветка условия будет выполняться в последнюю очередь, при условии, что переменная Начальник будет пуста.

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

  • Следующей конструкцией будет опять условие.

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

    • В случае если значение переменной Утверждено? равно да, то тогда Бухгалтеру, Начальнику и Автору будут отправлены сообщения, оповещающие о том, что заявка на отпуск была одобрена.

      Затем заявка будет опубликована в списке заявок со статусом "одобрена".

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

    • В случае если значение переменной Утверждено? равно нет, то тогда Начальнику и Автору будут отправлены сообщения, оповещающие о том, что заявка на отпуск была отклонена.

      После чего будет установлен соответствующий статус для заявки, на чем и завершится процесс.


Пример бизнес-процесса для обслуживания заявок клиентов
162 / 184

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

Описание алгоритма работы

Клиент оставляет на сайте заявку, которая появляется на портале в виде нового лида.

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

Ответственный пользователь (далее ОП по тексту) получает уведомление о том, что нужно связаться с клиентом и получить у него дополнительные сведения относительно его заявки. Обязательным условием продолжения работы является назначение даты повторного звонка, чтобы уточнить, готов ли клиент заключить сделку.

По повторному звонку принимается решение о дальнейшем обслуживании лида:

  • Если клиент готов сделать заказ, то создается новая сделка, в которую заносятся данные из лида.
  • Если клиент еще не принял решения о продолжении сотрудничества, то ОП должен договориться о дате следующего звонка.
  • Если клиент отказывается заключать сделку, то ОП должен выяснить почему. Возможны следующие причины отказа:
    • Сделка физически невозможна - ОП указывает причину. Процесс заканчивается.
    • Клиент хочет закупаться у поставщиков - ОП уведомляет сотрудника-оптовика о том, что тому нужно связаться с клиентом и договориться о поставках. Сам оптовик теперь становится ответственным. Важным является то, что сотрудник-оптовик после звонка должен сразу выяснить: будет клиент осуществлять закупку или нет.
    • Клиента не устраивает цена - ОП уведомляет главу отдела продаж об этом. Глава отдела продаж принимает решение о том, какие скидки и бонусы можно предоставить клиенту. В зависимости от этого отсылается один из пяти содержащих скидки прайс-листов, назначается дата нового звонка. Если не один из прайсов не подошел клиенту, то с ним должен связаться сотрудник-оптовик.
    • Клиент не идет на контакт - необъяснимая невозможность договориться (личная несовместимость, конфликтная ситуация) или связаться с клиентом. В данном случае ОП уведомляет назначающего сотрудника о том, что нужно сменить ответственного.
    • Другое - причина указывается в комментарии.

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

Назначение ответственного

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

Ему нужно выбрать ОП, а также установить условия для задачи, которая будет для него поставлена.

Уточнение заявки

ОП звонит клиенту и уточняет данные, необходимые для закупки.

Примечание:

1 - содержит подсказки для ОП при звонке клиенту

2 - единственное обязательное поле - без него выполнение бизнес-процесса не продолжается

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

Создание напоминания пользователю

В бизнес-процессе предусмотрена функция напоминания ОП о предстоящем звонке клиенту.

Он получит уведомление за час до наступления времени звонка.

Также напоминание появится за минуту до указанного времени.

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

Подробнее об использовании оператора можно прочитать в соответствующем уроке.

Повторный звонок клиенту

После повторного звонка клиенту ОП должен определить степень готовности клиента к заключении сделки. Клиент либо:

  1. Готов сразу и сделка заключается
  2. Не готов, но ему требуется еще время на принятие решения
  3. Клиент не хочет заключать сделку и мы должны либо предоставить ему улучшенные условия сделки, либо указать почему он не хочет ее заключать

Отработку этой стадии бизнес-процесса можно посмотреть в следующем видео.

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».

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

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

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

    Это необходимо делать для того, чтобы ответственный сотрудник всегда был один и данные о нем хранились в одной единственной переменной, которая будет указываться в параметрах действий бизнес-процесса.

    В нашем примере используется переменная UserResp, описание которой можно найти в параметрах шаблона.

    И она используется в очень многих действиях нашего бизнес-процесса, где нужно указать конкретного пользователя.

  • Сотрудник-оптовик ограничен в решениях, которые он может принять. Он либо указывает, что клиент готов заключить сделку, либо указывает причину, по которой не готов. Причины отказа хранятся отдельных переменных в виде списков.

    Сотрудник-оптовик

    Обычный сотрудник

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

    Так если обычный сотрудник выберет вариант, допустим, Слишком высокая цена, которая недоступна оптовику, то бизнес-процесс не будет знать, что ему делать, потому что для него такой причины отказа в общем списке нет.


Примеры использования бизнес-процессов совместно с другим функционалом системы (ссылки)
163 / 184

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

  • Использование бизнес-процессов в разделе KPI для отдела организации курса Пользователь КП.
  • Сценарий для работы службы техподдержки из курса Администратор сервиса Битрикс24 (коробочная версия).

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

  • Автоматизация исполнения проекта.

    Использование бизнес-процессов для работы над проектом после закрытия сделки.

  • Сценарий автоматизации контроля оказания услуг.


Бизнес-процессы для разработчика
164 / 184
Цитатник веб-разработчиков.

Максим Месилов: Не нужно стесняться задавать вопросы которые вертятся на языке в момент проектирования.
Бизнес-процесс - это процесс обработки документа, для которого задана одна точка входа и несколько точек выхода и последовательность действий (шагов, этапов, функций), совершаемых в заданном порядке и в определенных условиях.

Модуль Бизнес-процессы:

  • предназначен для организации как последовательной обработки элементов инфоблоков в виде отдельного последовательного процесса, так и для создания статусных схем сложных процессов с неопределенным периодом действия.
  • это инструмент, с помощью которого другие части продукта (модули, компоненты и т.п.) могут предоставлять пользователям возможность определять, выполнять и управлять бизнес-процессами (рабочими потоками). Он дает возможность визуально программировать произвольную функциональность, а так же запускать и управлять подобными программами. Здесь под словом "произвольная" понимается возможность создания пользовательских действий, которые расширяют стандартную функциональность.
  • предусматривает универсальный механизм программирования бизнес-процессов, доступный не программисту. Такой универсальный механизм реализован за счет визуального программирования по технологии drag&drop (тащи-и-бросай), понятной и известной любому пользователю компьютера. Шаблон бизнес процессов создается в особом визуальном конструкторе.

Важно! Для работы модуля система должна удовлетворять минимальным системным требованиям. Перед его установкой проверьте соответствие вашей установки этому требованию.

Каждый экземпляр бизнес-процесса (далее – БП) представляет собой программу. Входящие параметры БП являются параметрами, с которыми запускается программа. Переменные БП являются переменными программы.

Соответственно время жизни параметров и переменных БП ограниченно временем жизни самого БП. Чтобы переменные, параметры или любые другие значения БП были доступны после завершения БП и/или вне БП, необходимо сохранить их куда-либо в постоянную память. Наиболее удобно сохранять их в документ БП.

Экземпляр бизнес-процесса одновременно может работать только в одной копии. Если была попытка запустить вторую копию до завершения работы первой (например, запуск процесса от имени 2-х разных пользователей), то возникает ошибка: Бизнес-процесс заблокирован другим процессом. Как правило к этому приводит ошибка и некорректное завершение другого БП.

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

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

Внимание! Внедрение бизнес-процессов требует особой квалификации специалистов. Эти специалисты должны понимать предметную суть бизнес-процессов в компании и уметь выражать эту суть логическими схемами.

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

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


Рекомендации по разработке
165 / 184

Важные моменты и рекомендации

Рассмотрим типовые ошибки разработчиков и возможности, о которых часто забывают.

Запуск

Варианты запуска бизнес-процессов:

  • Ручной - инициируется вручную пользователем из интерфейса;
  • Автоматический - запускается сам при создании/изменении документа, также при работе роботов и триггеров CRM;
  • Запуск через Rest - метод bizproc.workflow.start, либо посредством создания/изменения документа аналогично автоматическому запуску;
  • Возобновление - работа БП после паузы, либо запуск после какого-то события.

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

Калькулятор выражений

В модуле Бизнес-процесс есть полезный инструмент - Калькулятор выражений. С помощью функций калькулятора можно расширить стандартные возможности Бизнес-процессов.

Подробно у функциях калькулятора можно почитать в уроке Функции калькулятора выражений.

Рекомендуем посмотреть примеры по частым вопросам:
  • Примеры работы с датами;
  • Примеры работы с выражениями.

PHP в бизнес-процессах

Отметим основные ошибки тех, кто активно занимается кастомизацией на коробочных версиях:

Хорошо | Плохо | Почему плохо
$this->GetVariable('Foo'); | {=Variable:Foo} | Не рекомендуется использовать выражение БП при построении кода PHP, т.к. его невозможно правильно заэкранировать. Например, есть пользователь добавит в переменную текст с кавычкой, то на выходе получим ошибка парсинга PHP, что приведет к фатальной остановке выполнения хита и БП зависнет. Поэтому лучше использовать стандартный API.
Не ориентироваться на контекст | Использовать $USER, $GLOBALS и т.д. | Использование глобальных переменных не рекомендуется.
Учитывать права доступа | $USER->Authorize(); | Не рекомендуется повышать права доступа путем авторизации под другим пользователем. Например: вы решили для выполнения определенного действия авторизовать пользователя под ID администратора. Если БП остановится по какой-то причине, то у пользователя останутся права администратора.
Фильтровать данные извне | "SELECT FROM b_user WHERE ID = {=Variable:UserID}" | Использования запроса к БД без фильтрации данных позволяет злоумышленнику осуществить атаку на сайт с помощью SQL инъекции.

Также рекомендуется максимально использовать стандартные функции.

Вебинар о бизнес-процессах

Подробнее смотрите в вебинаре Роботы и бизнес-процессы. RPA с точки зрения разработчика. Техноволна 1 от 06 апреля 2020.

Просмотр видео в наших курсах в формате CHM невозможен. Ролик можно просмотреть на сайте компании «1С-Битрикс».


Шаблон бизнес-процесса
166 / 184

Шаблон бизнес-процесса – это схема (программа), в которой задана одна точка входа, последовательность действий (шагов, этапов, функций), совершаемых в заданном порядке и направленных на достижение некоторой цели, а так же одна или несколько точек выхода, определяющих завершение выполнения.

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

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

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

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

Пример простого массива, представляющего шаблон бизнес-процесса:

array(
  array(
    "Type" => "SequentialWorkflowActivity",
    "Name" => "SequentialWorkflowActivity1",
    "Properties" => array(),
    "Children" => array(
      array(
        "Type" => "SetFieldActivity",
        "Name" => "SetFieldActivity1",
        "Properties" => array("Field" => "XML_ID", "Value" => "В рассмотрении"),
      ),
      array(
        "Type" => "IfElseActivity",
        "Name" => "IfElseActivity1",
        "Properties" => array(),
        "Children" => array(
          array(
            "Type" => "IfElseBranchActivity",
            "Name" => "IfElseBranchActivity1",
            "Properties" => array("FieldCondition" => array("CREATED_BY", "=", 1)),
            "Children" => array(
              array(
                "Type" => "SetFieldActivity",
                "Name" => "SetFieldActivity2",
                "Properties" => array("Field" => "XML_ID", "Value" => "Принят"),
              ),
            ),
          ),
          array(
            "Type" => "IfElseBranchActivity",
            "Name" => "IfElseBranchActivity2",
            "Properties" => array(),
            "Children" => array(
              array(
                "Type" => "ApproveActivity",
                "Name" => "ApproveActivity1",
                "Properties" => array(
                  "Users" => array(1),
                  "ApproveType" => "all",
                  "OverdueDate" => null,
                  "Name" => "Проверьте запись",
                  "Description" => "",
                  "Parameters" => null,
                ),
                "Children" => array(
                  array(
                    "Type" => "SetFieldActivity",
                    "Name" => "SetFieldActivity3",
                    "Properties" => array("Field" => "XML_ID", "Value" => "Принят"),
                  ),
                  array(
                    "Type" => "SetFieldActivity",
                    "Name" => "SetFieldActivity4",
                    "Properties" => array("Field" => "XML_ID", "Value" => "Отклонен"),
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    ),
  ),
)


Бизнес-процесс
167 / 184

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

После завершения бизнес-процесс перестает существовать. Но его статус сохраняется и доступен для использования.

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

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

Бизнес-процессу может быть отправлено событие с помощью методов исполняющей среды. Сообщение отправляется бизнес-процессу по его уникальному коду.

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

Бизнес-процесс может не выполняться постоянно. Например, если в бизнес-процессе встречается действие CBPDelayActivity (реализует ожидание, откладывая выполнение на определенный срок), то бизнес-процесс входит в состояние ожидания, сохраняется в базе данных и удаляется из памяти. По истечении заданного времени бизнес-процесс считывается из базы данных, восстанавливается в памяти и продолжает выполняться с места остановки.

Совет

Чтобы для отладки увидеть все внутренности, например, чтобы понять - какими переменными можно оперировать, можно вставить в интересующее место в схеме php код:

echo "<pre>", print_r( $_REQUEST ), "</pre>";
echo "-----<br />";
echo "<pre>", print_r( $this ), "</pre>";
exit;
Затем запустить бизнес процесс на выполнение. Например, создать новый элемент в инфоблоке или отредактировать. И спокойно сидеть разбираться.


Действия
168 / 184

Все, что происходит в бизнес-процессе — это действия. Сам бизнес-процесс представляет собой составное действие, которое позволяет определять внутри себя дочерние действия. Каждое действие в рамках бизнес-процесса должно иметь уникальное имя.

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

Пример:

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

class CBPMyActivity1
    extends CBPActivity
{
    . . .
}
?>
>

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

В дистрибутиве по умолчанию есть несколько десятков действий (Activity) для создания бизнес-процессов. Тем не менее, иногда возникает потребность в создании собственного действия.

Рассмотрим несколько примеров созданий собственных действий.


Основные стандартные действия
169 / 184
Действие | Описание
CBPActivity | Абстрактный базовый класс всех действий.
CBPCompositeActivity | Абстрактный базовый класс составных действий, т.е. действий, которые могут содержать в себе дочерние действия.
CBPCodeActivity | Запускает на выполнение произвольный PHP-код.
CBPSetVariableActivity | Устанавливает значения переменных бизнес-процесса.
CBPDelayActivity | Реализует ожидание, откладывая выполнение на определенный срок.
CBPHandleExternalEventActivity | Реализует действие, которое ожидает внешнее событие. Бизнес-процесс останавливается до получения данного внешнего события.
CBPEventDrivenActivity | Служит контейнером для действий, выполнение которых происходит по событию.
CBPIfElseActivity | Реализует функционал условия.
CBPIfElseBranchActivity | Реализует функционал ветки условия.
CBPWhileActivity | Реализует функционал цикла.
CBPListenActivity | Реализует ожидание одного из нескольких возможных событий. Когда одно из событий происходит, остальные перестают ожидать событий и отменяются.
CBPParallelActivity | Параллельно запускает набор дочерних действий.
CBPSequenceActivity | Последовательно запускает набор дочерних действий.
CBPSequentialWorkflowActivity | Представляет собой бизнес-процесс, который выполняет действия последовательно (последовательный бизнес-процесс).
CBPSetStateActivity | Устанавливает статус в бизнес-процессе со статусами.
CBPStateActivity | Представляет собой статус в бизнес-процессе со статусами.
CBPStateMachineWorkflowActivity | Представляет собой бизнес-процесс со статусами.

Любое действие наследуется от базового класса действий или одного из его наследников.


Свойства действий
170 / 184

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

Свойства действия описываются в конструкторе класса действия определением массива в члене класса arProperties:

public function __construct($name)
{
    parent::__construct($name);
    $this->arProperties = array("Title" => "", "MyProperty" => "");
}

Ключами в массиве определения свойств являются названия свойств, а значениями – значения по умолчанию.

При выполнении действия свойства доступны как члены класса:

$this->MyProperty

Входные параметры (свойства) бизнес-процесса доступны как свойства корневого действия бизнес-процесса. Любое действие бизнес-процесса может обратиться к входным параметрам бизнес-процесса.

Например, если бизнес-процесс был запущен с помощью кода:

// Код шаблона бизнес-процесса
$workflowTemplateId = 12;

// Бизнес-процесс запускается для документа - элемента инфоблока с кодом 358
$documentId  = array("iblock", "CIBlockDocument", 358);

// Входные параметры бизнес-процесса
$arParameters = array("MyProperty" => "Красный");

$runtime = CBPRuntime::GetRuntime();
$wi = $runtime->CreateWorkflow($workflowTemplateId, $documentId, $arParameters);
$wi->Start();

то в любом действии этого бизнес-процесса значение параметра можно будет получить с помощью кода:

$rootActivity = $this->GetRootActivity();
if ($rootActivity->IsPropertyExists("MyProperty"))
    $val = $rootActivity->MyProperty;
//  $val == "Красный"

Свойства действий описываются разработчиком при написании кода действия. Входящие параметры бизнес-процесса (они же свойства корневого действия бизнес-процесса) описываются пользователем при создании шаблона бизнес-процесса.

Значениями свойств могут быть как константы, так и ссылки на свойства других действий бизнес-процесса при условии, что эти действия выполнились раньше.

Чтобы в момент выполнения бизнес-процесса значением свойства одного действия являлось значение свойства выполненного выше другого действия, необходимо при создании шаблона бизнес-процесса в качестве значения свойства первого действия задать массив вида:

array("название действия, на свойство которого ссылаются", "название свойства")

В случае простых типов данных свойств в качестве значения свойства первого действия можно задать строку вида:

"{=название_действия, название_свойства}"

Чтобы сослаться на входной параметр (свойство) бизнес-процесса, которое доступно как свойство корневого действия бизнес-процесса, следует в качестве названия действия использовать слово Template:

array("Template", "название свойства") "{=Template, название_свойства}"

Вообще в качестве названия действия можно использовать слова:

  • Document – для обращения к произвольному полю документа, над которым запущен бизнес-процесс;
  • Template – для обращения к входному параметру (свойству) бизнес-процесса (корневого действия);
  • Variable – для обращения к переменной бизнес-процесса;
  • User – для получения кода текущего пользователя (в качестве названия свойства должно быть указано " ID ");
  • System – обращение к системным переменным, в настоящее время доступно только свойство Now – текущая дата в формате сайта;
  • любое другое имя – обращение к свойству действия с этим именем.

Например, если во время разработки в качестве значения свойства установить строку:

"Документ [url={=Template:PathTemplate}]{=Document:NAME}[/url] был одобрен"

и при этом рабочий поток запустится с входящим параметром PathTemplate равным file.php над документом с названием План счетов, то при выполнении действия значением свойства будет строка:

"Документ [url=file.php]План счетов[/url] был одобрен"


Составные действия
171 / 184

Составные действия наследуются от абстрактного класса CBPCompositeActivity, который, в свою очередь, наследуется от класса CBPActivity. Класс CBPCompositeActivity обеспечивает поддержку возможности включать внутрь действия дочерние действия. Например, составным действием является стандартное действие CBPParallelActivity (параллельное выполнение), которое содержит в себе дочерние действия, соответствующие веткам параллельного выполнения.

Класс CBPCompositeActivity содержит член arActivities, с помощью которого можно обращаться к дочерним действиям.

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

class CBPMyActivity
    extends CBPCompositeActivity    // наследуем, так как составное действие
    implements IBPEventActivity	// обработка события завершения дочернего //действия
{
    // Исполняемый метод действия
    public function Execute()
    {
        // Возьмем первое дочернее действие
        $activity = $this->arActivities[0];
        // Подпишемся на событие изменения статуса дочернего действия
         //  (завершение)
        $activity->AddStatusChangeHandler(self::ClosedEvent, $this);
        // Отправим дочернее действие исполняющей среде на выполнение
        $this->workflow->ExecuteActivity($activity);
        // Вернем указание исполняющей среде, что действие еще выполняется
        return CBPActivityExecutionStatus::Executing;
    }

    // Обработчик события изменения статуса интерфейса IBPEventActivity
    // Параметром передается действие, изменившее статус
    protected function OnEvent(CBPActivity $sender)
    {
        // Отпишемся от события изменения статуса дочернего действия
         // (завершения)
        $sender->RemoveStatusChangeHandler(self::ClosedEvent, $this);
        // Дочернее действие завершено, выполняем другой необходимый нам код
        // Например завершаем действие
        $this->workflow->CloseActivity($this);
    }
}


Создание собственных действий
172 / 184

Пользовательские действия создаются в папке /bitrix/activities/custom относительно корня сайта. Каждое действие располагается в отдельной папке. Название папки действия должно совпадать с именем класса действия, но без первых символов "CBP". Кроме того имя папки должно быть записано строчными буквами (в нижнем регистре).

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

Файл с описанием действия располагается в папке действия и имеет имя .description.php. В этом файле содержится описание действия, которое необходимо для корректной работы системы. В файле описания действия должен содержаться код типа:

<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arActivityDescription = array(
    "NAME" => GetMessage("MYACTIVITY_DESCR_NAME"),
    "DESCRIPTION" => GetMessage("MYACTIVITY_DESCR_DESCR"),
    "TYPE" => "activity",
    "CLASS" => "MyActivity",
    "JSCLASS" => "BizProcActivity",
    "CATEGORY" => array(
        "ID" => "other",
    ),
);
?>

C версии 17.0.3 модуля Бизнес-процессы появилась возможность при создании своего действия передавать результат его работы в другие действия во время выполнения бизнес-процесса. Для этого нужно в файле описания действия .description.php записать массив вида :

<?
'ADDITIONAL_RESULT' => array('EntityFields')
?>

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

Здесь определен тип действия в элементе TYPE, который имеет два возможных значения: activity для действий и condition для условий. Кроме того, задаются название и описание действия, Java-скриптовый класс для отрисовки в визуальном редакторе, категория и т.п.

В подпапке /lang папки действия располагаются файлы с локализацией фраз действия на различные языки.

Файл с классом действия имеет вид типа:

<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

class CBPMyActivity
    extends CBPActivity
{
    public function __construct($name)
    {
        parent::__construct($name);
        // Определим свойство действия MyText
        // Оно может быть задано в визуальном редакторе при
         // помещении действия в шаблон бизнес-процесса
        $this->arProperties = array("Title" => "", "MyText" => "");
    }

    // Исполняющийся метод действия
    public function Execute()
    {
        // Суть действия – запись значения свойства в файл
        if (strlen($this->MyText) > 0)
        {
            $f = fopen($_SERVER["DOCUMENT_ROOT"]."/dump.txt", "a");
            fwrite($f, $this->MyText);
            fclose($f);
        }

        // Возвратим исполняющей системе указание, что действие завершено
        return CBPActivityExecutionStatus::Closed;
    }

    // Статический метод возвращает HTML-код диалога настройки
// свойств действия в визуальном редакторе. Если действие не имеет
// свойств, то этот метод не нужен
    public static function GetPropertiesDialog($documentType, $activityName,
         $arWorkflowTemplate,$arWorkflowParameters, $arWorkflowVariables,
         $arCurrentValues = null, $formName = "")
    {
        $runtime = CBPRuntime::GetRuntime();

        if (!is_array($arWorkflowParameters))
            $arWorkflowParameters = array();
        if (!is_array($arWorkflowVariables))
            $arWorkflowVariables = array();

        // Если диалог открывается первый раз, то подгружаем значение
     // свойства, которое было сохранено в шаблоне бизнес-процесса
        if (!is_array($arCurrentValues))
        {
            $arCurrentValues = array("my_text" => "");

            $arCurrentActivity= &CBPWorkflowTemplateLoader::FindActivityByName(
                 $arWorkflowTemplate,
                 $activityName
         );
            if (is_array($arCurrentActivity["Properties"]))
                $arCurrentValues["my_text "] =
 $arCurrentActivity["Properties"]["MyText"];
        }

        // Код, формирующий диалог, расположен в отдельном файле
        // properties_dialog.php в папке действия.
        // Возвращаем этот код.
        return $runtime->ExecuteResourceFile(
            __FILE__,
            "properties_dialog.php",
            array(
                "arCurrentValues" => $arCurrentValues,
                "formName" => $formName,
            )
        );
    }

    // Статический метод получает введенные в диалоге настройки свойств
// значения и сохраняет их в шаблоне бизнес-процесса. Если действие не
// имеет свойств, то этот метод не нужен.
    public static function GetPropertiesDialogValues($documentType, $activityName,
        &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables,
          $arCurrentValues, &$arErrors)
    {
        $arErrors = array();

        $runtime = CBPRuntime::GetRuntime();

        if (strlen($arCurrentValues["my_text "]) <= 0)
        {
            $arErrors[] = array(
                "code" => "emptyCode",
                "message" => GetMessage("MYACTIVITY_EMPTY_TEXT"),
            );
            return false;
        }

        $arProperties = array("MyText" => $arCurrentValues["my_text "]);

        $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName(
             $arWorkflowTemplate,
             $activityName
         );
        $arCurrentActivity["Properties"] = $arProperties;

        return true;
    }
}
?>

Код в файле properties_dialog.php, формирующий диалог настройки свойств действия в визуальном редакторе, может выглядеть примерно так:

<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
?>
<tr>
    <td align="right" width="40%"><span style="color:#FF0000;">*</span> :</td>
    <td width="60%">
        <textarea name="my_text" id="id_my_text " rows="5" cols="40"><?= htmlspecialchars($arCurrentValues["my_text"]) ?></textarea>
        <input type="button" value="..." onclick="BPAShowSelector('id_my_text', 'string');">
    </td>
</tr>

Пользователь может ввести в поле my_text явное значение или выбрать одно из значений с помощью диалога, открывающегося по кнопке [image]. Во втором случае пользователь может установить, что значением свойства будет являться значение свойства корневого действия, которое задается как входящий параметр при запуске бизнес-процесса.

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


Пример создания действия Запись в лог
173 / 184

Создадим действие, которое будет писать в лог БП или текстовый файл, произвольные значения из шаблона бизнес-процесса. Пусть имя у действия будет write2logactivity.

Создайте структуру файлов будущего Activity. Папка с Activity должна быть расположена в /bitrix/activities/custom/. Название папки с действием должно совпадать с именем файла, в котором находится класс с Activity, в данном случае папка должна называться /write2logactivity.

Структура в общем виде подобна структуре компонентов:

  • .description.php - описание будущего действия;
  • properties_dialog.php - форма настроек действия;
  • write2logactivity.php – код действия;
  • icon.gif – иконка, которая будет отображать действие в общем списке;
  • /lang/ru – содержит папки с языковыми сообщениями. Папки должны называться в соответствии с идентификаторами языков. Например, ru, en. В каждой папке содержатся файлы с фразами, одноименные соответствующим файлам действия:
    • .description.php - описание языковых сообщений;
    • write2logactivity.php – сами языковые сообщения.

Задайте описание будущего действия в файле .description.php:

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arActivityDescription = array(
    "NAME" => GetMessage("BPDDA_DESCR_NAME"),
    "DESCRIPTION" => GetMessage("BPDDA_DESCR_DESCR"),
    "TYPE" => "activity",  // Тип - действие
    "CLASS" => "Write2LogActivity", //Класс с Activity
    "JSCLASS" => "BizProcActivity",  //Стандартная JS библиотека, которая будет рисовать
Activity    "CATEGORY" => array(
        "ID" => "other", // Activity будет располагаться в категории "Прочее"
    ),
);
?>

В визуальном редакторе получаем иконку своего действия:

Запрограммируйте форму настроек действия в файле properties_dialog.php:

<script>
<?

foreach ($arCurrentValues["MapFields"] as $fieldKey => $documentFieldValue)
{
    ?>
    AddCondition('<?= CUtil::JSEscape($fieldKey) ?>', '<?= CUtil::JSEscape($documentFieldValue) ?>');
    <?
}
if (count($arCurrentValues) <= 0)
{
    ?>AddCondition("", "");<?
}
?>
var check = '<?= $arCurrentValues["write2file"];?>';
if (check == "Y")
{
    document.getElementById("write2file").checked = "checked";
    Write2File();
}
</script>

В результате на экране получим:

Нажмите на рисунок, чтобы увеличить

В зависимости от положения опции Писать файл, вывод мы получим либо в логе БП:

Нажмите на рисунок, чтобы увеличить

либо в файле:

Задайте код собственно действия в файле write2logactivity.php.

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

class CBPWrite2LogActivity
    extends CBPActivity
{
    public function __construct($name)
    {
        parent::__construct($name);
        $this->arProperties = array(
            "Title" => "",
            "MapFields" => null,
                        "write2file" => null,
                        "path2file"=> null
        );
    }

    public function Execute()
    {
            if (is_array($this->arProperties["MapFields"]) && count($this->arProperties["MapFields"]))
            {
                $printVal = $this->__get("MapFields");
                $bFirst = true;

                foreach($printVal as $key => $val)
                {
                    if ($this->arProperties["write2file"] == "Y")
                    {

                        $f = fopen ($_SERVER["DOCUMENT_ROOT"].$this->arProperties["path2file"], "a+");
                        if ($bFirst)
                             fwrite ($f, print_r ("\n\n\n===========================================================\n",true));
                        fwrite ($f, print_r ($key." = ".$val."\n",true));
                        fclose($f);
                        $bFirst = false;
                    }
                    else
                        $this->WriteToTrackingService($key." = ".$val);
                }
            }
            return CBPActivityExecutionStatus::Closed;
    }

    public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "")
    {
            $runtime = CBPRuntime::GetRuntime();

            if (!is_array($arCurrentValues))
            {
                $arCurrentValues = array();

                $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);

                if (is_array($arCurrentActivity["Properties"])
                        && array_key_exists("MapFields", $arCurrentActivity["Properties"])
                        && is_array($arCurrentActivity["Properties"]["MapFields"]))
                {
                    foreach ($arCurrentActivity["Properties"]["MapFields"] as $k => $v)
                    {
                        $arCurrentValues["MapFields"][$k] = $v;
                    }
                    $arCurrentValues["write2file"] = $arCurrentActivity["Properties"]["write2file"];
                    $arCurrentValues["path2file"] = $arCurrentActivity["Properties"]["path2file"];
                }
            }

            $runtime = CBPRuntime::GetRuntime();
            return $runtime->ExecuteResourceFile(
                    __FILE__,
                    "properties_dialog.php",
                    array(
                        "arCurrentValues" => $arCurrentValues,
                        "formName" => $formName,
                        )
                    );
    }

    public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors)
    {
            $runtime = CBPRuntime::GetRuntime();
            $arProperties = array("MapFields" => array());

            if (is_array($arCurrentValues) && count($arCurrentValues)>0)
            {
                if  (is_array($arCurrentValues["fields"]) && count($arCurrentValues["fields"]) > 0
                    && is_array($arCurrentValues["values"]) && count($arCurrentValues["values"]) > 0)
                {
                    foreach($arCurrentValues["fields"] as $key => $value)
                        if (strlen($value) > 0 && strlen($arCurrentValues["values"][$key]) > 0)
                             $arProperties["MapFields"][$value] = $arCurrentValues["values"][$key];
                }
                $arProperties ["write2file"] = $arCurrentValues["write2file"] == "Y" ? "Y" : "N";
                $arProperties ["path2file"] = $arCurrentValues["path2file"];
            }

            $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
            $arCurrentActivity["Properties"] = $arProperties;

            return true;
    }
        public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null)
    {
        $arErrors = array();
                $path = "";
                if ($arTestProperties["path2file"])
                {
                    $path = $_SERVER["DOCUMENT_ROOT"].$arTestProperties["path2file"];
                    if (!file_exists($path) && !is_writable(GetDirPath($path)))
                        $arErrors[] = array("code" => "DirNotWritable", "parameter" => "path2file", "message" => GetMessage("DIR_NOT_WRITABLE"));
                    if (file_exists($path) && !!is_writable(GetDirPath($path)))
                        $arErrors[] = array("code" => "FileNotWritable", "parameter" => "path2file", "message" => GetMessage("FILE_NOT_WRITABLE"));
                }

        return array_merge($arErrors, parent::ValidateProperties($arTestProperties, $user));
    }
}
?
>

Разъясним несколько моментов, на которые надо обратить внимание разработчикам.

  • Зададим заголовок класса и конструктор. В конструкторе определяются параметры действия:
    class CBPWrite2LogActivity
    extends CBPActivity
{
    public function __construct($name)
    {
        parent::__construct($name);
        $this->arProperties = array(
            "Title" => "",
            "MapFields" => null,
            "write2file" => null,
            "path2file"=> null
        );
    }
  • Выводим диалог настройки параметров действия. Если параметры уже были заданы, то они инициализируются:
    public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "")
{
      $runtime = CBPRuntime::GetRuntime();

      if (!is_array($arCurrentValues))
      {
          $arCurrentValues = array();

          $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
...............................
                 }

   $runtime = CBPRuntime::GetRuntime();
   return $runtime->ExecuteResourceFile(
         __FILE__,
         "properties_dialog.php",
         array(
            "arCurrentValues" => $arCurrentValues,
            "formName" => $formName,
         )
    );
}
  • Сохранение настроек, сделанных в диалоге настройки действия:
    public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors)
    {
      $runtime = CBPRuntime::GetRuntime();
      $arProperties = array("MapFields" => array());
//Получили массив значений $arCurrentValues
            if (is_array($arCurrentValues) && count($arCurrentValues)>0)
            {
     ........................
                $arProperties ["write2file"] = $arCurrentValues["write2file"] == "Y" ? "Y" : "N";
                $arProperties ["path2file"] = $arCurrentValues["path2file"];
            }
//Получаем переменные текущего действия по ссылке и заменяем их
            $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
            $arCurrentActivity["Properties"] = $arProperties;

            return true;
}
  • Проверка параметров действия:
    public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null)
    {
        $arErrors = array();
          $path = "";
          if ($arTestProperties["path2file"])
          {
           $path = $_SERVER["DOCUMENT_ROOT"].$arTestProperties["path2file"];
           if (!file_exists($path) && !is_writable(GetDirPath($path)))
            $arErrors[] = array("code" => "DirNotWritable", "parameter" => "path2file", "message" => GetMessage("DIR_NOT_WRITABLE"));
           if (file_exists($path) && !!is_writable(GetDirPath($path)))
            $arErrors[] = array("code" => "FileNotWritable", "parameter" => "path2file", "message" => GetMessage("FILE_NOT_WRITABLE"));
          }

        return array_merge($arErrors, parent::ValidateProperties($arTestProperties, $user));
    }


Пример создания действия Создать задачу
174 / 184

Действие для создания задачи 2.0 (task2activity) создано по алгоритму, описанному выше. Поэтому просто приведем структуру действия и коды файлов. Функционал полностью повторяет стандартное действие для создания задачи.

Структура файлов Activity

  • /task2activity/
    • /lang/
      • /en/
      • /ru/
        • .description.php
        • properties_dialog.php
        • task2activity.php
    • icon.gif
    • .description.php
    • properties_dialog.php
    • task2activity.php

Код файлов

task2activity\.description.php

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arActivityDescription = array(
    "NAME" => GetMessage("BPTA2_DESCR_NAME"),
    "DESCRIPTION" => GetMessage("BPTA2_DESCR_DESCR"),
    "TYPE" => "activity",
    "CLASS" => "Task2Activity",
    "JSCLASS" => "BizProcActivity",
    "CATEGORY" => array(
        "ID" => "interaction",
    ),
);
?>

task2activity\properties_dialog.php

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
?>

<tr>
    <td align="right" width="40%"><span style="color:#FF0000;">* <?= GetMessage("BPTA1A_TASKNAME") ?>:</td>
    <td width="60%">
        <input type="text" name="task_name" id="id_task_name" value="<?= htmlspecialchars($arCurrentValues["task_name"]) ?>" size="50">
        <input type="button" value="..." onclick="BPAShowSelector('id_task_name', 'string');">
    </td>
</tr>
<tr>
    <td align="right" width="40%"><span style="color:#FF0000;">*</span> <?= GetMessage("BPTA1A_TASKCREATEDBY") ?>:</td>
    <td width="60%">
        <input type="text" name="task_created_by" id="id_task_created_by" value="<?= htmlspecialchars($arCurrentValues["task_created_by"]) ?>" size="50">
        <input type="button" value="..." onclick="BPAShowSelector('id_task_created_by', 'user');">
    </td>
</tr>
<tr>
    <td align="right" width="40%"><span style="color:#FF0000;">*</span> <?= GetMessage("BPTA1A_TASKASSIGNEDTO") ?>:</td>
    <td width="60%">
        <input type="text" name="task_assigned_to" id="id_task_assigned_to" value="<?= htmlspecialchars($arCurrentValues["task_assigned_to"]) ?>" size="50">
        <input type="button" value="..." onclick="BPAShowSelector('id_task_assigned_to', 'user');">
    </td>
</tr>
<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_TASKACTIVEFROM") ?>:</td>
    <td width="60%">
        <span style="white-space:nowrap;"><input type="text" name="task_active_from" id="id_task_active_from" size="30" value="<?= htmlspecialchars($arCurrentValues["task_active_from"]) ?>"><?= CAdminCalendar::Calendar("task_active_from", "", "", true) ?></span>
        <input type="button" value="..." onclick="BPAShowSelector('id_task_active_from', 'datetime');">
    </td>
</tr>
<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_TASKACTIVETO") ?>:</td>
    <td width="60%">
        <span style="white-space:nowrap;"><input type="text" name="task_active_to" id="id_task_active_to" size="30" value="<?= htmlspecialchars($arCurrentValues["task_active_to"]) ?>"><?= CAdminCalendar::Calendar("task_active_to", "", "", true) ?></span>
        <input type="button" value="..." onclick="BPAShowSelector('id_task_active_to', 'datetime');">
    </td>
</tr>

<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_TASKDETAILTEXT") ?>:</td>
    <td width="60%">
        <textarea name="task_detail_text" id="id_task_detail_text" rows="7" cols="40"><?= htmlspecialchars($arCurrentValues["task_detail_text"]) ?></textarea>
        <input type="button" value="..." onclick="BPAShowSelector('id_task_detail_text', 'string');">
    </td>
</tr>
<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_TASKPRIORITY") ?>:</td>
    <td width="60%">
        <select name="task_priority">
            <?
            foreach ($arTaskPriority as $key => $value)
            {
                ?><option value="<?= $key ?>"<?= $arCurrentValues["task_priority"] == $key ? " selected" : "" ?>><?= $value ?></option><?
            }
            ?>
        </select>
    </td>
</tr>
<tr>
    <td align="right" width="40%"> <?= GetMessage("BPTA1A_TASKGROUPID") ?>:</td>
    <td width="60%">
        <select name="task_group_id" id="id_task_group_id">
            <?
            foreach ($arGroups as $key => $value)
            {
                ?><option value="<?= $key ?>"<?= $arCurrentValues["task_group_id"] == $key ? " selected" : "" ?>><?= $value ?></option><?
            }
            ?>
        </select>
    </td>
</tr>
<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_CHANGE_DEADLINE") ?>:</td>
    <td width="60%">
        <input type="checkbox" name="task_change_deadline" id="id_task_change_deadline" <?= ($arCurrentValues["task_change_deadline"] == "Y")? "checked":""?>>
    </td>
</tr>
<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_CHECK_RESULT") ?>:</td>
    <td width="60%">
            <input type="checkbox" name="task_check_result" id="id_task_check_result" <?= ($arCurrentValues["task_check_result"] == "Y")? "checked":""?>>
    </td>
</tr>
<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_ADD_TO_REPORT") ?>:</td>
    <td width="60%">
        <input type="checkbox" name="task_report" id="id_task_report" <?= ($arCurrentValues["task_report"] == "Y")? "checked":""?>>
    </td>
</tr>
<tr>
    <td align="right" width="40%"><?= GetMessage("BPTA1A_TASKTRACKERS") ?>:</td>
    <td width="60%">
        <input type="text" name="task_trackers" id="id_task_trackers" value="<?= htmlspecialchars($arCurrentValues["task_trackers"]) ?>" size="50">
        <input type="button" value="..." onclick="BPAShowSelector('id_task_trackers', 'user');">
    </td>
</tr>

task2activity\task2activity.php

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

class CBPTask2Activity
    extends CBPActivity
{
    public function __construct($name)
    {
        parent::__construct($name);
        $this->arProperties = array(
            "Title" => "", //название действия
            "TaskGroupId" => "", //личная или группа
            "TaskOwnerId" => "", //
            "TaskCreatedBy" => "", //автор
            "TaskActiveFrom" => "", //от
            "TaskActiveTo" => "", //до
            "TaskName" => "", //название задачи
            "TaskDetailText" => "", //описание
            "TaskPriority" => "", //приоритет
            "TaskAssignedTo" => "", //ответственный
            "TaskTrackers" => "", //следящие
            "TaskCheckResult" => "", //
            "TaskReport" => "", //
            "TaskChangeDeadline" => "",
        );
    }

    private function __GetUsers($arUsersDraft)
    {

        $arUsers = array();

        $rootActivity = $this->GetRootActivity();
        $documentId = $rootActivity->GetDocumentId();

        $documentService = $this->workflow->GetService("DocumentService");

        $arUsersDraft = (is_array($arUsersDraft) ? $arUsersDraft : array($arUsersDraft));
        $l = strlen("user_");
        foreach ($arUsersDraft as $user)
        {
            if (substr($user, 0, $l) == "user_")
            {
                $user = intval(substr($user, $l));
                if ($user > 0)
                    $arUsers[] = $user;
            }
            else
            {
                $arDSUsers = $documentService->GetUsersFromUserGroup($user, $documentId);
                foreach ($arDSUsers as $v)
                {
                    $user = intval($v);
                    if ($user > 0)
                        $arUsers[] = $user;
                }
            }
        }

        return $arUsers;
    }

    public function Execute()
    {

        if (!CModule::IncludeModule("tasks"))
            return CBPActivityExecutionStatus::Closed;

        $arTaskCreatedBy = $this->__GetUsers($this->TaskCreatedBy);
        $arTaskAssignedTo = $this->__GetUsers($this->TaskAssignedTo);

        if (count($arTaskCreatedBy) <= 0 || count($arTaskAssignedTo) <= 0)
            return CBPActivityExecutionStatus::Closed;

        $arTaskTrackers = $this->__GetUsers($this->TaskTrackers);

                $bFirst = true;
                $ACCOMPLICES = array();
                foreach($arTaskAssignedTo as $respUser)
                {
                    if ($bFirst)
                    {
                        $RESPONSIBLE_ID = $respUser;
                        $bFirst = false;
                    }
                    else
                        $ACCOMPLICES[] = $respUser;
                }

        $arFields = array(
            "MODIFIED_BY" => $arTaskCreatedBy[0],
            "CREATED_BY" => $arTaskCreatedBy[0],
                        "SITE_ID" => SITE_ID,
                        "STATUS" => "1",
            "DATE_CREATE" => date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME)),
            "START_DATE_PLAN" => $this->TaskActiveFrom,
            "END_DATE_PLAN" => $this->TaskActiveTo,
                        "DEADLINE" => $this->TaskActiveTo,
            "TITLE" => $this->TaskName,
            "DESCRIPTION" => $this->TaskDetailText,
            "PRIORITY" => $this->TaskPriority,
            "RESPONSIBLE_ID" => $RESPONSIBLE_ID,
            "AUDITORS" => $arTaskTrackers,
                        "ADD_IN_REPORT" => $this->TaskReport,
                        "TASK_CONTROL" => $this->TaskCheckResult,
                        "ALLOW_CHANGE_DEADLINE" => $this->TaskChangeDeadline,
        );
                if ($this->TaskGroupId && $this->TaskGroupId !== 0)
                      $arFields["GROUP_ID"] = $this->TaskGroupId;

                if (count ($ACCOMPLICES) > 0)
                    $arFields["ACCOMPLICES"] = $ACCOMPLICES;

                $task = new CTasks;
                $result = $task->Add($arFields);

                if ($result)
                    $this->WriteToTrackingService(str_replace("#VAL#", $result, GetMessage("BPSA_TRACK_OK")));

                $arErrors = $task->GetErrors();
                if (count($arErrors) > 0)
                    $this->WriteToTrackingService(GetMessage("BPSA_TRACK_ERROR"));

        return CBPActivityExecutionStatus::Closed;
    }

    public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null)
    {
        $arErrors = array();

        if (!array_key_exists("TaskAssignedTo", $arTestProperties) || count($arTestProperties["TaskAssignedTo"]) <= 0)
            $arErrors[] = array("code" => "NotExist", "parameter" => "TaskAssignedTo", "message" => GetMessage("BPSNMA_EMPTY_TASKASSIGNEDTO"));
        if (!array_key_exists("TaskName", $arTestProperties) || count($arTestProperties["TaskName"]) <= 0)
            $arErrors[] = array("code" => "NotExist", "parameter" => "TaskName", "message" => GetMessage("BPSNMA_EMPTY_TASKNAME"));

        return array_merge($arErrors, parent::ValidateProperties($arTestProperties, $user));
    }

    public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "")
    {
        $runtime = CBPRuntime::GetRuntime();

        if (!CModule::IncludeModule("socialnetwork"))
            return;

        $arMap = array(
            "TaskGroupId" => "task_group_id",
            "TaskOwnerId" => "task_owner_id",
            "TaskCreatedBy" => "task_created_by",
            "TaskActiveFrom" => "task_active_from",
            "TaskActiveTo" => "task_active_to",
            "TaskName" => "task_name",
            "TaskDetailText" => "task_detail_text",
            "TaskPriority" => "task_priority",
            "TaskAssignedTo" => "task_assigned_to",
            "TaskTrackers" => "task_trackers",
                        "TaskCheckResult" => "task_check_result",
                        "TaskReport" => "task_report",
                        "TaskChangeDeadline" => "task_change_deadline",
        );

        if (!is_array($arWorkflowParameters))
            $arWorkflowParameters = array();
        if (!is_array($arWorkflowVariables))
            $arWorkflowVariables = array();

        if (!is_array($arCurrentValues))
        {
            $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
            if (is_array($arCurrentActivity["Properties"]))
            {
                foreach ($arMap as $k => $v)
                {
                    if (array_key_exists($k, $arCurrentActivity["Properties"]))
                    {
                        if ($k == "TaskCreatedBy" || $k == "TaskAssignedTo" || $k == "TaskTrackers")
                            $arCurrentValues[$arMap[$k]] = CBPHelper::UsersArrayToString($arCurrentActivity["Properties"][$k], $arWorkflowTemplate, $documentType);
                                                else
                            $arCurrentValues[$arMap[$k]] = $arCurrentActivity["Properties"][$k];
                    }
                                        elseif ($k == "TaskPriority")
                                        {
                                            $arCurrentValues[$arMap[$k]] = "1";
                                        }
                    else
                    {
                                            $arCurrentValues[$arMap[$k]] = "";
                    }
                }
            }
            else
            {
                foreach ($arMap as $k => $v)
                    $arCurrentValues[$arMap[$k]] = "";
            }

        }

                $arGroups = array(GetMessage("TASK_EMPTY_GROUP"));
        $db = CSocNetGroup::GetList(array("NAME" => "ASC"), array("ACTIVE" => "Y"), false, false, array("ID", "NAME"));
        while ($ar = $db->GetNext())
            $arGroups[$ar["ID"]] = "[".$ar["ID"]."]".$ar["NAME"];

        $arTaskPriority = array(0, 1, 2);
        foreach($arTaskPriority as $k => $v)
            $arTaskPriority[$v] = GetMessage("TASK_PRIORITY_".$v);

        return $runtime->ExecuteResourceFile(
            __FILE__,
            "properties_dialog.php",
            array(
                "arCurrentValues" => $arCurrentValues,
                "formName" => $formName,
                "arGroups" => $arGroups,
                "arTaskPriority" => $arTaskPriority,
            )
        );
    }

    public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors)
    {
        $arErrors = array();

        $runtime = CBPRuntime::GetRuntime();

        $arMap = array(
            "task_group_id" => "TaskGroupId",
            "task_owner_id" => "TaskOwnerId",
            "task_created_by" => "TaskCreatedBy",
            "task_active_from" => "TaskActiveFrom",
            "task_active_to" => "TaskActiveTo",
            "task_name" => "TaskName",
            "task_detail_text" => "TaskDetailText",
            "task_priority" => "TaskPriority",
            "task_assigned_to" => "TaskAssignedTo",
            "task_trackers" => "TaskTrackers",
            "task_forum_id" => "TaskForumId",
                        "task_check_result" => "TaskCheckResult",
                        "task_report" => "TaskReport",
                        "task_change_deadline" => "TaskChangeDeadline",
        );

        $arProperties = array();
        foreach ($arMap as $key => $value)
        {
            if ($key == "task_created_by" || $key == "task_assigned_to" || $key == "task_trackers")
                continue;
            $arProperties[$value] = $arCurrentValues[$key];
        }

        $arProperties["TaskCreatedBy"] = CBPHelper::UsersStringToArray($arCurrentValues["task_created_by"], $documentType, $arErrors);
        if (count($arErrors) > 0)
            return false;

        $arProperties["TaskAssignedTo"] = CBPHelper::UsersStringToArray($arCurrentValues["task_assigned_to"], $documentType, $arErrors);
        if (count($arErrors) > 0)
            return false;

        $arProperties["TaskTrackers"] = CBPHelper::UsersStringToArray($arCurrentValues["task_trackers"], $documentType, $arErrors);
        if (count($arErrors) > 0)
            return false;

        $arErrors = self::ValidateProperties($arProperties, new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser));
        if (count($arErrors) > 0)
            return false;

        $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
        $arCurrentActivity["Properties"] = $arProperties;

        return true;
    }
}
?>

task2activity\lang\ru\.description.php

<?
$MESS ['BPTA2_DESCR_DESCR'] = "Добавление задачи 2.0";
$MESS ['BPTA2_DESCR_NAME'] = "Задача 2.0";
?>

task2activity\lang\ru\properties_dialog.php

<?
$MESS ['BPTA1A_TASKGROUPID'] = "Группа соц. сети";
$MESS ['BPTA1A_TASKCREATEDBY'] = "Задача создается от имени";
$MESS ['BPTA1A_TASKASSIGNEDTO'] = "Ответственный";
$MESS ['BPTA1A_TASKACTIVEFROM'] = "Начало";
$MESS ['BPTA1A_TASKACTIVETO'] = "Окончание";
$MESS ['BPTA1A_TASKNAME'] = "Название задачи";
$MESS ['BPTA1A_TASKDETAILTEXT'] = "Описание задачи";
$MESS ['BPTA1A_TASKTRACKERS'] = "Следящие";
$MESS ['BPTA1A_TASKPRIORITY'] = "Важность";
$MESS ['BPTA1A_TASKFORUM'] = "Форум для комментариев";
$MESS ['BPTA1A_ADD_TO_REPORT'] = "Проконтролировать результат выполнения";
$MESS ['BPTA1A_CHECK_RESULT'] = "Включить задачу в отчет по эффективности";
$MESS ['BPTA1A_CHANGE_DEADLINE'] = "Разрешить ответственному менять сроки";
?>

task2activity\lang\ru\task2activity.php

<?
$MESS ['BPSNMA_EMPTY_TASKASSIGNEDTO'] = "Свойство 'Ответственный' не указано.";
$MESS ['BPSNMA_EMPTY_TASKNAME'] = "Свойство 'Название задачи' не указано.";
$MESS ['TASK_PRIORITY_0'] = "Низкая";
$MESS ['TASK_PRIORITY_1'] = "Средняя";
$MESS ['TASK_PRIORITY_2'] = "Высокая";
$MESS ['TASK_EMPTY_GROUP'] = "Персональная задача";
$MESS ['BPSA_TRACK_OK'] = "Создана задача с ID ##VAL#";
$MESS ['BPSA_TRACK_ERROR'] = "При создании задачи произошла ошибка.";
?>


Выполнение "задания" бизнес-процесса, используя API
175 / 184

Некоторые действия могут приостанавливать выполнение бизнес-процесса и ожидать реакции от пользователя.

Для таких действий существует возможность выполнять задания вместо пользователя через АПИ, для этого необходимо отправить внешнее событие рабочему потоку следующим образом:

CBPDocument::SendExternalEvent($workflowId, $activityName, $arEventParameters);

где:

  • $workflowId - идентификатор экземпляра бизнес-процесса;
  • $activityName - название действия, ожидающего внешнего события;
  • $arEventParameters - массив параметров, необходимых для конкретного действия.

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

Пример для действия "Утверждение документа":

CBPDocument::SendExternalEvent("5046fe0fbf1888.64722245","Approve1" ,array("USER_ID"=>1,"APPROVE"=>true));

где:

  • "5046fe0fbf1888.64722245" - идентификатор экземпляра бизнес-процесса;
  • "Approve1" - название действия согласования;
  • "USER_ID"=>1 - идентификатор согласующего пользователя;
  • "APPROVE"=>true - результат согласования (в случае отклонения - false).


Использование REST в бизнес-процессах
176 / 184

Чтобы приложение Битрикс24 могло зарегистрировать действие в дизайнере бизнес-процессов, при загрузке нужно указать ему разрешение на работу с ними.

В это разрешение входят следующие методы:

  • bizproc.activity.add
  • bizproc.activity.delete
  • bizproc.activity.list
  • bizproc.activity.log
  • bizproc.event.send

Приложение при помощи метода bizproc.activity.add регистрирует свое действие бизнес-процесса, которое будет отображаться во вкладке дизайнера Действия приложений. При этом для действия необходимо задать:

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

var params = {
   'CODE': 'md5',
   'HANDLER': 'http://sigurd.office.bitrix.ru/bp/ping.php',
   'AUTH_USER_ID': 1,
   'USE_SUBSCRIPTION': 'Y',
   'NAME': {
      'ru': 'MD5 генератор',
      'en': 'MD5 generator'
   },
   'DESCRIPTION': {
      'ru': 'Действие возвращает MD5 хеш от входящего параметра',
      'en': 'Activity returns MD5 hash of input parameter'
   },
   'PROPERTIES': {
      'inputString': {
         'Name': {
            'ru': 'Входящая строка',
            'en': 'Input string'
         },
         'Description': {
            'ru': 'Введите строку, которую вы хотите хешировать',
            'en': 'Input string for hashing'
         },
         'Type': 'string',
         'Required': 'Y',
         'Multiple': 'N',
         'Default': '{=Document:NAME}',
      }
   },
   'RETURN_PROPERTIES': {
      'outputString': {
         'Name': {
            'ru': 'MD5',
            'en': 'MD5'
         },
         'Type': 'string',
         'Multiple': 'N',
         'Default': null
      }
   }
};

BX24.callMethod(
   'bizproc.activity.add',
   params,
   function(result)
   {
      if(result.error())
         alert("Error: " + result.error());
      else
         alert("Успешно: " + result.data());
   }
);

Результат:

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

Пример входных данных:

array(
  'workflow_id' => '55c1dc1c3f0d75.78875596',
  'event_token' => '55c1dc1c3f0d75.78875596|A51601_82584_96831_81132|hsyUws1j4XiwqPqN45eH66CcQtEvpUIP.47dd5d888e8e549d2c984713e12a4268e6e87d0208ca1f093ba1075e77f92e90'
  'code' => 'md5',
  'properties' => array(
    'inputString' => 'Тестовый текст: Тест событий для поста в ЖЛ',
  ),
  'auth' => array(
    'access_token' => '2irn0939uscuk7xxacc8tgn7vyjs4xn3',
    'expires_in' => '3600',
    'scope' => 'bizproc,user',
    'user_id' => '1',
    'status' => 'L',
    'member_id' => 'd41d8cd98f00b204e9800998ecf8427e',
    'domain' => 'b24.sigurd.bx',
  ),
  'ts' => '1442580723',
)

Затем бизнес-процесс либо продолжается, либо останавливается и ждет ответа от приложения. Это зависит от настроек действия.

Приложение должно сообщить бизнес-процессу результат своей работы и дать сигнал, что можно продолжать бизнес-процесс дальше. Делается это при помощи метода bizproc.event.send, которому передаются значения выходных параметров, заданных в описании действия, а также, информация для записи в лог бизнес-процесса. Пока приложение не сообщило ответ на свое действие, оно может записывать информацию в лог процесса при помощи метода bizproc.activity.log.

В следующем примере содержится код простейшего обработчика, возвращающего бизнес-процессу md5 от полученной строки:

<?php
file_put_contents(dirname(__FILE__)."/db/log.log", date('c').": ".var_export($_REQUEST, 1)."\n", FILE_APPEND);

if(is_array($_REQUEST["auth"]) && isset($_REQUEST["auth"]["access_token"]))
{
   $portal = $_REQUEST["auth"]["domain"];

   $requestValue = $_REQUEST["properties"]["inputString"];
   $responseValue = md5($requestValue);

   $c = curl_init("http://" . $portal . "/rest/bizproc.event.send.json");

   $params = array(
      "auth" => $_REQUEST["auth"]["access_token"],
      "event_token" => $_REQUEST["event_token"],
      "log_message" => "Got '".$requestValue."' string!",
      "return_values" => array(
         "outputString" => $responseValue,
      )
   );

   curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($c, CURLOPT_HEADER, true);
   curl_setopt($c, CURLINFO_HEADER_OUT, true);
   curl_setopt($c, CURLOPT_VERBOSE, true);
   curl_setopt($c, CURLOPT_POST, true);
   curl_setopt($c, CURLOPT_POSTFIELDS, http_build_query($params));

   $response = curl_exec($c);

   file_put_contents(dirname(__FILE__)."/db/log.log", "response: ".$response."\n", FILE_APPEND);
}

В самом процессе это выглядит следующим образом:

Внимание! При удалении и при обновлении приложения все действия, связанные с приложением, удаляются!


Пример использования REST в процессах
177 / 184

Задание: Необходимо поставить задачу юристу организации проверить данные контрагента. Задача должна содержать чек-лист со списком проверяемых данных. Если юрист утверждает какие-либо данные, то он вычеркивает этот пункт чек-листа. В противном случае - пункт остается незакрытым. После завершения задачи принимается решение относительно одобрения данного контрагента.

Стандартное действие Задача не позволяет нам работать с чек-листами. Однако, используя rest-методы работы с задачами, это сделать можно. К тому же в данном примере работа будет вестись не через задания бизнес-процессов, а саму задачу, что так же нельзя реализовать, используя штатное действие.

С помощью метода task.item.add задача будет создаваться. Чек-лист для задачи будет создан методом task.checklistitem.add. Этот чек-лист юристу и нужно будет выполнить.

if (!empty($_REQUEST['workflow_id']))
{
    if (empty($_REQUEST['auth']))
        die;

    $taskId = (int) callB24Method($_REQUEST['auth'], 'task.item.add', array(
        'TASKDATA' => array(
            'TITLE' => $_REQUEST['properties']['taskName'],
            'DESCRIPTION' => $_REQUEST['properties']['taskDescription'],
            'CREATED_BY' => str_replace('user_', '', $_REQUEST['properties']['taskCreator']),
            'RESPONSIBLE_ID' => str_replace('user_', '', $_REQUEST['properties']['taskUser'])
        )
    ));

    $ar = array();
    foreach ($_REQUEST['properties']['checkList'] as $i => $checklist)
    {
        $ar[] = 'task.checklistitem.add?'.http_build_query(array(
            'TASKID' => $taskId,
            'FIELDS' => array(
                'TITLE' => $checklist,
                'IS_COMPLETE' => 'N',
                'SORT_INDEX' => 10*($i+1)
            )
        ));
    }
    callB24Method($_REQUEST['auth'], 'batch', array('cmd' => $ar));

    $PDO->exec('INSERT INTO bp_events (WORKFLOW_ID, TASK_ID, EVENT_DATA) VALUES('
        .$PDO->quote($_REQUEST['workflow_id']).','.$taskId.' ,'.$PDO->quote(serialize($_REQUEST)).')');
    die;
}

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

BX24.callBind('OnTaskUpdate', '<?=ВР_APP_HANDLER?>');

Задание будет выполнено, только если задача будет закрыта, поэтому другие изменения задачи будут игнорироваться. Как только задача будет закрыта, действие будет анализировать чек-лист. Если все пункты чек-листа выполнены, то принимается решение об одобрении контрагента. Если хотя бы один пункт не закрыт, то контрагент одобрен не будет.

if (!empty($_REQUEST['data']['FIELDS_BEFORE']['ID']))
{
    if (empty($_REQUEST['auth']))
        die;

    $taskId = (int) $_REQUEST['data']['FIELDS_BEFORE']['ID'];

    $workflowData = $PDO->query('SELECT * FROM bp_events WHERE TASK_ID = '.$taskId.' LIMIT 1')->fetch(PDO::FETCH_ASSOC);
    if (!$workflowData)
        die;

    $taskData = callB24Method($_REQUEST['auth'], 'task.item.getdata', array(
        'TASKID' => $taskId
    ));

    if ($taskData['REAL_STATUS'] != 5)
        die;

    $checklistData = callB24Method($_REQUEST['auth'], 'task.checklistitem.getlist', array(
        'TASKID' => $taskId
    ));

    $checkStatus = 'Y';

    foreach ($checklistData as $item)
    {
        if ($item['IS_COMPLETE'] == 'N')
        {
            $checkStatus = 'N';
            break;
        }
    }

    $workflowEvent = unserialize($workflowData['EVENT_DATA']);

    callB24Method($_REQUEST['auth'], 'bizproc.event.send', array(
        "EVENT_TOKEN" => $workflowEvent["event_token"],
        "RETURN_VALUES" => array(
            'checkStatus' => $checkStatus
        ),
        'LOG_MESSAGE' => 'Проверка завершена. Результат: '.($checkStatus=='Y'? 'одобрено' : 'отклонено')
    ));

    $PDO->query('DELETE FROM bp_events WHERE ID = '.$workflowData['ID']);
    die;
}

Установка и применение

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

После установки действие отобразится в дизайнере бизнес-процессов в разделе Действия приложений и его можно будет размещать в шаблонах.

В настройках действия отобразятся созданные нами поля.

После того, как процесс будет запущен действие создаст задачу с заданным чек-листом.

Когда юрист завершит выполнение задачи, в логе бизнес-процесса будет отображено решение относительно одобрения контрагента.

Полностью ознакомиться с действием можно здесь.


Произвольный PHP код в бизнес-процессе
178 / 184

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

Примечание! Для облачной версии Битрикс24 возможно создание собственных действий через REST.

Перед тем как рассмотреть примеры дадим несколько общих советов по созданию кода:

  • Код будет выполняться в своем пространстве, то есть нужно учитывать, что модули заранее не подключались. Поэтому нужно вызывать стандартное API Bitrix Framework.
  • Символы <??> вносить не нужно.
  • Внимательно следите за типами переменных - приведение типа переменных организуйте в обязательном порядке (в некоторых примерах главы это пропущено для упрощения восприятия).

Рассмотрим примеры использования кода в рамках действия PHP код.


Как запустить из одного бизнес процесса другой?
179 / 184

Среди стандартных действий бизнес-процессов нет специального действия, которое непосредственно запустило бы выполнение другого бизнес-процесса. Поэтому необходимо воспользоваться универсальным действием выполнения PHP кода и API модуля бизнес-процессов. Рассмотрим пример решения данной задачи на основе запуска бизнес-процесса Двухэтапное утверждение из стандартных шаблонов. Для этого необходимо:

  • В визуальном конструкторе добавить в шаблон запускающего бизнес-процесса действие PHP код (находится в разделе Прочее). Это действие позволяет выполнить произвольный PHP код.

    Внимание! Для использования данного действия вы должны быть наделены правами администратора.

  • Откройте диалог настроек параметров действия с помощью иконки [image] и введите код:
    CBPDocument::StartWorkflow(
      6,
      array("bizproc","CIBlockDocument",{=Document:ID}),
      array("Voters"=>array("user_1")),
      $arErrors
);

    Где:

    • Первый параметр - это ID запускаемого шаблона бизнес процесса. В нашем случае это 6, что соответствует Двухэтапному утверждению.

      Примечание: ID одних и тех же бизнес процессов могут отличаться для разных установок продукта. Всегда внимательно проверяйте данный параметр.

    • Второй параметр - это код документа, для которого создается бизнес-процесс. Он задается в виде массива, элементами которого являются соответственно название модуля, класс документа и код документа в модуле.

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

    • Третий параметр - это массив входных параметров запускаемого бизнес-процесса. Его состав зависит от бизнес-процесса. В нашем случае, это тот пользователь, которого необходимо ознакомить с документом. В примере, это администратор сайта.

      Примечание: если передается значение множественного параметра, то оно должно передаваться в виде массива.

    • В четвертом параметре по ссылке передается переменная, в которой будут возвращены ошибки запуска бизнес-процесса. Этот параметр можно проигнорировать, если обработка ошибок не важна.

Пример вызова бизнес-процесса для CRM

$workflowTemplateId=32;
$wfId = CBPDocument::StartWorkflow(
$workflowTemplateId,
array("crm","CCrmDocumentLead","LEAD_".intval($id)),
array(),
$arErrors
);


Вывод в лог
180 / 184

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

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

Есть два варианта решения: просто вывод в лог из действия PHP код или создание собственного действия Запись в лог. Рассмотрим оба варианта.

PHP код

Допустим, что при создании бизнес-процесса пользователь вводит текст какой-то заявки, который сохраняется в переменной Text. Чтобы вывести в лог значение этой переменной нужно просто в действии PHP код добавить вызов:

$rootActivity = $this->GetRootActivity();
$this->WriteToTrackingService($rootActivity->GetVariable("Text"));

Или же просто вывести тестовое сообщение:
$this->WriteToTrackingService("Это тест");

Создание действия

Создайте недостающие папки относительно корня сайта:

  • bitrix\activities\custom
  • bitrix\activities\custom\logactivity
  • bitrix\activities\custom\logactivity\lang\ru

В папке /logactivity/ создайте файлы:

  • logactivity.php

    <?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

class CBPLogActivity
   extends CBPActivity
{
   public function __construct($name)
   {
      parent::__construct($name);
      $this->arProperties = array(
         "Title" => "",
      );
   }

   public function Execute()
   {
      $rootActivity = $this->GetRootActivity();
      $this->WriteToTrackingService($rootActivity->GetVariable("Text"));

      return CBPActivityExecutionStatus::Closed;
   }

}
?>

  • .description.php

    <?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arActivityDescription = array(
   "NAME" => GetMessage("BPMA_DESCR_NAME"),
   "DESCRIPTION" => GetMessage("BPMA_DESCR_DESCR"),
   "TYPE" => "activity",
   "CLASS" => "LogActivity",
   "JSCLASS" => "BizProcActivity",
   "CATEGORY" => array(
      "ID" => "other",
   ),
);
?>

Создайте файл logactivity\lang\ru\.description.php:

<?
$MESS ['BPMA_DESCR_NAME'] = "Запись в лог";
$MESS ['BPMA_DESCR_DESCR'] = "Запись сообщения в лог";
?>

Теперь в дизайнере бизнес-процесов появилось новое действие Запись в лог в разделе Прочее и действие просто записывает в лог значение переменной Text.


Вывод в лог. Переменные
181 / 184

Рассмотрим примеры как вывести в лог некоторые переменные с помошью PHP-кода.

Переменная типа Список

Допустим, что используется переменная в бизнес-процессе DB типа Список следующего содержания:

[База данных 1]DB1
[База данных 2]DB2
[База данных 3]DB3

И необходимо вывести в лог значение этой переменной (при этом она может принимать множественные значения). Вывод нужно сделать перебором значений:

$rootActivity = $this->GetRootActivity();
$list = $rootActivity->GetVariable("DB");
foreach ($list as $k => $v)
{
   $str = $str." ".$v;
}
$this->WriteToTrackingService("Выбраны следующие БД: ".$str);

Переменная типа Привязка к пользователю

Допустим, что используется переменная Manager, которая имеет тип Привязка к пользователю и представляет собой строку типа user_145, где число – это ID пользователя. Выведем ее значение в виде фамилии и имени.

$str = $rootActivity->GetVariable("Manager");
$str = str_replace("user_", "", $str);
$buf = CUser::GetByID(intval($str))->Fetch();
$this->WriteToTrackingService(" Руководитель:".$buf['NAME']." [".$buf['ID']."]");


Арифметические действия в бизнес-процессе
182 / 184

Необходимость сложить две переменные бизнес-процесса в ходе выполнения его контекста может быть востребована когда вы анализируете расходы/доходы. Например: как пересчитать стоимость работы программиста.

Задайте параметры и переменные в шаблоне бизнес-процесса:

  • параметр бизнес-процесса: {=Template:integrator_USD} - стоимость работы программиста в долларах;
  • переменная бизнес процесса {=Variable:kurs_usd} - курс валюты для пересчета.

В действии PHP код используйте следующий код:

// получить текущий бизнес-процесс
$rootActivity = $this->GetRootActivity();
// получить значение переменной бизнес-процесса {=Variable:kurs_usd}
$kursUSD = $rootActivity->GetVariable("kurs_usd");
// получить значение параметра бизнес-процесса {=Template:integrator_USD}
$integrator = $rootActivity->integrator_USD;
// пересчет валюты
$integrator = $integrator*$kursUSD;
// установка значения параметра бизнес-процесса {=Template:integrator_USD}
$rootActivity->integrator_USD = $integrator;
// установка значения переменной бизнес-процесса {=Template:ttl}
// Вы можете не только считать, но и делать что хотите с переменными и параметрами бизнес-процесса
$rootActivity->SetVariable("ttl",
   'Минимально возможная цена:'.number_format($min_ttl,0,',',' ')." руб\n".
   'Прибыль от минимальной цены:'.number_format($min_ttl_plus,0,',',' ')." руб\n".
   'Налог:'.number_format($min_ttl*$nalog,0,',',' ')." руб\n\n".
   'Средняя цена:'.number_format($ttl,0,',',' ')." руб\n".
   'Прибыль от средней цены:'.number_format($ttl_plus,0,',',' ')." руб\n".
   'Налог:'.number_format($ttl*$nalog,0,',',' ')." руб\n"
);

Примечание: Если в процессе используются константы, то алгоритм работы будет другой. Запись констант из бизнес-процесса не предусмотрена, поэтому и методов записи нет. Чтобы получить значения константы нужно использовать следующую строку кода:

$rootActivity->GetConstant($fieldName);


Вычисление ID начальника
183 / 184

Чтобы вычислить начальника автора документа с помощью действия PHP-код (т.е. без использования действия выбора пользователя), можно использовать приведенный ниже код.

В этом коде переменная $num отвечает за уровень начальника (1 - непосредственный начальник, 2 - начальник начальника,...). ID начальника в формате БП (т.е. вида user_X) записывается в переменную с именем var5. Эта переменная должна быть создана в параметрах БП и должна иметь тип привязки к пользователю.

$num = 1;
$userId = substr("{=Document:CREATED_BY}", 5);
$userId = intval($userId);
if ($userId > 0)
{
 CModule::IncludeModule("intranet");
 $dbUser = CUser::GetList(($by="id"), ($order="asc"), array("ID_EQUAL_EXACT"=>$userId), array("SELECT" => array("UF_*")));
 $arUser = $dbUser->GetNext();
 $i = 0;
 while ($i < $num)
 {
  $i++;
  $arManagers = CIntranetUtils::GetDepartmentManager($arUser["UF_DEPARTMENT"], $arUser["ID"], true);
  foreach ($arManagers as $key => $value)
  {
   $arUser = $value;
   break;
  }
 }
 $rootActivity = $this->GetRootActivity();
 $rootActivity->SetVariable("var5", "user_".$arUser["ID"]);
}

Примечание: в $arUser = $dbUser->GetNext(); можно использовать вместо метода GetNext метод Fetch. Будет работать быстрее.


Получение списка пользователей
184 / 184

Задание: необходимо отправить сообщение руководителям всех проектов, которые были выбраны при запуске бизнес-процесса.

Основной сложностью является получение списка руководителей для последующей отправки им сообщения или постановки задач. Для того, чтобы это сделать можно воспользоваться несколькими штатными действиями, но это может значительно усложнить бизнес-процесс. С помощью действия PHP-код можно заменить целую группу действий одним. Рассмотрим, как это сделать.

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

Перечислим все проекты в поле Варианты значений, обязательно указав их идентификаторы в квадратных скобках - их мы будем использовать в коде.

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

Отдельную переменную заведем для списка руководителей, которым будут отправлены сообщения.

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

Теперь остается поместить код в действие PHP-код.

PHP-код действия

$rootActivity = $this->GetRootActivity();
$projects = $rootActivity->Parameter1;

$bosses = array();

if (is_array($projects))
{
    foreach ($projects as $project)
    {
        $b = $rootActivity->GetVariable(“b”.$project);
        if (!is_array($b))
            $b = array($b);
        foreach ($b as $b1)
        {
            if (!in_array($b1, $bosses))
                $bosses[] = $b1;
        }
    }
}

$rootActivity->SetVariable('bbb', $bosses);

Как будет работать данное действие:

  1. В переменную $projects записывается список идентификаторов проектов, которые были выбраны при запуске БП (параметр Parameter1 бизнес-процесса).
  2. Затем в цикле для каждого выбранного проекта мы получаем значение переменной, соответствующей руководителю проекта.
  3. Все руководители записываются в переменную bbb.

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


Бизнес-процессы
0 / 184

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

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

Для прохождения курса рекомендуется предварительно изучить следующие курсы:

  • Контент-менеджер / Пользователь корпоративного портала;
  • Администратор. Базовый / Администратор "1С-Битрикс: Корпоративный портал".

В результате прохождения курса можно приобрести следующие навыки:

  • работа с бизнес-процессам на уровне пользователя;
  • настройка системы для корректной работы бизнес-процессов;
  • проектирование и построение собственных бизнес-процессов;
  • разработка собственных действий и создание более сложных процессов.

На каждой странице курса авторизованный на сайте посетитель может дать комментарий к содержимому страницы. Комментарий - не форум, там не ведётся обсуждений или разъяснений. Это инструмент для сообщений нам об ошибках, неточностях. Для отправки комментария воспользуйтесь расположенной в правом нижнем углу окна браузера кнопкой:

Смотрите также:

  • Пользовательская документация по модулю "Бизнес-процессы"
  • API документация по модулю "Бизнес-процессы"

Скачать материалы курса в формате CHM. Файлы формата CHM обновляются ежемесячно, тем не менее, возможно некоторое отставание их от онлайновой версии курса.

Если не видно содержание файла CHM
Внимание! Если вы не видите содержимое файла формата .chm, то причина - настройки безопасности операционной системы: скачанные из интернета файлы находятся под наблюдением системы, которая ограничивает доступ к ним.

Чтобы отключить подобное отношение к файлу необходимо:

  • перейти в свойства файла на вкладку Общие. Внизу у Вас отобразится сообщение о том, что этот файл был заблокирован системой с целью защиты компьютера.

  • нажать кнопку Разблокировать.

Отсутствие кнопки Разблокировать возможно в двух случаях:

  1. Файл лежит не локально, а на сетевом ресурсе.
  2. Если файл лежит на локальном диске, но путь к нему содержит спецсимволы (# и прочие).