Использование универсальных списков в коробочном Битрикс24 — удобный способ расширить функционал системы не прибегая к изменению кода, а в облачном Битрикс24 почти единственный способ расширить функционал системы. В ряде случаев такой подход предпочтительней, так как он проще значительно быстрее реализуется, а значит стоит дешевле для компании Заказчика. В этой статье мы подробно расскажем о бизнес-процессе с использование универсальных списков для распределения лидов по ответственным.
У нашего клиента довольно много заявок, которые он получаем круглосуточно. Менеджеры работают в 2 смены.
Ключевой бизнес-задачей клиента было автоматически распределять лиды на активных менеджеров, учитывая их загрузку. Опытным путем было определено, что менеджер может эффективно работать не более чем с 20-ю заявками одновременно. При большей загруженности заявки обрабатываются не оперативно, а не оперативно обработанная – это зачастую потерянная заявка. Исходя из этого, ночные заявки должны распределяться на активных менеджеров только после того, как распределены утренние заявки.
Стандартных инструментов для решения этой задачи в Битрикс24 не существует.
В который раз, к нам на помощь пришел незаменимый инструмент, присутствующий, в старших тарифах Битрикс24 – универсальные списки, с входящими в него бизнес-процессами. При помощи этого инструмента мы решали уже множество нестандартных задач, о чем у нас есть отдельные статьи.
В данном случае, в дополнение к универсальным спискам, мы используем инструмент «рабочий день». Данный инструмент доступен в тарифах Компания и коробочном Битрикс24, он позволяет отслеживать тех сотрудников, кто начал рабочий день и распределять заявки именно на активных менеджеров.
В данном случае мы создали универсальный список, который хранил в себе следующую информацию:
- Сотрудника
- Количестве активных заявок, распределенных за сотрудником
- Список заявок, распределенных за сотрудником
- Смену в которую работает сотрудник
При создании нового лида, бизнес процесс в первую очередь определяет рабочее время. Если время не рабочее, в нашем случае это с 22 до 9, то бизнес процесс откладывает распределение заявки до 10 утра следующего дня и назначает ответственных технического пользователя «Нераспределенный лид».
Если время рабочее, то бизнес процесс определяет смены для распределения лида:
- 1-я смена с 9 до 12 – заявки распределяются равномерно между активными менеджерами только 1-й смены, у которых на данный момент не более 20-ти активных заявок
- 1-я и 2-я смены с 12 до 18 – заявки распределяются равномерно между всеми активными менеджерам, у которых на данный момент не более 20-ти активных заявок
- 1-я и 2-я смены с 12 до 18 – заявки распределяются равномерно между всеми активными менеджерам, у которых на данный момент не более 20-ти активных заявок
- 2-я смена с 18 до 21 – заявки распределяются равномерно между менеджерами только 2-й смены, у которых на данный момент не более 20-ти активных заявок
Процесс распределения выглядит так:
Бизнес-процесс обращается ко всем сотрудникам, которые указаны в списке, выбирает список сотрудников, которые относятся к текущей смене и у которых не более 20-ти заявок, потом через инструмент «Выбор сотрудника» случайным образом выбирает одного из сотрудников, у которых начат рабочий день.
Если свободных сотрудников не нашлось, то бизнес-процесс становится на паузу и через 1 час заново пробует найти сотрудника и выбрать ответственного для заявки, и так до тех пор, пока ответственный не будет назначен.
После того, как сотрудник выбран, бизнес-процесс передает данные о заявке в список. В списке у выбранного сотрудника добавляется +1 к его заявкам.
Чтобы процесс работал корректно, в списке должны храниться только данные об активных заявках, т.е. нужно как-то убирать данные из списка об отработанных заявках. Для этого на определенной стадии или при любом другом условии запускается бизнес-процесс и удаляет данные про отработанную заявку из списка.
Таким образом список является отличным регулятором занятости сотрудников, а благодаря своей наглядности он также выступает в роли отчета
Источник: integrator.digital
Получаем список бизнес-процессов в коробке Битрикс24
В этой небольшой статье я расскажу, как получить список бизнес-процессов из ленты с помощью API Битрикс. Некоторое время назад мне было нужно проанализировать возможность получения данных из определенного бизнес-процесса для последующей работы с ними.
Я решил получить данные и вывести их в табличном виде на страницу портала.
Свой анализ я проводил на копии бизнес-процесса «Заявление на отпуск», шаблон которого был предварительно изменен для нужд клиента. Как известно, часть данных бизнес-процессов из ленты хранится в определенных инфоблоках. Например, инфоблок бизнес процесса, который я взял для анализа имеет ID=75 . Он будет встречаться далее в примерах кода. Сейчас я просто обращаю на это внимание. Тип инфоблоков так и называется — «Процессы» ( bitrix_processes ).
Какие же данные о бизнес-процессе мы может получить из информационного блока? Вот небольшой список:
- Идентификатор (ID)
- Название (NAME)
- Дата начала (DATE_CREATE)
- Комментарий (PREVIEW_TEXT)
- Дата начала (PROPERTY_PROPERTY_FROM)
- Дата окончания (PROPERTY_PROPERTY_TO)
- Утвержден (PROPERTY_IS_APPROVED)
Если судить по названиям, то видно, что для хранения информации задействованы не только поля, но и свойства инфоблока.
Однако, такие важные данные как: имя сотрудника, запустившего БП, текущее состояние конкретного бизнес-процесса и комментарии, которые были добавлены в процессе его выполнения – из инфоблока нам получить не удастся, так как они хранятся в другом месте.
Этим местом является таблица b_bp_task в БД портала. Для получения этой информации используется метод CBPDocument::GetDocumentState() , а также небольшая вспомогательная функция GetWorkflowIDByDocName() , которая делает SQL-запрос к указанной таблице и возвращает ID бизнес-процесса по его наименованию. Выглядит она так:
function GetWorkflowIDByDocName($docname, $docID) < $docName = trim($docname); if(strlen($docName) $sql = «SELECT DISTINCT ID, WORKFLOW_ID, PARAMETERS FROM b_bp_task WHERE DOCUMENT_NAME=» AND PARAMETERS LIKE ‘%%’ ORDER BY ID DESC»; $connection = MainApplication::getConnection(); $dbResult = $connection->query($sql); $arFields = $dbResult->Fetch(); $arBPParams = unserialize($arFields[‘PARAMETERS’]); $res = (!empty($arFields[‘WORKFLOW_ID’])) ? $arFields[‘WORKFLOW_ID’] : false; return $res; >
В качестве аргументов в нее передается ID и наименование элемента инфоблока.
Сейчас настало время описать как работает наш скрипт по порядку. В самом начале подключаем служебную часть пролога, так как подключать шаблон нам не нужно. Используем пространства имен BitrixMain и BitrixMainLoader . Подключаем необходимые модули «Информационные блоки» ( iblock ) и «Бизнес-процессы» ( bizproc ).
Сначала получаем доступную информацию о бизнес-процессах из элементов инфоблока и сохраняем ее в массив $arResult .
$arResult = Array(); $procIblockType = ‘bitrix_processes’; $procIblockID = 75; // Заявление на отпуск $obProcessesIBlock = CIBlock::GetByID($procIblockID); $arrProcessesIBlock = $obProcessesIBlock->Fetch(); $arResult[‘IBLOCK_NAME’] = $arrProcessesIBlock[‘NAME’]; $arProcesses = Array(); $arSelect = Array( «ID», «NAME», «DATE_CREATE», «PREVIEW_TEXT», «PROPERTY_PROPERTY_FROM», «PROPERTY_PROPERTY_TO», «PROPERTY_IS_APPROVED», ); $arFilter = Array( «IBLOCK_ID»=>IntVal($procIblockID), «ACTIVE»=>»Y» ); $obRes = CIBlockElement::GetList(Array(‘ID’ => ‘DESC’), $arFilter, false, false, $arSelect); while($arRes = $obRes->GetNext())
После этого обходим массив в цикле и получаем недостающую информацию. Обращаю внимание читателя на то, что первый параметр, который передается в метод CBPDocument::GetDocumentState() для получения текущего состояния бизнес-процесса является массивом.
foreach($arResult[‘PROCESSES’] as $key => $documentId = array(«lists», «BizprocDocument», $key); $workflowId = GetWorkflowIDByDocName($arItem[‘NAME’], $key); $result = CBPDocument::GetDocumentState($documentId, $workflowId); $arItem[‘BP_CUR_STATE’] = $result[$workflowId][«STATE_TITLE»]; $arItem[‘BP_STARTED_BY_ID’] = $result[$workflowId][«STARTED_BY»]; $arItem[‘BP_TEMPLATE_NAME’] = $result[$workflowId][«TEMPLATE_NAME»]; $arItem[‘BP_TEMPLATE_ID’] = $result[$workflowId][«TEMPLATE_ID»]; $arUser = CUser::GetByID($result[$workflowId][«STARTED_BY»])->Fetch(); $arItem[‘BP_STARTED_BY_NAME’] = $arUser[‘LAST_NAME’].’ ‘.$arUser[‘NAME’]; >
Имя и фамилию пользователя, запустившего бизнес-процесс получаем методом GetByID() класса CUser .
На этом логика скрипта завершена – данные получены. Далее их уже можно вывести.
[] | [] |
Вот таким несложным способом можно получить данные о бизнес-процессах с помощью API Битрикс. Полученные данные необязательно выводить на страницу, они могут быть использованы и для других целей. Например, для сохранения и последующего анализа. Также на основе их можно сформировать какой-нибудь отчет.
Источник: mattweb.ru
Пример использования бизнес-процессов и списков: подготовка списка и его настройка
В данной статье рассмотрим, как в системе Битрикс24 создать сервис сбора и размещения заявок на закупку в соответствии с ТЗ на портале: ТЗ по размещению заявок на закупку на портале.
Исходя из условий ТЗ наиболее эффективный функционалом являются штатные списки.
Перед прочтением статьи, рекомендую ознакомиться с особенностями универсальных списков, которые находятся в разделе Компания.
- Далее создаем список, поддерживающий бизнес-процесс :
и настроим подписи.
- Добавляем необходимые поля в соответствии с ТЗ (Настройки списка – Поля списка — Добавить поле). Не забываем отметить обязательные к заполнению поля.
В тех полях, заполнение которых будет происходить автоматически, добавим в поле Значение по умолчанию текст-пояснение:
Как правильно настроить поле, в котором будет автоматически отражаться дата и время создания заявки, смотри ниже:
Согласно ТЗ не требуется выбор пользователей системы, в связи с этим необходимых сотрудников указываем текстом, используя поле типа список :
В итоге должно получиться следующее:
А форма создания новой заявки будет выглядеть таким образом:
Желаете пройти обучение Битрикс24 — Выберите СВОЙ ВАРИАНТ ОБУЧЕНИЯ согласно требуемому для Вас или для Ваших коллег уровню компетенции.
Задавайте ваши вопросы и специалисты с радостью ответят на них в кратчайшее время.
Время работы специалистов Пн.–Пт.: с 9:30 до 18:30; Сб.-Вс.: выходные.
Источник: pinall.ru