Как передать контрагента из 1С в CRM Битрикс24

Scope: crm

Кто может выполнять методы: пользователь с правом на добавление и изменение компаний

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Контрагент в 1С — это карточка организации с ИНН, КПП, адресами и банковскими счетами. В Битрикс24 эти данные распределены по нескольким объектам: сама компания, ее реквизиты, адрес реквизита и банковские реквизиты.

Чтобы передать контрагента из 1С, последовательно выполним методы:

  1. crm.company.list — ищем компанию по идентификатору из 1С
  2. crm.requisite.list — если не нашли, ищем по ИНН
  3. crm.company.add или crm.company.update — создаем или обновляем компанию
  4. crm.requisite.preset.list — получаем шаблон реквизитов
  5. crm.requisite.add — добавляем реквизит с ИНН и КПП
  6. crm.address.add — добавляем юридический адрес
  7. crm.requisite.bankdetail.add — добавляем банковский счет

Перед началом

Для выполнения примеров нужны:

Имена реквизитов справочника «Контрагенты» в примерах — как в типовых конфигурациях: Наименование, НаименованиеПолное, ИНН, КПП. Если конфигурация нетиповая, замените их на свои.

Телефон и адрес в типовых конфигурациях хранятся не в реквизитах справочника, а в регистре сведений «КонтактнаяИнформация». В примерах их отдает функция КонтактнаяИнформацияКонтрагента — она возвращает структуру с полями Телефон, Индекс, Город и Адрес. Реализуйте ее так, как принято в вашей конфигурации: запросом к регистру или вызовом метода библиотеки стандартных подсистем.

Как использовать примеры в документации

1. Ищем контрагента в Битрикс24

Обмен запускают повторно, поэтому перед созданием компании проверяем, не передавали ли контрагента раньше. Ищем в два шага: сначала по идентификатору из 1С, затем по ИНН.

Шаг 1. Поиск по идентификатору 1С. При создании компании мы запишем GUID контрагента в поле ORIGIN_ID, а код своей системы — в ORIGINATOR_ID. Оба поля доступны в фильтре.

&НаСервере
Функция НайтиКомпаниюПоИдентификатору1С(ИдентификаторКонтрагента)
	
	Фильтр = Новый Структура;
	Фильтр.Вставить("ORIGINATOR_ID", "1C-UT");
	Фильтр.Вставить("ORIGIN_ID", ИдентификаторКонтрагента);
	
	Параметры = Новый Структура;
	Параметры.Вставить("filter", Фильтр);
	Параметры.Вставить("select", СтрРазделить("ID,TITLE,ORIGIN_ID,ORIGIN_VERSION", ","));
	
	Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.company.list", Параметры);
	
	Если НЕ Ответ.Успешно ИЛИ Ответ.Результат.Количество() = 0 Тогда
		Возврат 0;
	КонецЕсли;
	
	Возврат ИнтеграцияБитрикс24.ИдентификаторИзОтвета(Ответ.Результат[0].Получить("ID"));
	
КонецФункции

Ответ метода:

{
    "result": [
        {
            "ID": "517",
            "TITLE": "ООО «Ромашка»",
            "ORIGIN_ID": "9f8e7d6c-0000-0000-0000-000000000042",
            "ORIGIN_VERSION": "2026-08-21T10:00:00"
        }
    ],
    "total": 1
}

Шаг 2. Поиск по ИНН. Компанию могли завести в Битрикс24 вручную — тогда поля ORIGIN_ID у нее нет. ИНН хранится не в карточке компании, а в ее реквизитах, поэтому ищем методом crm.requisite.list по полю RQ_INN и берем владельца реквизита из поля ENTITY_ID.

&НаСервере
Функция НайтиКомпаниюПоИНН(ИНН)
	
	Если ПустаяСтрока(ИНН) Тогда
		Возврат 0;
	КонецЕсли;
	
	Фильтр = Новый Структура;
	Фильтр.Вставить("RQ_INN", ИНН);
	Фильтр.Вставить("ENTITY_TYPE_ID", 4); // 4 — компания
	
	Параметры = Новый Структура;
	Параметры.Вставить("filter", Фильтр);
	Параметры.Вставить("select", СтрРазделить("ID,ENTITY_ID,RQ_INN,RQ_KPP", ","));
	
	Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.list", Параметры);
	
	Если НЕ Ответ.Успешно ИЛИ Ответ.Результат.Количество() = 0 Тогда
		Возврат 0;
	КонецЕсли;
	
	Возврат ИнтеграцияБитрикс24.ИдентификаторИзОтвета(Ответ.Результат[0].Получить("ENTITY_ID"));
	
