Топ-7 способов интеграции 1С с Битрикс24 через REST API

Топ-7 способов интеграции 1С с Битрикс24 через REST API

Почему интеграция 1С и Битрикс24 — это не роскошь, а необходимость

Современный бизнес работает в условиях, когда данные рассредоточены по десяткам систем. Менеджеры по продажам живут в CRM, бухгалтеры — в 1С:Бухгалтерия, а складские работники — в учётных системах. Когда эти миры не связаны, компания теряет деньги на ручном переносе данных, ошибках двойного ввода и запоздалых решениях.

Интеграция 1С с Битрикс24 через REST API позволяет устранить этот разрыв. Сделка в CRM автоматически создаёт счёт в 1С, оплата фиксируется в Битрикс24 без участия человека, остатки на складе обновляются в режиме реального времени. Звучит как мечта? Это реальность, которую можно построить, понимая архитектуру взаимодействия двух систем.

В этой статье мы разберём 7 конкретных способов интеграции — от самого простого (отправка уведомлений) до по-настоящему сложных двусторонних синхронизаций. Каждый способ сопровождается рабочим кодом на встроенном языке 1С и пояснениями по настройке.

Архитектурные основы: как 1С и Битрикс24 общаются по REST API

Прежде чем погружаться в конкретные сценарии, важно понять базовую механику взаимодействия. Битрикс24 предоставляет REST API двух видов:

  • Входящие вебхуки (Inbound Webhooks) — статические URL, по которым 1С может отправлять запросы без предварительной авторизации (токен встроен в URL).
  • OAuth 2.0 + приложения — полноценная авторизация через токены доступа, подходит для продакшн-решений.
  • Исходящие вебхуки (Outbound Webhooks) — Битрикс24 сам отправляет POST-запросы на указанный URL при наступлении событий.

Со стороны 1С взаимодействие строится через HTTPСоединение и HTTPЗапрос. Для сложных сценариев используется фоновое задание или регламентное задание, чтобы не блокировать интерфейс пользователя.

// Базовая функция отправки REST-запроса в Битрикс24
Функция ОтправитьЗапросБитрикс24(МетодAPI, ПараметрыЗапроса) Экспорт

	ВебхукURL = КонстантыПодключения.URLВебхукаБитрикс24;

	// Формируем полный URL метода
	ПолныйURL = ВебхукURL + МетодAPI + "/";

	// Сериализуем параметры в JSON
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
	ТелоЗапроса = ЗаписьJSON.Закрыть();

	// Создаём HTTP-соединение
	Адрес = Новый АдресURL(ПолныйURL);
	Соединение = Новый HTTPСоединение(
		Адрес.Хост,
		Адрес.Порт,
		,,
		,
		30, // Таймаут в секундах
		Новый ЗащищённоеСоединениеOpenSSL()
	);

	// Формируем запрос
	Запрос = Новый HTTPЗапрос(Адрес.ПутьНаСервере);
	Запрос.Заголовки.Вставить("Content-Type", "application/json");
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, "UTF-8");

	// Отправляем POST-запрос
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);

	Если Ответ.КодСостояния <> 200 Тогда
		ВызватьИсключение "Ошибка API Битрикс24: " + Ответ.КодСостояния;
	КонецЕсли;

	// Десериализуем ответ
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	Результат = ПрочитатьJSON(ЧтениеJSON);

	Возврат Результат;

КонецФункции

Способ 1: Отправка уведомлений из 1С в Битрикс24

Самый простой сценарий — информационные уведомления. Например, когда в 1С проводится документ оплаты, менеджер в Битрикс24 получает уведомление о том, что клиент оплатил счёт.

Практический сценарий

Документ «Поступление на расчётный счёт» проведён → в Битрикс24 создаётся уведомление для ответственного менеджера.

