Цель:
Автоматизировать процессы, создать документы в 1С (создания самого документа не будет описан) на основания задач CRM в"Bitrix24".
Платформа 8.3.17.1386, любая конфигурация, обычные формы.
Описания подсистемы и требования:
- В «Bitrix24» создаем «WebHook» описав соответствующие роли, доступы к подсистемам.
Пример:
- В «Bitrix24» создаем группу. Я это использую в качестве фильтра для тех заданий которые нужно переносить в 1С.
- В 1С создаем регистр сведение, например, «СоответсвиеИдБ24», он нужен для идентификации данных по ИД из Б24 с данными в 1С и для проверки, был ли уже создан документ или нет.
Измерения регистра:
ИДБ24 - (Тип строка)
ОсновнойКонтрагент – (тип Булево)
Значение1С – (тип «Пользователь», «Контрагент», «Документ» вы можете
расширить количество типов по мере необходимости)
- В 1С для автоматизации можете создать «Регламентированное задания» - у меня периодичность 5 мин.
- В 1С создайте обработку для взаимодействия с «Bitrix24»
Инструкция к созданию задания в «Bitrix24»
- Создайте задания (Плюс или на основания «Компании» из CRM)
- Укажите заголовок
- Сделайте описания задачи
- Прикрепите картинки или вставьте их в текст задания
- Укажите «Создателя»
- Укажите «Исполнителя»
- Укажите группу по которой будет проходить идентификация наших заданий
Нюансы при создании:
- В нашем р.с.: «СоответсвиеИдБ24» вы можете указать ИД любой группы при создания документа система буде подтягивать «Контрагента» по данному ИД (Отбор всех контрагентов строго по типу справочник «Контрагент») Так система понимает какие задания затягивать в 1С
- При создание задания в «Bitrix24» если прописать в «Заголовке» - «Любой текст, плюс 'КодПоЕДРПОУ' клиента» то система создаст задания в 1С с контрагентом которого найдет по данному 'КодПоЕДРПОУ' такой контрагент имеет больше приоритет.
- Задания в Б24 можно создавать на основания «Компании» из CRM системы, в 1С подставиться соответствующий контрагент (Одно условия CRM в Б24 должно было наполнено выгрузкой из 1С, поиск по GUID)
Описание обработки:
Методы, которые использовались из «Bitrix24» API (Документация «https://dev.1c-bitrix.ru/rest_help/»)
- task.item.list - https://dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_list.php
Описания: Возвращает массив задач, каждая из которых содержит массив полей. В отличие от task.item.list параметры в запросе tasks.task.list можно указывать в любом порядке, а также можно не указывать ненужные параметры.
- disk.attachedObject.get - https://dev.1c-bitrix.ru/rest_help/disk/attachedobject/disk_attachedobject_get.php
Описания: Возвращает информацию о прикрепленном файле через пользовательское свойство по идентификатору привязки.
- task.item.getfiles - https://dev.1c-bitrix.ru/rest_help/tasks/task/item/getfiles.php
Описания: Возвращает массив, содержащий ссылки на файлы, прикрепленные к задаче.
- crm.company.list - https://dev.1c-bitrix.ru/rest_help/crm/company/crm_company_list.php
Описания: Возвращает список компаний по фильтру. Является реализацией списочного метода для компаний.
1. Соединения
//Создаем соединения с Б24
Попытка
HTTPСоединение = Новый HTTPСоединение("bitrix24.com", ,Логин, Пароль,,,Новый ЗащищенноеСоединениеOpenSSL());
Исключение
ТекОшибка = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("ОшибкаОбменаСБитрикс",,Метаданные.РегламентныеЗадания.ЗагрузкаЗадачИзБ24,ТекОшибка);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
2. Общая процедура, куда передают метод для запроса (КОД ЧАСТИЧНО ИЗМЕНЕН)
Функция HTTPСоед(Н, Група, НачПериода, СоотПол, HTTPСоединение, СтрНомер = Неопределено, Metod)
ТекОшибка = "Произошла сетевая ошибка!";
//Метод с АПИ для получения задач с фильтром
Если Metod = "task.item.list" Тогда
ID = "?0[ID]=desc";
GROUP_ID = "&1[GROUP_ID]="+Група;
CREATED_DATE= "&1[>CREATED_DATE]="+НачПериода;
NAV_PARAMS = "&2[NAV_PARAMS][nPageSize]=50&2[NAV_PARAMS][iNumPage]="+Н;
ALL = "&3[0]=*";
HTTPЗапрос = Новый HTTPЗапрос(Metod+ID+CREATED_DATE+GROUP_ID+NAV_PARAMS+ALL);
//Работа с файлами
ИначеЕсли Metod = "disk.attachedObject.get" ИЛИ Metod = "task.item.getfiles" Тогда
ID = "?id=";
HTTPЗапрос = Новый HTTPЗапрос(Metod+ID+СтрНомер);
//Для получения компаний
ИначеЕсли Metod = "crm.company.list" Тогда
ID = "?filter[ID]=";
HTTPЗапрос = Новый HTTPЗапрос(Metod+ID+СтрНомер);
КонецЕсли;
Попытка
Результат = HTTPСоединение.Получить(HTTPЗапрос);
Исключение
// исключение здесь говорит о том, что запрос не дошел до HTTP-Сервера
ЗаписьЖурналаРегистрации("ОшибкаОбменаСБитрикс",,Метаданные.РегламентныеЗадания.ЗагрузкаЗадачИзБ24, ТекОшибка);
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Возврат Результат;
КонецФункции
3. Чтение результата и наполнение таблицы значений
4. Создание документов
4.1. Поиск контрагентов
4.2. Поиск картинок и подключение их к документам или к справочникам
Процедура СоздатьДокументы(Строка, СоотКонт, СоотПол, HTTPСоединение)
ТекОшибка = "Произошла сетевая ошибка!";
//Вычитаем КодЕДРПОУ из заголовка, ищем контрагента
пКонтрагент = ПоискатьКодЄДРПОУ(Строка.TITLE);
Если пКонтрагент = Неопределено Тогда
//Ищем контрагента если задания было создано на основании Клиента ИЗ СРМ системи Битрикс24
пКонтрагент = ПолучитьКонтрагентаПоДанихСРМБ24(Строка.DESCRIPTION, HTTPСоединение);
КонецЕсли;
//Создаем массив с файлами
МассивКартинок = Новый Массив;
ПолучитьПрикрепленныеФайлы(Строка.ID, МассивКартинок, HTTPСоединение);
УдалитьЛишниеЗнаки(Строка.TITLE);
УдалитьЛишниеЗнаки(Строка.DESCRIPTION);
//Добавляем ссылку на задачу в Б24
Строка.DESCRIPTION = "Ссылка к заданию в Б24:"+ Символы.ПС
+ "https://bitrix24.com/company/personal/user/26/tasks/task/view/"+Строка.ID+"/"+Символы.ПС
+ "------------------------------------------------------------------------------"
+ Символы.ПС
+ Строка.DESCRIPTION;
//Посик контрагента в Соответствие
пКонтр = Неопределено;
Если ТипЗнч(СоотКонт) = Тип("Соответствие") Тогда
пКонтр = СоотКонт.Получить(Строка.CODE_PARTNER);
ИначеЕсли ТипЗнч(СоотКонт) = Тип("СправочникСсылка.Контрагенты") И ЗначениеЗаполнено(СоотКонт) Тогда
пКонтр = СоотКонт;
КонецЕсли;
//ПРИМЕР СОЗДАНИЯ ДОКУМЕНТА (Подставте свой)
пДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
пДокумент.Контрагент = пКонтр;
пНаименование = Строка.TITLE;
пОписание = Строка.DESCRIPTION;
Попытка
пДокумент.Записать(РежимЗаписиДокумента.Проведение);
Исключение
пДокумент.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;
ПрикрепитьКартинку(пДокумент.Ссылка, МассивКартинок, HTTPСоединение);
ЗаписатьРВСоответсвиеИдБ24(пДокумент, Строка);
КонецПроцедуры