КонецФункции

Ответ метода:

{
    "result": [
        {
            "ID": "111",
            "ENTITY_ID": "517",
            "RQ_INN": "7707083893",
            "RQ_KPP": "770701001"
        }
    ],
    "total": 1
}

У организаций с обособленными подразделениями ИНН один, а КПП разные. Если в 1С такие контрагенты — отдельные элементы справочника, добавьте в фильтр RQ_KPP, иначе обмен свяжет их с одной компанией в Битрикс24.

2. Создаем или обновляем компанию

Идентификатор контрагента 1С записываем в поля ORIGINATOR_ID и ORIGIN_ID, а в ORIGIN_VERSION — момент выгрузки. По нему видно, когда данные последний раз уходили в Битрикс24.

&НаСервере
Функция ЗаписатьКомпанию(Контрагент, КонтактнаяИнформация, ИдентификаторКомпании)
	
	Поля = Новый Структура;
	Поля.Вставить("TITLE", Контрагент.Наименование);
	Поля.Вставить("COMPANY_TYPE", "CUSTOMER");
	Поля.Вставить("ORIGINATOR_ID", "1C-UT");
	Поля.Вставить("ORIGIN_ID", Строка(Контрагент.Ссылка.УникальныйИдентификатор()));
	Поля.Вставить("ORIGIN_VERSION", ИнтеграцияБитрикс24.ДатаВСтрокуISO(ТекущаяДатаСеанса()));
	
	Если ЗначениеЗаполнено(КонтактнаяИнформация.Телефон) Тогда
		Телефон = Новый Структура;
		Телефон.Вставить("VALUE", КонтактнаяИнформация.Телефон);
		Телефон.Вставить("VALUE_TYPE", "WORK");
		
		Телефоны = Новый Массив;
		Телефоны.Добавить(Телефон);
		Поля.Вставить("PHONE", Телефоны);
	КонецЕсли;
	
	Параметры = Новый Структура;
	Параметры.Вставить("fields", Поля);
	
	Если ИдентификаторКомпании = 0 Тогда
		Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.company.add", Параметры);
	Иначе
		Параметры.Вставить("id", ИдентификаторКомпании);
		Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.company.update", Параметры);
	КонецЕсли;
	
	Если НЕ Ответ.Успешно Тогда
		ВызватьИсключение СтрШаблон("Не удалось записать компанию «%1»: %2",
			Контрагент.Наименование, Ответ.ОписаниеОшибки);
	КонецЕсли;
	
	Возврат ?(ИдентификаторКомпании = 0,
		ИнтеграцияБитрикс24.ИдентификаторИзОтвета(Ответ.Результат),
		ИдентификаторКомпании);
	
КонецФункции

Метод crm.company.add возвращает идентификатор созданной компании, crm.company.updatetrue:

{
    "result": 517
}

Функция ДатаВСтрокуISO описана в туториале Как выполнить первый запрос из 1С. Она переводит дату 1С в формат 2026-08-21T14:43:13+03:00 — с явным смещением часового пояса.

3. Добавляем реквизиты

ИНН, КПП и полное наименование хранятся в реквизите компании. Реквизит создается по шаблону: у российских организаций это «Организация», у предпринимателей — «ИП», у физических лиц — «Физ. лицо». Идентификаторы шаблонов на разных Битрикс24 отличаются, поэтому получаем их методом crm.requisite.preset.list по постоянному значению XML_ID.

&НаСервере
Функция ИдентификаторШаблонаРеквизитов(XMLИдентификатор = "#CRM_REQUISITE_PRESET_DEF_RU_COMPANY#")
	
	Параметры = Новый Структура;
	Параметры.Вставить("filter", Новый Структура("XML_ID", XMLИдентификатор));
	Параметры.Вставить("select", СтрРазделить("ID,NAME,XML_ID", ","));
	
	Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.preset.list", Параметры);
	
	Если НЕ Ответ.Успешно ИЛИ Ответ.Результат.Количество() = 0 Тогда
		ВызватьИсключение "В Битрикс24 не найден шаблон реквизитов " + XMLИдентификатор;
	КонецЕсли;
	
	Возврат ИнтеграцияБитрикс24.ИдентификаторИзОтвета(Ответ.Результат[0].Получить("ID"));
	
КонецФункции

Ответ метода:

{
    "result": [
        {
            "ID": "1",
            "NAME": "Организация",
            "XML_ID": "#CRM_REQUISITE_PRESET_DEF_RU_COMPANY#"
        }
    ],
    "total": 1
}