// Процедура отправки уведомления об оплате в Битрикс24
Процедура УведомитьОбОплатеВБитрикс24(ДокументОплаты)

	// Получаем данные документа
	СуммаОплаты = ДокументОплаты.СуммаДокумента;
	НаименованиеКлиента = ДокументОплаты.Контрагент.Наименование;
	НомерДокумента = ДокументОплаты.Номер;
	ДатаДокумента = Формат(ДокументОплаты.Дата, "ДФ=dd.MM.yyyy");

	// Формируем текст уведомления
	ТекстСообщения = СтрШаблон(
		"✅ Получена оплата от [B]%1[/B]%2Сумма: [B]%3 руб.[/B]%4Документ: №%5 от %6",
		НаименованиеКлиента,
		Символы.ПС,
		Формат(СуммаОплаты, "ЧРГ=; ЧДЦ=2"),
		Символы.ПС,
		НомерДокумента,
		ДатаДокумента
	);

	// Параметры для метода im.message.add
	Параметры = Новый Структура;
	Параметры.Вставить("DIALOG_ID", "sg1"); // Чат группы или ID пользователя
	Параметры.Вставить("MESSAGE", ТекстСообщения);

	Попытка
		ОтправитьЗапросБитрикс24("im.message.add", Параметры);
	Исключение
		ЗаписатьВЖурналРегистрации(
			"Интеграция с Битрикс24",
			УровеньЖурналаРегистрации.Ошибка,
			,
			,
			ОписаниеОшибки()
		);
	КонецПопытки;

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

Этот способ реализуется за несколько часов и даёт немедленный эффект — менеджеры перестают звонить бухгалтерам с вопросом «а оплата прошла?».

Способ 2: Создание лидов и сделок из 1С

Следующий уровень — создание CRM-объектов в Битрикс24 на основе событий в 1С. Например, при создании нового контрагента в 1С автоматически создаётся лид в CRM.

Создание сделки при выставлении счёта

// Функция создания сделки в Битрикс24 на основе счёта из 1С
Функция СоздатьСделкуВБитрикс24(СчётНаОплату) Экспорт

	// Получаем данные счёта
	НаименованиеКлиента = СчётНаОплату.Контрагент.Наименование;
	СуммаСчёта = СчётНаОплату.СуммаДокумента;
	НомерСчёта = СчётНаОплату.Номер;

	// Ищем контакт или компанию в Битрикс24 по ИНН
	ИНН = СчётНаОплату.Контрагент.ИНН;
	IDКомпании = НайтиКомпаниюПоИНН(ИНН);

	// Формируем параметры сделки
	ПараметрыСделки = Новый Структура;
	ПараметрыСделки.Вставить("TITLE", "Счёт №" + НомерСчёта + " - " + НаименованиеКлиента);
	ПараметрыСделки.Вставить("OPPORTUNITY", СуммаСчёта);
	ПараметрыСделки.Вставить("CURRENCY_ID", "RUB");
	ПараметрыСделки.Вставить("STAGE_ID", "INVOICE"); // Стадия «Счёт выставлен»
	ПараметрыСделки.Вставить("COMPANY_ID", IDКомпании);

	// Пользовательское поле — номер счёта 1С
	ПараметрыСделки.Вставить("UF_CRM_1C_INVOICE_NUM", НомерСчёта);

	Параметры = Новый Структура;
	Параметры.Вставить("fields", ПараметрыСделки);

	Результат = ОтправитьЗапросБитрикс24("crm.deal.add", Параметры);

	// Сохраняем ID созданной сделки в реквизите документа
	Если Результат <> Неопределено И Результат.Свойство("result") Тогда
		IDСделки = Результат["result"];

		// Записываем ID сделки в документ 1С
		ОбъектСчёта = СчётНаОплату.ПолучитьОбъект();
		ОбъектСчёта.ДополнительныеРеквизиты.Найти("IDСделкиБитрикс24").Значение = IDСделки;
		ОбъектСчёта.Записать(РежимЗаписиДокумента.Запись);
	КонецЕсли;

	Возврат Результат;

КонецФункции

// Поиск компании в Битрикс24 по ИНН
Функция НайтиКомпаниюПоИНН(ИНН)

	Параметры = Новый Структура;

	Фильтр = Новый Структура;
	Фильтр.Вставить("UF_CRM_INN", ИНН);
	Параметры.Вставить("filter", Фильтр);

	Поля = Новый Массив;
	Поля.Добавить("ID");
	Параметры.Вставить("select", Поля);

	Результат = ОтправитьЗапросБитрикс24("crm.company.list", Параметры);

	Если Результат <> Неопределено
		И Результат.Свойство("result")
		И Результат["result"].Количество() > 0 Тогда
		Возврат Результат["result"][0]["ID"];
	КонецЕсли;

	Возврат 0;

КонецФункции

Способ 3: Синхронизация товарного каталога

