Как передать контрагента из 1С в CRM Битрикс24
Scope:
crmКто может выполнять методы: пользователь с правом на добавление и изменение компаний
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Контрагент в 1С — это карточка организации с ИНН, КПП, адресами и банковскими счетами. В Битрикс24 эти данные распределены по нескольким объектам: сама компания, ее реквизиты, адрес реквизита и банковские реквизиты.
Чтобы передать контрагента из 1С, последовательно выполним методы:
- crm.company.list — ищем компанию по идентификатору из 1С
- crm.requisite.list — если не нашли, ищем по ИНН
- crm.company.add или crm.company.update — создаем или обновляем компанию
- crm.requisite.preset.list — получаем шаблон реквизитов
- crm.requisite.add — добавляем реквизит с ИНН и КПП
- crm.address.add — добавляем юридический адрес
- crm.requisite.bankdetail.add — добавляем банковский счет
Перед началом
Для выполнения примеров нужны:
- входящий вебхук со scope
crm - общий модуль
ИнтеграцияБитрикс24из туториала Как выполнить первый запрос из 1С - контрагент в 1С с заполненными ИНН и КПП
Имена реквизитов справочника «Контрагенты» в примерах — как в типовых конфигурациях: Наименование, НаименованиеПолное, ИНН, КПП. Если конфигурация нетиповая, замените их на свои.
Телефон и адрес в типовых конфигурациях хранятся не в реквизитах справочника, а в регистре сведений «КонтактнаяИнформация». В примерах их отдает функция КонтактнаяИнформацияКонтрагента — она возвращает структуру с полями Телефон, Индекс, Город и Адрес. Реализуйте ее так, как принято в вашей конфигурации: запросом к регистру или вызовом метода библиотеки стандартных подсистем.
Как использовать примеры в документации
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.update — true:
{
"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 шаблона |
Кому подходит |
|
|
Юридическое лицо |
|
|
Индивидуальный предприниматель |
|
|
Физическое лицо |
Теперь создаем реквизит. В поле 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 |
Тип адреса |
|
|
Фактический адрес |
|
|
Адрес регистрации |
|
|
Юридический адрес |
|
|
Адрес для корреспонденции |
|
|
Адрес бенефициара |
|
|
Адрес доставки |
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.update — true:
{
"result": 1
}
В отличие от адреса, банковский счет обновляется частично: поля, которые не переданы в crm.requisite.bankdetail.update, сохраняют прежние значения.
6. Собираем сценарий целиком
&НаСервере
Функция ВыгрузитьКонтрагента(Контрагент) Экспорт
ИдентификаторКонтрагента = Строка(Контрагент.Ссылка.УникальныйИдентификатор());
КонтактнаяИнформация = КонтактнаяИнформацияКонтрагента(Контрагент);
// 1. Ищем компанию: сначала по идентификатору 1С, затем по ИНН
ИдентификаторКомпании = НайтиКомпаниюПоИдентификатору1С(ИдентификаторКонтрагента);
Если ИдентификаторКомпании = 0 Тогда
ИдентификаторКомпании = НайтиКомпаниюПоИНН(Контрагент.ИНН);
КонецЕсли;
// 2. Создаем или обновляем компанию
ИдентификаторКомпании = ЗаписатьКомпанию(Контрагент, КонтактнаяИнформация, ИдентификаторКомпании);
// 3. Записываем реквизиты
ИдентификаторРеквизита = ЗаписатьРеквизиты(Контрагент, ИдентификаторКомпании);
Если ИдентификаторРеквизита = 0 Тогда
Возврат ИдентификаторКомпании;
КонецЕсли;
// 4. Записываем юридический адрес
ЗаписатьЮридическийАдрес(КонтактнаяИнформация, ИдентификаторРеквизита);
// 5. Записываем основной банковский счет
Если ЗначениеЗаполнено(Контрагент.ОсновнойБанковскийСчет) Тогда
ЗаписатьБанковскийСчет(Контрагент.ОсновнойБанковскийСчет, ИдентификаторРеквизита);
КонецЕсли;
Возврат ИдентификаторКомпании;
КонецФункции
Проверьте результат в Битрикс24: в разделе CRM > Клиенты > Компании откройте карточку компании и разверните блок реквизитов — там будут ИНН, КПП, адрес и банковский счет.
Ошибки и диагностика
Если метод вернул ошибку, проверьте данные запроса.
|
Ошибка |
Причина и решение |
|
|
У пользователя, создавшего вебхук, нет права на добавление или импорт компаний |
|
|
Компания с переданным |
|
|
Шаблон реквизитов не найден. Получите его идентификатор методом crm.requisite.preset.list по значению |
|
|
Передан неверный тип владельца. Для компании это |
|
|
Адрес такого типа у реквизита уже есть. Обновите его методом crm.address.update |
|
Обмен создал вторую компанию вместо обновления первой |
В |
Что важно учитывать
- Контрагент-физлицо. Для физических лиц в CRM обычно создают контакт методом crm.contact.add, а не компанию. Реквизит привязывают к контакту:
ENTITY_TYPE_ID = 3, шаблон —#CRM_REQUISITE_PRESET_DEF_RU_PERSON# - Проверка дублей. Битрикс24 умеет искать дубли по телефону и почте методом crm.duplicate.findbycomm. Он не ищет по ИНН, поэтому за уникальность контрагентов по ИНН отвечает ваш обмен
- Удаление. Компания удаляется вместе со своими реквизитами, адресами и банковскими счетами. Отдельно чистить связанные объекты не нужно
- Обратный обмен. Компании, заведенные в Битрикс24 вручную, попадут в 1С только если их выгрузить — см. Как выгрузить список объектов Битрикс24 в 1С
- Регистр соответствий. Идентификатор компании из ответа удобно хранить в регистре сведений 1С: ссылка на контрагента, вид объекта и идентификатор в Битрикс24. Тогда повторный поиск при каждой выгрузке не нужен
Продолжите изучение
- Как выставить счет из 1С — счет для этой компании с товарными позициями
- Как прикрепить печатную форму из 1С — акт сверки или договор в карточке компании
- Реквизиты: обзор методов — все методы работы с реквизитами