Значение XML_ID шаблона

Кому подходит

#CRM_REQUISITE_PRESET_DEF_RU_COMPANY#

Юридическое лицо

#CRM_REQUISITE_PRESET_DEF_RU_INDIVIDUAL#

Индивидуальный предприниматель

#CRM_REQUISITE_PRESET_DEF_RU_PERSON#

Физическое лицо

Теперь создаем реквизит. В поле XML_ID реквизита тоже пишем GUID контрагента — по нему найдем реквизит при следующей выгрузке.

&НаСервере
Функция ЗаписатьРеквизиты(Контрагент, ИдентификаторКомпании)
	
	ИдентификаторКонтрагента = Строка(Контрагент.Ссылка.УникальныйИдентификатор());
	
	Поля = Новый Структура;
	Поля.Вставить("ENTITY_TYPE_ID", 4); // 4 — компания
	Поля.Вставить("ENTITY_ID", ИдентификаторКомпании);
	Поля.Вставить("PRESET_ID", ИдентификаторШаблонаРеквизитов());
	Поля.Вставить("NAME", "Организация");
	Поля.Вставить("RQ_COMPANY_NAME", Контрагент.Наименование);
	Поля.Вставить("RQ_COMPANY_FULL_NAME", Контрагент.НаименованиеПолное);
	Поля.Вставить("RQ_INN", Контрагент.ИНН);
	Поля.Вставить("RQ_KPP", Контрагент.КПП);
	Поля.Вставить("XML_ID", ИдентификаторКонтрагента);
	
	Параметры = Новый Структура;
	Параметры.Вставить("fields", Поля);
	
	// Ищем ранее выгруженный реквизит этой компании
	ФильтрПоиска = Новый Структура;
	ФильтрПоиска.Вставить("ENTITY_TYPE_ID", 4);
	ФильтрПоиска.Вставить("ENTITY_ID", ИдентификаторКомпании);
	ФильтрПоиска.Вставить("XML_ID", ИдентификаторКонтрагента);
	
	ПараметрыПоиска = Новый Структура;
	ПараметрыПоиска.Вставить("filter", ФильтрПоиска);
	ПараметрыПоиска.Вставить("select", СтрРазделить("ID", ","));
	
	ОтветПоиска = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.list", ПараметрыПоиска);
	
	Если ОтветПоиска.Успешно И ОтветПоиска.Результат.Количество() > 0 Тогда
		ИдентификаторРеквизита = ИнтеграцияБитрикс24.ИдентификаторИзОтвета(
			ОтветПоиска.Результат[0].Получить("ID"));
		Параметры.Вставить("id", ИдентификаторРеквизита);
		Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.update", Параметры);
		Возврат ?(Ответ.Успешно, ИдентификаторРеквизита, 0);
	КонецЕсли;
	
	Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.add", Параметры);
	
	Если НЕ Ответ.Успешно Тогда
		ВызватьИсключение "Не удалось записать реквизиты: " + Ответ.ОписаниеОшибки;
	КонецЕсли;
	
	Возврат ИнтеграцияБитрикс24.ИдентификаторИзОтвета(Ответ.Результат);
	
КонецФункции

Метод возвращает идентификатор реквизита:

{
    "result": 111
}

4. Добавляем адрес

Адрес привязывают не к компании, а к реквизиту: в поле ENTITY_TYPE_ID передают 8 — реквизиты, в ENTITY_ID — идентификатор реквизита из предыдущего шага.

Адрес однозначно определяется тремя полями: тип адреса, тип владельца и его идентификатор. Отдельного идентификатора у адреса нет, поэтому создание и обновление различаются методом, а не набором ключей.