Один из самых востребованных сценариев — поддержание актуального каталога товаров в Битрикс24 на основе номенклатуры 1С. Это особенно важно для компаний, использующих Битрикс24.Магазин или формирующих КП прямо из CRM.

Алгоритм синхронизации

  1. Получаем список изменённых позиций номенклатуры из 1С за период.
  2. Для каждой позиции проверяем, существует ли товар в Битрикс24 (по артикулу или коду 1С).
  3. Если существует — обновляем, если нет — создаём.
  4. Обновляем цены через отдельный метод.
// Регламентное задание: синхронизация номенклатуры с Битрикс24
Процедура СинхронизироватьНоменклатуруСБитрикс24() Экспорт

	// Запрос изменённой номенклатуры за последние сутки
	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Номенклатура.Код КАК Код,
		|	Номенклатура.Артикул КАК Артикул,
		|	Номенклатура.Наименование КАК Наименование,
		|	Номенклатура.НаименованиеПолное КАК Описание,
		|	Номенклатура.ЕдиницаИзмерения.Наименование КАК Единица,
		|	Цены.Цена КАК Цена
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
		|			,
		|			ТипЦен = &ТипЦен
		|		) КАК Цены
		|		ПО Цены.Номенклатура = Номенклатура.Ссылка
		|ГДЕ
		|	Номенклатура.ЭтоГруппа = ЛОЖЬ
		|	И НЕ Номенклатура.ПометкаУдаления
		|	И Номенклатура.МоментВремениИзменения >= &ДатаНачала";

	Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая"));
	Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата() - 86400));

	Выборка = Запрос.Выполнить().Выбрать();

	Пока Выборка.Следующий() Цикл

		// Проверяем существование товара в Битрикс24
		IDПродукта = НайтиПродуктВБитрикс24(Выборка.Артикул);

		ПараметрыПродукта = Новый Структура;
		ПараметрыПродукта.Вставить("NAME", Выборка.Наименование);
		ПараметрыПродукта.Вставить("DESCRIPTION", Выборка.Описание);
		ПараметрыПродукта.Вставить("CURRENCY_ID", "RUB");
		ПараметрыПродукта.Вставить("PRICE", Выборка.Цена);
		ПараметрыПродукта.Вставить("XML_ID", Выборка.Код); // Код 1С как внешний ID

		Параметры = Новый Структура;
		Параметры.Вставить("fields", ПараметрыПродукта);

		Если IDПродукта = 0 Тогда
			// Создаём новый продукт
			ОтправитьЗапросБитрикс24("crm.product.add", Параметры);
		Иначе
			// Обновляем существующий
			Параметры.Вставить("id", IDПродукта);
			ОтправитьЗапросБитрикс24("crm.product.update", Параметры);
		КонецЕсли;

	КонецЦикла;

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

Способ 4: Получение данных из Битрикс24 в 1С через исходящие вебхуки

До этого момента 1С была инициатором запросов. Теперь перевернём ситуацию: Битрикс24 сам уведомляет 1С о событиях. Для этого используются исходящие вебхуки — при наступлении события (смена стадии сделки, создание контакта) Битрикс24 отправляет POST-запрос на URL вашего HTTP-сервиса 1С.

Создание HTTP-сервиса в 1С

В конфигураторе создаём новый объект типа «HTTP-сервис». Настраиваем шаблон URL и метод обработки.

// Обработчик входящего вебхука от Битрикс24
// Вызывается при смене стадии сделки на «Выиграна»
Функция ОбработатьВебхукБитрикс24(Запрос)

	Ответ = Новый HTTPСервисОтвет(200);

	Попытка
		// Читаем тело запроса
		ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");

		// Парсим JSON
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
		ДанныеВебхука = ПрочитатьJSON(ЧтениеJSON);

		// Определяем тип события
		ТипСобытия = Данные["event"];

		Если ТипСобытия = "ONCRMDEALSTAGCHANGE" Тогда
			ОбработатьСменуСтадииСделки(Данные["data"]);
		ИначеЕсли ТипСобытия = "ONCRMINVOICEADD" Тогда
			ОбработатьНовыйСчётИзБитрикс24(Данные["data"]);
		КонецЕсли;

	Исключение
		ЗаписатьВЖурналРегистрации(
			"Вебхук Битрикс24",
			УровеньЖурналаРегистрации.Ошибка,
			,
			,
			ОписаниеОшибки()
		);
		Ответ.КодСостояния = 500;
	КонецПопытки;

	Возврат Ответ;

