Интеграция 1С:ERP с Битрикс24: смарт-процессы, сделки и задачи (OAuth2 + REST)

Авторский переиспользуемый фреймворк на BSL: 1С:ERP и Битрикс24 обмениваются сделками, задачами и смарт-процессами (crm.item) по OAuth2 и REST — событийно, с дельта-синхронизацией и защитой от эхо-циклов.

Заказчик: Производственное предприятие, учёт в 1С:ERP Управление предприятием 2
Стек: 1С:Предприятие 8 (ERP УП2), расширение конфигурации (BSL), REST Битрикс24, OAuth 2.0 (oauth.bitrix.info), смарт-процессы crm.item/crm.type, задачи tasks.task, регистры маппинга/настроек/логов, подписки на события, консоль разработчика

Задача

Учёт, склад, номенклатура и заказы на производство ведутся в 1С:ERP, а продажи, воронка, задачи и смарт-процессы — в Битрикс24. Ручной перенос давал рассинхрон статусов и дубли. Нужен автоматический двусторонний обмен, срабатывающий по событию изменения данных, без дублирования объектов.

Результат

1С:ERP и Битрикс24 синхронизируются автоматически в обе стороны: сделки, компании, контакты, товары с разделами, статусы воронки, задачи и смарт-процессы (crm.item). Обмен идёт по событию записи объекта, тянет только изменения по дате модификации, переживает истечение OAuth-токена и не создаёт дублей за счёт регистра сопоставления ID. Реализовано расширением конфигурации как переиспользуемый фреймворк.

Задача: 1С:ERP и Битрикс24 должны работать как одно целое

На производственном предприятии учёт, склад, номенклатура и заказы на производство ведутся в 1С:ERP Управление предприятием 2, а отдел продаж и руководители проектов живут в Битрикс24: сделки, воронка, задачи, смарт-процессы. Пока данные переносят руками, менеджеры видят не тот статус, склад не знает о новых заказах, а руководитель — реальную загрузку производства. Нужен двусторонний обмен, который срабатывает сам при изменении данных и не создаёт дублей.

Решение: авторский фреймворк интеграции на расширении конфигурации

Интеграция реализована не разовыми обработками, а как переиспользуемый фреймворк — расширением конфигурации 1С (не меняя типовую ERP). Ядро — набор общих модулей ns_Битрикс24*, разложенных по принципу «модуль логики + модель сущности»: ns_Битрикс24Сделки/…СделкиМодель, …Компании, …Контакты, …Товары, …СмартПроцессы, …Задачи, …ПользовательскиеПоля. Точки под конкретного клиента вынесены в переопределяемый модуль ns_Битрикс24Переопределяемый, а для отладки в состав входит консоль разработчика и обработка экспорта/импорта настроек — фреймворк переносится между базами.

OAuth 2.0 с автопродлением токена

Подключение к порталу — полный серверный поток OAuth 2.0 Битрикс24: authorize → получение code → обмен на access_token/refresh_token через oauth.bitrix.info. Токены и срок жизни хранятся в регистре сведений ns_Настройки, а перед каждым REST-запросом фреймворк сам проверяет срок и молча продлевает доступ:

Процедура ПроверитьТокен(НастройкиПодключения)
    Если ЗначениеЗаполнено(НастройкиПодключения[Перечисления.ns_ВидыНастроек.RefreshTime])
        И НастройкиПодключения[Перечисления.ns_ВидыНастроек.RefreshTime] < ТекущаяДата() Тогда
        ОбновитьТокен(НастройкиПодключения);
    КонецЕсли;
КонецПроцедуры

Если Битрикс всё же вернул «The access token provided has expired», обработчик ошибок ловит это по тексту и инициирует обновление токена, не роняя обмен.

Одна обёртка над всем REST CRM

Поверх HTTP собран универсальный слой методов Битрикс24 — Add, Get, List, Update, Delete, Search, Productrows_set. Каждый вызов — это <сущность>.<метод> (например crm.deal.add, crm.company.list), тело сериализуется в JSON с корректной обработкой дат Битрикс (DATE_MODIFY, CLOSEDATE и т.п.). Инкрементальная выборка изменений идёт по фильтру >DATE_MODIFY с приведением к таймзоне портала — тянем только то, что поменялось с прошлой сверки:

Отбор = Новый Соответствие;
Отбор.Вставить(">DATE_MODIFY", ДатаПоследнейСверки);
МассивДанных = ns_Битрикс24.List(ПолучитьСущность(),
    ns_Битрикс24.GetParam("DATE_MODIFY", "ASC"), Отбор, ВозвращаемыеПоля);

Событийный обмен и защита от эхо-циклов

Изменения в 1С перехватываются подписками на события (ns_РегистрацияСправочников, ns_РегистрацияЗадач): при записи объекта фреймворк кладёт его в очередь обмена — регистр ns_ОбменБитрикс24. Что именно регистрировать по каждому объекту, решает переопределяемый модуль. Чтобы данные, только что пришедшие из Битрикс24, не улетели обратно и не зациклились, стоит двойная защита: флаг ЗагруженИзБитрикс24 в дополнительных свойствах объекта и таблица исключений на текущий проход обмена. Соответствие «объект 1С ↔ ID Битрикс» хранится в регистре ns_СопоставлениеДанных — благодаря ему обмен идемпотентен и не плодит дублей, а даты последней сверки лежат в ns_ДатыСверки.

Смарт-процессы и задачи — специфика ERP

Помимо стандартных сделок, контактов и товаров фреймворк работает со смарт-процессами Битрикс24 (СПА): типы процессов подтягиваются из crm.type.list в справочник, а элементы читаются и пишутся через crm.item с указанием entityTypeId. Заказ на производство из 1С выгружается не только как сделка, но и как задача (tasks.task) — производство и продажи видят один и тот же объект с двух сторон. При выгрузке сделки её товарные строки синхронизируются отдельно (crm.deal.productrows.set): если товара ещё нет в Битрикс24, он сначала создаётся, затем привязывается к сделке.

Результат

1С:ERP и Битрикс24 обмениваются данными автоматически и в обе стороны: сделки, компании, контакты, товары с разделами, статусы воронки, задачи и смарт-процессы держатся в согласованном состоянии без ручного переноса. Обмен переживает истечение токена, не создаёт дублей за счёт регистра сопоставления и тянет только изменения по дате модификации. Поскольку это фреймворк с точкой переопределения, консолью разработчика и переносом настроек, его же движок переиспользуется на других базах — меняется только клиентская логика регистрации объектов.

Нужна такая же интеграция?

Мы собираем интеграции 1С с Битрикс24 под учёт клиента — от УТ и Розницы до 1С:ERP. Как это устроено под капотом (OAuth2, REST, событийный обмен), подробно разбираем на курсе «Интеграция 1С и Битрикс24». Смотрите и смежные кейсы: интеграция 1С:УТ 10.3 с Bitrix24 CRM и интеграция Битрикс24 для автосервиса.

Частые вопросы

Нужен похожий проект?

Опишите задачу — оценю сроки и стоимость.