&НаСервере
Процедура ЗаписатьЮридическийАдрес(КонтактнаяИнформация, ИдентификаторРеквизита)
	
	// При обновлении адрес перезаписывается целиком,
	// поэтому передаем все поля, а не только измененные
	Поля = Новый Структура;
	Поля.Вставить("TYPE_ID", 6); // 6 — юридический адрес
	Поля.Вставить("ENTITY_TYPE_ID", 8); // 8 — реквизиты
	Поля.Вставить("ENTITY_ID", ИдентификаторРеквизита);
	Поля.Вставить("COUNTRY", "Россия");
	Поля.Вставить("POSTAL_CODE", КонтактнаяИнформация.Индекс);
	Поля.Вставить("CITY", КонтактнаяИнформация.Город);
	Поля.Вставить("ADDRESS_1", КонтактнаяИнформация.Адрес);
	
	Параметры = Новый Структура;
	Параметры.Вставить("fields", Поля);
	
	// Проверяем, есть ли уже адрес этого типа
	ФильтрПоиска = Новый Структура;
	ФильтрПоиска.Вставить("TYPE_ID", 6);
	ФильтрПоиска.Вставить("ENTITY_TYPE_ID", 8);
	ФильтрПоиска.Вставить("ENTITY_ID", ИдентификаторРеквизита);
	
	ПараметрыПоиска = Новый Структура;
	ПараметрыПоиска.Вставить("filter", ФильтрПоиска);
	ПараметрыПоиска.Вставить("select", СтрРазделить("TYPE_ID,ADDRESS_1", ","));
	
	ОтветПоиска = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.address.list", ПараметрыПоиска);
	АдресСуществует = ОтветПоиска.Успешно И ОтветПоиска.Результат.Количество() > 0;
	
	ИмяМетода = ?(АдресСуществует, "crm.address.update", "crm.address.add");
	Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод(ИмяМетода, Параметры);
	
	Если НЕ Ответ.Успешно Тогда
		ЗаписьЖурналаРегистрации("Битрикс24.REST", УровеньЖурналаРегистрации.Предупреждение, , ,
			"Не удалось записать адрес: " + Ответ.ОписаниеОшибки);
	КонецЕсли;
	
КонецПроцедуры

Оба метода возвращают true, а не идентификатор:

{
    "result": true
}

Повторный вызов crm.address.add для того же типа адреса и того же владельца завершается ошибкой TypeAddress exists. — адрес не перезаписывается. Для изменения используйте crm.address.update.

Метод crm.address.update перезаписывает адрес целиком: поля, которые не переданы, очищаются. Если обновить только ADDRESS_1, поле CITY станет пустым. Передавайте полный набор полей адреса.

Типы адресов возвращает метод crm.enum.addresstype:

TYPE_ID

Тип адреса

1

Фактический адрес

4

Адрес регистрации

6

Юридический адрес

8

Адрес для корреспонденции

9

Адрес бенефициара

11

Адрес доставки

5. Добавляем банковский счет

Банковские реквизиты — отдельный объект, тоже привязанный к реквизиту компании.

&НаСервере
Процедура ЗаписатьБанковскийСчет(БанковскийСчет, ИдентификаторРеквизита)
	
	Поля = Новый Структура;
	Поля.Вставить("ENTITY_TYPE_ID", 8); // 8 — реквизиты
	Поля.Вставить("ENTITY_ID", ИдентификаторРеквизита);
	Поля.Вставить("NAME", "Основной счет");
	Поля.Вставить("RQ_BANK_NAME", БанковскийСчет.Банк.Наименование);
	Поля.Вставить("RQ_BIK", БанковскийСчет.Банк.Код);
	Поля.Вставить("RQ_ACC_NUM", БанковскийСчет.НомерСчета);
	Поля.Вставить("RQ_COR_ACC_NUM", БанковскийСчет.Банк.КоррСчет);
	Поля.Вставить("XML_ID", Строка(БанковскийСчет.Ссылка.УникальныйИдентификатор()));
	
	Параметры = Новый Структура;
	Параметры.Вставить("fields", Поля);
	
	// Ищем ранее выгруженный счет по внешнему коду
	ФильтрПоиска = Новый Структура;
	ФильтрПоиска.Вставить("ENTITY_TYPE_ID", 8);
	ФильтрПоиска.Вставить("ENTITY_ID", ИдентификаторРеквизита);
	ФильтрПоиска.Вставить("XML_ID", Поля.XML_ID);
	
	ПараметрыПоиска = Новый Структура;
	ПараметрыПоиска.Вставить("filter", ФильтрПоиска);
	ПараметрыПоиска.Вставить("select", СтрРазделить("ID,XML_ID", ","));
	
	ОтветПоиска = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.bankdetail.list", ПараметрыПоиска);
	
	Если ОтветПоиска.Успешно И ОтветПоиска.Результат.Количество() > 0 Тогда
		Параметры.Вставить("id", ИнтеграцияБитрикс24.ИдентификаторИзОтвета(
			ОтветПоиска.Результат[0].Получить("ID")));
		Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.bankdetail.update", Параметры);
	Иначе
		Ответ = ИнтеграцияБитрикс24.ВыполнитьМетод("crm.requisite.bankdetail.add", Параметры);
	КонецЕсли;
	
	Если НЕ Ответ.Успешно Тогда
		ЗаписьЖурналаРегистрации("Битрикс24.REST", УровеньЖурналаРегистрации.Предупреждение, , ,
			"Не удалось записать банковский счет: " + Ответ.ОписаниеОшибки);
	КонецЕсли;
	
