Интеграция 1С и Битрикс24 является одной из самых востребованных задач при автоматизации бизнеса. Часто стандартного функционала по обмену контрагентами или заказами не хватает, и возникает необходимость записывать входящие данные в дополнительные, нетиповые справочники. В этой статье мы разберем, как правильно реализовать этот механизм, не прибегая к избыточному использованию внешнего API, и как встроиться в процесс синхронизации максимально корректно.
Прежде чем приступать к написанию кода, давайте разберем, как именно данные попадают из Битрикс24 в 1С. Стандартный модуль интеграции работает по принципу обмена пакетами данных. Когда в CRM происходит изменение, модуль на стороне 1С получает структуру данных (обычно в формате JSON или XML). В этот момент данные уже находятся "в руках" у 1С, и нам не нужно делать дополнительные запросы через REST API Битрикс24. Это важный момент, так как использование API без необходимости создает лишнюю нагрузку на сеть и усложняет авторизацию.
Рассмотрим основной алгоритм действий для решения нашей задачи:
Контрагенты).XML_ID).Для сохранения возможности обновления модуля интеграции мы рекомендуем использовать механизм расширений конфигурации. Нам необходимо найти в модулях обмена Битрикс24 процедуры, отвечающие за загрузку объектов. Чаще всего они называются в стиле ВыполнитьЗагрузкуОбъекта или имеют специализированные обработчики событий.
Проанализируем событие ПриЗагрузкеОбъекта. Это "золотая середина" для нашей задачи. В этот обработчик передаются данные, пришедшие из портала. Разберем пример кода, который можно разместить в расширении для создания записи в нетиповом справочнике ДополнительныеСведенияОКлиентах:
&После("ПриЗагрузкеОбъекта")
Процедура Расш_ПриЗагрузкеОбъекта(Объект1С, ДанныеБитрикс, Отказ)
// Проверяем, что загружается именно Контрагент
Если ТипЗнч(Объект1С) = Тип("СправочникОбъект.Контрагенты") Тогда
// Попытаемся найти наше поле в структуре, пришедшей из Битрикса
// Предположим, поле называется UF_ADDITIONAL_INFO
Если ДанныеБитрикс.Свойство("UF_ADDITIONAL_INFO") Тогда
ДопИнфо = ДанныеБитрикс.UF_ADDITIONAL_INFO;
// Выполняем поиск или создание элемента в нетиповом справочнике
СправочникМенеджер = Справочники.ДополнительныеСведенияОКлиентах;
// Ищем по владельцу или по ID Битрикса
ЭлементСсылка = СправочникМенеджер.НайтиПоНаименованию(Объект1С.Наименование);
Если ЭлементСсылка.Пустая() Тогда
НовыйОбъект = СправочникМенеджер.СоздатьЭлемент();
Иначе
НовыйОбъект = ЭлементСсылка.ПолучитьОбъект();
КонецЕсли;
НовыйОбъект.Наименование = "Сведения для: " + Объект1С.Наименование;
НовыйОбъект.ИнформационноеПоле = ДопИнфо;
НовыйОбъект.КонтрагентСсылка = Объект1С.Ссылка;
Попытка
НовыйОбъект.Записать();
Исключение
ЗаписьЖурналаРегистрации("ИнтеграцияБитрикс24", УровеньЖурналаРегистрации.Ошибка, , , КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Одной из главных проблем при синхронизации является дублирование данных. Выясним причину: если мы будем просто создавать элементы при каждой синхронизации, наш справочник быстро переполнится дублями. Чтобы этого избежать, необходимо использовать уникальный идентификатор объекта из Битрикс24 (его ID в CRM).
В системе 1С при интеграции этот идентификатор часто записывается в реквизит Наименование или Код (если настроено), но правильнее всего искать его в регистре сведений Соответствие объектов информационных баз или обращаться к реквизиту XML_ID. Проанализируем ситуацию: если мы сохраним ID из Битрикса в нашем нетиповом справочнике, при следующем обмене мы сначала выполним поиск по этому ID, и если элемент найден — просто обновим его.
Важно помнить, что если вы не видите нужное поле в структуре ДанныеБитрикс в 1С, значит, оно не включено в список передаваемых полей в настройках самого модуля. Разберем по шагам, что нужно проверить:
UF_...) отмечено галочкой для передачи.Несмотря на то, что для большинства задач достаточно встроенных средств обмена, рассмотрим исключения. Если вам нужно заполнить справочник данными, которые принципиально не передаются стандартным модулем (например, история комментариев из лида или сложные связи со смарт-процессами), тогда внутри процедуры 1С можно вызвать HTTPСоединение к REST API.
Пример логики запроса к API для получения дополнительных данных по ID:
// Пример формирования запроса к REST API внутри 1С
URL = "https://ваш_портал.bitrix24.ru/rest/1/ключ/crm.contact.get?id=" + IDИзБитрикса;
HTTPЗапрос = Новый HTTPЗапрос(URL);
// ... выполнение запроса и парсинг JSON результата ...
Однако помните: чем меньше внешних запросов происходит во время цикла синхронизации, тем стабильнее будет работать ваш обмен. Старайтесь максимально использовать те данные, которые модуль уже привез в базу 1С.
Мы выяснили, что для заполнения нетипового справочника при интеграции с Битрикс24 не требуется сложное внедрение через API. Достаточно использовать механизм расширений, подключиться к событиям загрузки объектов и корректно обработать входящую структуру данных. Основное внимание стоит уделить проверке типов объектов и контролю уникальности записей, чтобы избежать замусоривания базы данных.