Как правильно выгрузить новые реквизиты номенклатуры из 1С в 1С-Битрикс?

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

При интеграции 1С с интернет-магазином на платформе 1С-Битрикс часто возникает задача передачи дополнительных характеристик товара, таких как цвет, размер, бренд или материал. Однако после добавления новых реквизитов в справочник Номенклатура на стороне 1С они либо не выгружаются на сайт, либо попадают в системный список «Реквизиты» (CML2_TRAITS), вместо того чтобы стать полноценными свойствами инфоблока для фильтрации и фасетного поиска.

Разберем архитектурные причины такого поведения стандарта CommerceML и рассмотрим практические способы решения задачи.

Почему новые реквизиты попадают в «Реквизиты», а не в «Свойства»

Проанализируем структуру обмена данными в формате CommerceML (файлы import.xml):

  1. Блок реквизитов (<ЗначенияРеквизитов>): сюда попадают системные и стандартные поля объекта (например, вес, артикул, код, базовая единица измерения). На стороне Битрикса эти данные записываются в единое множественное свойство с кодом CML2_TRAITS. Такие значения сложно использовать в умном фильтре каталога без дополнительной обработки.
  2. Блок свойств (<ЗначенияСвойств>): сюда попадают пользовательские характеристики. Чтобы значение появилось в этом блоке, в секции <Классификатор> пакета выгрузки обязательно должно присутствовать описание свойства с уникальным идентификатором (GUID), наименованием и типом данных.

Если добавить новый реквизит напрямую в дерево метаданных конфигурации 1С (в справочник Номенклатура), типовой модуль обмена не знает о его существовании и либо игнорирует его, либо помещает в общий массив реквизитов.

Способ 1. Использование механизма дополнительных реквизитов (рекомендуемый)

Наиболее простое и универсальное решение, не требующее доработки кода конфигурации, — использование типового функционала подсистемы «Свойства» (План видов характеристик ДополнительныеРеквизитыИСведения).

Выполним следующие шаги:

  1. Перейдем в раздел НСИ и администрирование → Общие настройки → Дополнительные реквизиты и сведения.
  2. Для справочника номенклатуры создадим нужные характеристики (например, «Цвет» и «Размер»).
  3. Заполним значения созданных дополнительных реквизитов в карточках товаров.
  4. Запустим сеанс обмена с сайтом.

Типовой модуль интеграции 1С-Битрикс автоматически считывает план видов характеристик, формирует их описание в классификаторе XML и передает значения товаров в блоке <ЗначенияСвойств>. На сайте автоматически создаются одноименные свойства инфоблока, готовые к использованию в фильтрах.

Способ 2. Сопоставление реквизитов в модуле обмена с сайтом

Если реквизиты уже созданы в структуре метаданных справочника и переносить их в состав дополнительных реквизитов нецелесообразно, проверим возможности используемого модуля интеграции.

Разберем порядок действий:

  1. Откроем узел обмена с сайтом (раздел 1С-Битрикс или Синхронизация с сайтом).
  2. Перейдем на вкладку настройки выгрузки каталога товаров.
  3. Найдем таблицу сопоставления свойств и реквизитов номенклатуры.
  4. Добавим строку, выберем созданный реквизит конфигурации и укажем правило его передачи в качестве свойства инфоблока.

В этом случае модуль обмена самостоятельно сгенерирует для реквизита идентификатор GUID в секции классификатора и поместит его данные в блок значений свойств каждого товара.

Способ 3. Программная доработка модуля выгрузки

Если используется полностью самописная подсистема обмена или нетиповой алгоритм выгрузки, доработаем процедуры формирования XML-пакета.

Для корректной передачи свойства необходимо реализовать две процедуры:

  1. В секции классификатора: добавить узел <Свойство>, в котором указать уникальный идентификатор (GUID), наименование и тип («Строка» или «Число»).
  2. В теле описания товара: добавить узел <ЗначенияСвойств>, связав его по ранее определенному GUID со значением реквизита текущей номенклатуры.

Синхронизация по внешнему коду (GUID) на стороне 1С-Битрикс

Выясним, как связать свойство на сайте с данными из 1С:

  1. Связь свойств между 1С и Битриксом осуществляется строго по полю Внешний код (XML_ID).
  2. Значение XML_ID на сайте должно в точности совпадать с тегом <Ид> этого свойства в файле import.xml.
  3. Если свойство уже создано в настройках инфоблока каталога на сайте вручную, скопируем GUID свойства из 1С (или из выгруженного XML-файла) и укажем его в поле Внешний код в параметрах свойства инфоблока.

Как принудительно выгрузить обновленные данные на сайт

После создания новых свойств или заполнения реквизитов существующие позиции номенклатуры не регистрируются как измененные автоматически. Чтобы данные ушли на сайт, инициируем отправку:

  1. Полная выгрузка: в настройках узла обмена выберем режим полной выгрузки каталога.
  2. Регистрация изменений: воспользуемся типовой обработкой «Регистрация изменений для обмена» либо выполним регистрацию программно:

УзелОбмена = ПланыОбмена.ОбменССайтом.НайтиПоНаименованию("Выгрузка на сайт");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
    ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.Справочники.Номенклатура);
КонецЕсли;

После регистрации изменений следующий сеанс обмена передаст все обновленные значения реквизитов на сайт.

← На главную