Как заполнить нетиповой справочник в 1С при синхронизации с Битрикс24?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Анализ архитектуры обмена

Прежде чем приступать к написанию кода, давайте разберем, как именно данные попадают из Битрикс24 в 1С. Стандартный модуль интеграции работает по принципу обмена пакетами данных. Когда в CRM происходит изменение, модуль на стороне 1С получает структуру данных (обычно в формате JSON или XML). В этот момент данные уже находятся "в руках" у 1С, и нам не нужно делать дополнительные запросы через REST API Битрикс24. Это важный момент, так как использование API без необходимости создает лишнюю нагрузку на сеть и усложняет авторизацию.

Рассмотрим основной алгоритм действий для решения нашей задачи:

  1. Определить точку входа, где данные из Битрикс24 уже получены, но еще не записаны или только что записаны в типовой справочник (например, Контрагенты).
  2. Перехватить нужные поля из структуры обмена.
  3. Программно создать или обновить элемент в нашем нетиповом справочнике.
  4. Связать новый элемент с основным объектом (например, через ссылку на контрагента или по уникальному идентификатору XML_ID).

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

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

Проанализируем событие ПриЗагрузкеОбъекта. Это "золотая середина" для нашей задачи. В этот обработчик передаются данные, пришедшие из портала. Разберем пример кода, который можно разместить в расширении для создания записи в нетиповом справочнике ДополнительныеСведенияОКлиентах:


&После("ПриЗагрузкеОбъекта")
Процедура Расш_ПриЗагрузкеОбъекта(Объект1С, ДанныеБитрикс, Отказ)
    
    // Проверяем, что загружается именно Контрагент
    Если ТипЗнч(Объект1С) = Тип("СправочникОбъект.Контрагенты") Тогда
        
        // Попытаемся найти наше поле в структуре, пришедшей из Битрикса
        // Предположим, поле называется UF_ADDITIONAL_INFO
        Если ДанныеБитрикс.Свойство("UF_ADDITIONAL_INFO") Тогда
            
            ДопИнфо = ДанныеБитрикс.UF_ADDITIONAL_INFO;
            
            // Выполняем поиск или создание элемента в нетиповом справочнике
            СправочникМенеджер = Справочники.ДополнительныеСведенияОКлиентах;
            
            // Ищем по владельцу или по ID Битрикса
            ЭлементСсылка = СправочникМенеджер.НайтиПоНаименованию(Объект1С.Наименование);
            
            Если ЭлементСсылка.Пустая() Тогда
                НовыйОбъект = СправочникМенеджер.СоздатьЭлемент();
            Иначе
                НовыйОбъект = ЭлементСсылка.ПолучитьОбъект();
            КонецЕсли;
            
            НовыйОбъект.Наименование = "Сведения для: " + Объект1С.Наименование;
            НовыйОбъект.ИнформационноеПоле = ДопИнфо;
            НовыйОбъект.КонтрагентСсылка = Объект1С.Ссылка;
            
            Попытка
                НовыйОбъект.Записать();
            Исключение
                ЗаписьЖурналаРегистрации("ИнтеграцияБитрикс24", УровеньЖурналаРегистрации.Ошибка, , , КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
            КонецПопытки;
            
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

Связь объектов через XML_ID

Одной из главных проблем при синхронизации является дублирование данных. Выясним причину: если мы будем просто создавать элементы при каждой синхронизации, наш справочник быстро переполнится дублями. Чтобы этого избежать, необходимо использовать уникальный идентификатор объекта из Битрикс24 (его ID в CRM).

В системе 1С при интеграции этот идентификатор часто записывается в реквизит Наименование или Код (если настроено), но правильнее всего искать его в регистре сведений Соответствие объектов информационных баз или обращаться к реквизиту XML_ID. Проанализируем ситуацию: если мы сохраним ID из Битрикса в нашем нетиповом справочнике, при следующем обмене мы сначала выполним поиск по этому ID, и если элемент найден — просто обновим его.

Настройка полей на стороне портала

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

  1. Откройте настройки интеграции в 1С.
  2. Перейдите в раздел "Настройка соответствия полей".
  3. Убедитесь, что ваше пользовательское поле (например, UF_...) отмечено галочкой для передачи.
  4. Если поля нет в списке, проверьте, опубликовано ли оно в CRM Битрикс24 и имеет ли текущий пользователь API к нему доступ.

Когда действительно стоит использовать REST API?

Несмотря на то, что для большинства задач достаточно встроенных средств обмена, рассмотрим исключения. Если вам нужно заполнить справочник данными, которые принципиально не передаются стандартным модулем (например, история комментариев из лида или сложные связи со смарт-процессами), тогда внутри процедуры 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. Достаточно использовать механизм расширений, подключиться к событиям загрузки объектов и корректно обработать входящую структуру данных. Основное внимание стоит уделить проверке типов объектов и контролю уникальности записей, чтобы избежать замусоривания базы данных.

← На главную