Почему не подтягивается номенклатура при обмене Битрикс24 с 1С:УПП и как это исправить

Программист 1С v8.3 (Обычные формы) Управленческий учет IT и автоматизация бизнеса
← На главную

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

Выясняем причину пустых идентификаторов номенклатуры

Рассмотрим ситуацию: при выгрузке заказа из Битрикс24 в XML-файле (CommerceML) мы видим структуру, где наименование товара присутствует, но идентификатор отсутствует. Это выглядит примерно так:


<Товар>
    <Ид></Ид>
    <ИдКаталога></ИдКаталога>
    <Наименование>Название товара</Наименование>
</Товар>

Проанализируем причины возникновения этой проблемы. Основная причина кроется в архитектуре хранения товаров в Битрикс24. В CRM существует два типа товаров в сделках и заказах:

  1. Товары из каталога: Это позиции, которые были заранее синхронизированы с 1С или созданы в разделе «Товары» CRM. Они имеют уникальный XML_ID, который должен соответствовать GUID номенклатуры в 1С.
  2. «Товары-пустышки» (Строковые товары): Часто менеджеры в CRM добавляют товар вручную, просто вписывая название и цену прямо в карточке сделки, не выбирая позицию из справочника. В этом случае Битрикс24 создает временную запись, у которой нет привязки к реальному товару и, соответственно, нет внешнего идентификатора XML_ID.

Если в 1С настроена синхронизация «По идентификатору», то система просто не может найти соответствие для пустой строки. Чтобы исправить это, нам необходимо либо заставить менеджеров выбирать товары строго из каталога, либо доработать алгоритм поиска на стороне 1С.

Анализ штатного модуля обмена

Разберем совет опытных разработчиков: использование открытого кода модуля обмена. Если вы используете типовой модуль от Битрикс, вы можете скачать его в формате .cf. Это позволит нам увидеть, как именно формируются запросы к базе данных и как обрабатываются поля.

Посмотрим на логику работы модуля. В конфигураторе 1С нам следует обратить внимание на процедуры, отвечающие за чтение XML. Обычно это функции в модуле менеджера или в специализированных обработках обмена. Нам нужно найти место, где обрабатывается узел Товар. Рассмотрим пример того, как можно добавить резервный поиск по наименованию, если Ид не заполнен:


// Фрагмент кода для обработки входящего товара
ИдентификаторТовара = СвойстваТовара.Ид;
Если ПустаяСтрока(ИдентификаторТовара) Тогда
    // Пытаемся найти товар по наименованию, если GUID пуст
    НаименованиеТовара = СвойстваТовара.Наименование;
    СсылкаНаТовар = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеТовара);
    
    Если СсылкаНаТовар.Пустая() Тогда
        // Логика создания новой номенклатуры или запись в лог ошибки
        ЗаписатьВЛогОшибок("Товар не найден: " + НаименованиеТовара);
    КонецЕсли;
Иначе
    СсылкаНаТовар = Справочники.Номенклатура.НайтиПоРеквизиту("ИД_Битрикс", ИдентификаторТовара);
КонецЕсли;

Переход на REST API и JSON: современный подход

Как отмечают участники обсуждения, стандартный обмен через CommerceML (XML) становится все менее гибким. Битрикс активно развивает REST API, который позволяет получать данные в формате JSON. Рассмотрим, как реализовать получение состава заказа через REST.

Для работы с товарами сделки нам понадобится метод crm.deal.productrows.get. Он возвращает массив товаров, привязанных к сделке. Посмотрим на пример JSON-ответа, который мы можем получить из Битрикс24:


{
    "result": [
        {
            "PRODUCT_ID": 123,
            "PRODUCT_NAME": "Номенклатура 1",
            "PRICE": 1500.00,
            "QUANTITY": 2
        }
    ]
}

Важный нюанс: PRODUCT_ID в этом ответе — это внутренний ID Битрикс24. Чтобы сопоставить его с 1С, нам нужно сделать дополнительный запрос методом crm.product.get, передав туда полученный PRODUCT_ID. Именно в данных продукта будет содержаться поле XML_ID (или ORIGIN_XML_ID), которое соответствует ссылке в 1С.

Проанализируем алгоритм работы на стороне 1С при использовании REST API:

  1. Создаем HTTPСоединение с вашим порталом Битрикс24.
  2. Отправляем POST-запрос к вебхуку или через приложение для получения списка товаров сделки.
  3. Для каждого товара из списка проверяем наличие связи с 1С.
  4. Если прямой связи нет, используем метод crm.product.get для получения расширенной информации о товаре.

Рассмотрим пример функции на языке 1С для получения данных через REST:


Функция ПолучитьДанныеТовара(IDТовараБитрикс)
    Соединение = Новый HTTPСоединение("ваш_портал.bitrix24.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
    АдресРесурса = "rest/1/ключ_вебхука/crm.product.get?id=" + IDТовараБитрикс;
    
    Запрос = Новый HTTPЗапрос(АдресРесурса);
    Ответ = Соединение.Получить(Запрос);
    
    Если Ответ.КодСостояния = 200 Тогда
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
        Данные = ПрочитатьJSON(Чтение);
        Возврат Данные.result.XML_ID; // Возвращаем GUID из 1С
    КонецЕсли;
    Возврат Неопределено;
КонецФункции

Рекомендации по синхронизации каталогов

Чтобы избежать проблем с пустыми идентификаторами в будущем, проанализируем настройки синхронизации каталога. В Битрикс24 есть разделение между товарами интернет-магазина и товарами CRM. Часто бывает так, что 1С выгружает товары в интернет-магазин, а сделки в CRM создаются с использованием товаров из другого, «локального» каталога CRM.

Посмотрим на необходимые шаги для исправления:

Использование 1С:Бэкофис как альтернатива

Если стандартный XML-обмен продолжает выдавать ошибки, а разработка своего обмена через REST API кажется слишком трудоемкой, проанализируем вариант использования технологии «1С:Бэкофис». Это решение позволяет открывать интерфейс 1С:УПП прямо внутри карточки Битрикс24 через iframe.

В этом сценарии данные не передаются физически в виде файлов XML. Менеджер нажимает кнопку «Создать заказ 1С» в Битрикс24, и перед ним открывается форма документа в 1С. Поскольку работа происходит непосредственно в базе 1С, проблема поиска номенклатуры по идентификаторам исчезает — менеджер выбирает товар напрямую из справочника 1С, видя актуальные остатки и цены.

Заключение

Подводя итоги, отметим, что проблема пустых тегов Ид чаще всего связана с человеческим фактором (ручной ввод товаров в CRM) или рассинхронизацией каталогов. Для решения проблемы мы рекомендуем:

  1. Проверить настройки модуля обмена на стороне 1С и убедиться в корректности выгрузки XML_ID.
  2. При невозможности исправить ввод данных менеджерами — доработать поиск номенклатуры по наименованию или артикулу в коде обработки обмена.
  3. Рассмотреть переход на REST API для получения более детальной информации о заказах в формате JSON.

Совместная работа систем 1С и Битрикс24 требует внимательного отношения к деталям идентификации объектов, но при правильной настройке она становится мощным инструментом автоматизации вашего бизнеса.

← На главную