КонецФункции

// Обработка смены стадии сделки на «Выиграна» — создаём заказ в 1С
Процедура ОбработатьСменуСтадииСделки(ДанныеСобытия)

	IDСделки = ДанныеСобытия["FIELDS"]["ID"];
	НоваяСтадия = ДанныеСобытия["FIELDS"]["STAGE_ID"];

	Если НоваяСтадия = "WON" Тогда

		// Запрашиваем полные данные сделки
		Параметры = Новый Структура;
		Параметры.Вставить("id", IDСделки);
		ДанныеСделки = ОтправитьЗапросБитрикс24("crm.deal.get", Параметры);

		// Создаём заказ покупателя в 1С
		СоздатьЗаказПокупателяИзСделки(ДанныеСделки["result"]);

	КонецЕсли;

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

Для публикации HTTP-сервиса 1С необходим веб-сервер (Apache или IIS) и опубликованная информационная база. Если вы ищете специалиста для настройки такой инфраструктуры, можно найти разработчика 1С с опытом интеграционных проектов.

Способ 5: Двусторонняя синхронизация контрагентов

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

Стратегия разрешения конфликтов

Рекомендуемый подход — система приоритетов по полям: CRM является мастером для контактных данных (телефон, email, ответственный), а 1С — для юридических реквизитов (ИНН, КПП, юридический адрес).

// Двусторонняя синхронизация контрагента
Процедура СинхронизироватьКонтрагента(Контрагент, НаправлениеСинхронизации)

	// НаправлениеСинхронизации: "ИзБитрикс24" или "ВБитрикс24"

	IDКомпании = Контрагент.ДополнительныеРеквизиты.Найти("IDКомпанииБитрикс24").Значение;

	Если НаправлениеСинхронизации = "ВБитрикс24" Тогда

		// Данные из 1С → Битрикс24 (только юридические реквизиты)
		ПоляОбновления = Новый Структура;
		ПоляОбновления.Вставить("UF_CRM_INN", Контрагент.ИНН);
		ПоляОбновления.Вставить("UF_CRM_KPP", Контрагент.КПП);
		ПоляОбновления.Вставить("UF_CRM_LEGAL_ADDRESS", Контрагент.ЮридическийАдрес);
		ПоляОбновления.Вставить("TITLE", Контрагент.НаименованиеПолное);

		Параметры = Новый Структура;
		Параметры.Вставить("id", IDКомпании);
		Параметры.Вставить("fields", ПоляОбновления);

		ОтправитьЗапросБитрикс24("crm.company.update", Параметры);

	ИначеЕсли НаправлениеСинхронизации = "ИзБитрикс24" Тогда

		// Данные из Битрикс24 → 1С (только контактные данные)
		Параметры = Новый Структура;
		Параметры.Вставить("id", IDКомп

Способ 6: Синхронизация номенклатуры и цен

Актуальные цены и остатки в CRM — критически важный фактор для менеджеров по продажам. Интеграция позволяет автоматически передавать каталог товаров из 1С в Битрикс24 и обновлять цены при их изменении.

Пример передачи номенклатуры

// Выгрузка номенклатуры в каталог Битрикс24
Процедура ВыгрузитьНоменклатуруВБитрикс24(СписокНоменклатуры)

	Для Каждого Номенклатура Из СписокНоменклатуры Цикл

		ПоляТовара = Новый Структура;
		ПоляТовара.Вставить("NAME", Номенклатура.Наименование);
		ПоляТовара.Вставить("CODE", Номенклатура.Артикул);
		ПоляТовара.Вставить("PRICE", Номенклатура.Цена);
		ПоляТовара.Вставить("CURRENCY_ID", "RUB");
		ПоляТовара.Вставить("MEASURE", 796); // штуки

		Параметры = Новый Структура;
		Параметры.Вставить("fields", ПоляТовара);

		Результат = ОтправитьЗапросБитрикс24("crm.product.add", Параметры);

		Если Результат["result"] > 0 Тогда
			// Сохраняем ID товара в Битрикс24 для последующих обновлений
			ЗаписатьIDТовараБитрикс24(Номенклатура, Результат["result"]);
		КонецЕсли;

	КонецЦикла;

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

Найдите специалиста для решения этой задачи на koderion.ru