КонецПроцедуры

Метод crm.requisite.bankdetail.add возвращает идентификатор банковского реквизита, crm.requisite.bankdetail.updatetrue:

{
    "result": 1
}

В отличие от адреса, банковский счет обновляется частично: поля, которые не переданы в crm.requisite.bankdetail.update, сохраняют прежние значения.

6. Собираем сценарий целиком

&НаСервере
Функция ВыгрузитьКонтрагента(Контрагент) Экспорт
	
	ИдентификаторКонтрагента = Строка(Контрагент.Ссылка.УникальныйИдентификатор());
	КонтактнаяИнформация = КонтактнаяИнформацияКонтрагента(Контрагент);
	
	// 1. Ищем компанию: сначала по идентификатору 1С, затем по ИНН
	ИдентификаторКомпании = НайтиКомпаниюПоИдентификатору1С(ИдентификаторКонтрагента);
	
	Если ИдентификаторКомпании = 0 Тогда
		ИдентификаторКомпании = НайтиКомпаниюПоИНН(Контрагент.ИНН);
	КонецЕсли;
	
	// 2. Создаем или обновляем компанию
	ИдентификаторКомпании = ЗаписатьКомпанию(Контрагент, КонтактнаяИнформация, ИдентификаторКомпании);
	
	// 3. Записываем реквизиты
	ИдентификаторРеквизита = ЗаписатьРеквизиты(Контрагент, ИдентификаторКомпании);
	
	Если ИдентификаторРеквизита = 0 Тогда
		Возврат ИдентификаторКомпании;
	КонецЕсли;
	
	// 4. Записываем юридический адрес
	ЗаписатьЮридическийАдрес(КонтактнаяИнформация, ИдентификаторРеквизита);
	
	// 5. Записываем основной банковский счет
	Если ЗначениеЗаполнено(Контрагент.ОсновнойБанковскийСчет) Тогда
		ЗаписатьБанковскийСчет(Контрагент.ОсновнойБанковскийСчет, ИдентификаторРеквизита);
	КонецЕсли;
	
	Возврат ИдентификаторКомпании;
	
КонецФункции

Проверьте результат в Битрикс24: в разделе CRM > Клиенты > Компании откройте карточку компании и разверните блок реквизитов — там будут ИНН, КПП, адрес и банковский счет.

Ошибки и диагностика

Если метод вернул ошибку, проверьте данные запроса.

Ошибка

Причина и решение

Access denied в crm.company.add

У пользователя, создавшего вебхук, нет права на добавление или импорт компаний

Entity not found. в crm.requisite.add

Компания с переданным ENTITY_ID не найдена. Возьмите идентификатор из ответа предыдущего шага

PRESET_ID is not defined or invalid.

Шаблон реквизитов не найден. Получите его идентификатор методом crm.requisite.preset.list по значению XML_ID

ENTITY_TYPE_ID is not defined or invalid.

Передан неверный тип владельца. Для компании это 4, для реквизита — 8

TypeAddress exists

Адрес такого типа у реквизита уже есть. Обновите его методом crm.address.update

Обмен создал вторую компанию вместо обновления первой

В crm.company.list не нашлось совпадения по ORIGIN_ID и ORIGINATOR_ID. Проверьте, что при создании компании оба поля заполняются и код системы совпадает со значением в фильтре

Что важно учитывать

  • Контрагент-физлицо. Для физических лиц в CRM обычно создают контакт методом crm.contact.add, а не компанию. Реквизит привязывают к контакту: ENTITY_TYPE_ID = 3, шаблон — #CRM_REQUISITE_PRESET_DEF_RU_PERSON#
  • Проверка дублей. Битрикс24 умеет искать дубли по телефону и почте методом crm.duplicate.findbycomm. Он не ищет по ИНН, поэтому за уникальность контрагентов по ИНН отвечает ваш обмен
  • Удаление. Компания удаляется вместе со своими реквизитами, адресами и банковскими счетами. Отдельно чистить связанные объекты не нужно
  • Обратный обмен. Компании, заведенные в Битрикс24 вручную, попадут в 1С только если их выгрузить — см. Как выгрузить список объектов Битрикс24 в 1С
  • Регистр соответствий. Идентификатор компании из ответа удобно хранить в регистре сведений 1С: ссылка на контрагента, вид объекта и идентификатор в Битрикс24. Тогда повторный поиск при каждой выгрузке не нужен

Продолжите изучение