Это кейс про интеграцию 1С с Битрикс24 для автосервиса. Клиент — автотехцентр: приёмка, заказ-наряды, работы и запчасти учитываются в 1С, а отдел продаж и коммуникация с клиентами живут в Битрикс24 CRM. До интеграции мастер-приёмщик заводил заказ-наряд в 1С, а менеджер вручную дублировал ту же сделку и контакт в CRM: двойной ввод, расхождения по суммам и статусам, потерянные обращения.
Задача — сделать 1С ведущей системой по заказ-нарядам, а Битрикс24 держать в актуальном состоянии автоматически: каждый заказ-наряд превращается в сделку CRM с автомобилем, суммой, стадией и составом работ, а изменение стадии в CRM возвращается в 1С.
Что синхронизируется
Обмен двусторонний и охватывает ключевые сущности: заказ-наряды → сделки, контрагенты → контакты, работы и запчасти → товары сделки, состояние заказ-наряда → стадия воронки. Ведущая система — 1С: суммы, номенклатура работ и движение заказ-нарядов приходят из учёта; CRM получает готовые сделки и не расходится с реальностью автосервиса.
Заказ-наряд как сделка CRM
Сердце кейса — маппинг документа ЗаказНаряд на сущность crm.deal. Заголовок сделки собирается из номера, даты, контрагента и автомобиля, чтобы менеджер в CRM сразу видел, о какой машине речь:
СтруктураДанных.TITLE = "ЗН " + Выборка.Номер + " от "
+ Формат(Выборка.Дата, "ДФ=dd.MM.yyyy") + " "
+ Выборка.Контрагент + " " + Выборка.Автомобиль;
СтруктураДанных.CURRENCY_ID = "RUB";
СтруктураДанных.OPPORTUNITY = Выборка.СуммаДокумента;
СтруктураДанных.BEGINDATE = Выборка.ДатаНачала;
СтруктураДанных.CLOSEDATE = Выборка.ДатаОкончания;
Если Выборка.Состояние = Перечисления.СостояниеЗаказНаряда.Выполнен
ИЛИ Выборка.Состояние = Перечисления.СостояниеЗаказНаряда.Закрыт Тогда
СтруктураДанных.STAGE_ID = "6"; // закрытая стадия воронки
СтруктураДанных.CLOSED = "Y";
Иначе
СтруктураДанных.STAGE_ID = "5";
КонецЕсли;
Строки «Работы» заказ-наряда выгружаются в состав сделки отдельным вызовом productrows.set: каждая работа/запчасть сопоставляется товару CRM через регистр соответствия, и в сделку уходят цена и количество. Так сумма сделки в Битрикс24 всегда совпадает с заказ-нарядом.
Авторизация: OAuth 2.0 с обновлением токена
Подключение к Битрикс24 — по OAuth 2.0 через oauth.bitrix.info. Расширение проходит полный цикл: запрос authorize → получение code из редиректа → обмен на access_token и refresh_token. Токены и cookie хранятся в служебном регистре сведений. Когда сервер отвечает «token expired», обработчик ошибок сам вызывает обновление токена и повторяет запрос — интеграция не требует ручного переподключения.
Функция ОбработатьОшибкуБитрикс24(Контекст, ОписаниеОшибки) Экспорт
ЗаписьЖурналаРегистрации("Bitrix24", УровеньЖурналаРегистрации.Ошибка,,, Контекст + Символы.ПС + ОписаниеОшибки);
Если СтрНайти(ОписаниеОшибки, "The access token provided has expired") > 0 Тогда
ОбновитьТокен();
КонецЕсли;
Возврат Неопределено;
КонецФункции
Событийный обмен без лишних запросов
Чтобы не гонять всю базу заказ-нарядов при каждом обмене, изменения регистрируются точечно. Подписка на событие записи объекта складывает изменённую ссылку в регистр-очередь ns_ExchangeBitrix24, а регламентный обмен выбирает только эту очередь и выгружает накопленное, после чего чистит регистрацию:
Процедура ЗарегистрироватьИзменение(Источник, Отказ) Экспорт
Если Отказ Тогда Возврат; КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
// определяем сущность CRM по типу ссылки и ставим объект в очередь обмена
ЯдроОбмена.ВыполнитьФункциюМенеджера(
ОпределитьСущность(Источник.Ссылка), "RegistrationOfChanges", Источник.Ссылка);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Соответствие «ссылка 1С ↔ ID в Битрикс24» держится в отдельном регистре ns_DataMapping: по нему обмен решает, создавать новую сущность (crm.deal.add) или обновлять существующую (crm.deal.update), и никогда не плодит дубли в CRM.
Обратная синхронизация: статусы из CRM в 1С
Движение сделки менеджером в воронке возвращается в 1С. Обмен запрашивает у Битрикс24 сделки, изменённые после даты последней сверки (>DATE_MODIFY), фильтрует их по списку отслеживаемых стадий и обновляет состояние соответствующего заказ-наряда. Так автосервис видит в 1С, что клиент, например, подтвердил работы или сделка ушла в отказ.
Отраслевые обработки автосервиса
Помимо коннектора, в расширение вынесена прикладная автоматика автотехцентра: печать и подготовка заказ-нарядов, акты осмотра автомобиля, расписки для клиента и внутренние документы («автоконсьерж»). Всё это работает поверх типовой конфигурации через расширение — без снятия базы с поддержки.
Итог
Автосервис перестал дублировать заказ-наряды в CRM руками. Заказ-наряд из 1С сам становится сделкой Битрикс24 с автомобилем, суммой, стадией и составом работ; изменения статусов возвращаются в учёт. Механика та же, что в кейсе интеграции 1С:УТ 10.3 с Битрикс24, но заточена под заказ-наряды автотехцентра. Разбор авторизации OAuth 2.0 в расширении — в статье Интеграция 1С и Битрикс24: OAuth 2.0; полный маршрут разработки таких расширений — на курсе Интеграция 1С и Битрикс24 через расширения.
Для этого же автосервиса разработано мобильное приложение приёмки на 1С — приёмщик оформляет заявку у автомобиля, а заказ-наряд создаётся в центральной базе.