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

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

В типовых конфигурациях 1С (в частности, 1С:Управление торговлей 10.3) механизм обмена с сайтом по стандарту CommerceML 2 по умолчанию формирует структуру каталога строго на основе иерархии папок справочника Номенклатура. Однако в реальной практике структура каталога интернет-магазина часто не совпадает с внутренним складским или управленческим учетом компании.

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

Рассмотрим два основных пути решения этой задачи: настройка обмена с помощью специализированного модуля интеграции (без доработки кода) и ручная модификация алгоритмов типовой выгрузки в конфигураторе.

Вариант 1. Использование модуля обмена и настройка «Дерева групп»

Если интернет-магазин работает под управлением CMS (например, 1С-Битрикс), наиболее удобным решением является внедрение официального специализированного модуля обмена. В нем уже заложен механизм создания произвольного виртуального дерева каталога.

Разберем процесс настройки по шагам:

  1. Установка и интеграция модуля: объединяем типовую конфигурацию с файлом поставки модуля обмена через Конфигуратор. Обратите внимание на объединение ролей и прав доступа пользователей (роль для работы с обменом должна быть назначена пользователю, от имени которого выполняется выгрузка).
  2. Открытие настроек обмена: в режиме «1С:Предприятие» переходим через меню Операции → Планы обмена → Обмен с WEB-сайтом (или соответствующий пункт подсистемы) и создаем новый узел настройки.
  3. Настройка структуры каталога: переходим на закладку параметров выгрузки товаров и открываем конструктор «Дерево групп».
  4. Формирование дерева сайта: создаем произвольные группы и подгруппы каталога непосредственно в интерфейсе 1С, повторяя желаемую иерархию интернет-магазина.
  5. Привязка товаров: для каждого созданного виртуального раздела настраиваем правила сопоставления. Модуль позволяет привязывать товары вручную, по группам номенклатуры, по видам номенклатуры, а также по дополнительным реквизитам или свойствам.

Такой подход позволяет гибко управлять структурой сайта без изменения типового программного кода и дает возможность при необходимости помещать один и тот же товар сразу в несколько разделов интернет-магазина.

Вариант 2. Программная доработка типового механизма обмена CommerceML

Если используется типовой модуль или требуется жестко связать логику выгрузки со справочником РазделыСайта, внесем изменения в алгоритмы формирования XML-пакета. Выгрузка строится на базе обработки ОбменССайтом.

Проанализируем архитектуру пакета CommerceML: структура дерева передается в теге <Группы>, а в каждом теге <Товар> передается вложенный блок <Группы><Ид>...</Ид></Группы>, содержащий GUID соответствующего раздела.

Рассмотрим, как изменить выгрузку в кодовой базе обработки ОбменССайтом:

  1. Выгрузка дерева разделов: находим процедуру формирования структуры каталога (по умолчанию она выбирает группы справочника Номенклатура или ЦеновыеГруппы). Заменяем источник выборки на наш справочник РазделыСайта. Для каждого узла и подраздела формируем тег группы, передавая в <Ид> строковый GUID элемента: Строка(Раздел.УникальныйИдентификатор()).
  2. Привязка товара к разделу: в запросе выборки товаров заменяем поле Номенклатура.Родитель на добавленный реквизит Номенклатура.РазделСайта. При записи XML-узла товара передаем GUID выбранного раздела.
  3. Отсечение товаров без раздела: чтобы товары без привязки не попадали в выгрузку, модифицируем текст основного запроса выборки номенклатуры, добавив условие фильтрации.

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


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Товар,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.Артикул КАК Артикул,
    Номенклатура.РазделСайта КАК РазделСайта,
    Номенклатура.РазделСайта.УникальныйИдентификатор КАК ИдРаздела
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    НЕ Номенклатура.ЭтоГруппа
    И Номенклатура.РазделСайта <> ЗНАЧЕНИЕ(Справочник.РазделыСайта.ПустаяСсылка)
    И НЕ Номенклатура.ПометкаУдаления

При формировании узла товара в XML для тега идентификатора группы используем полученный GUID:


ЗаписьXML.ЗаписатьНачалоЭлемента("Группы");
ЗаписьXML.ЗаписатьНачалоЭлемента("Ид");
ЗаписьXML.ЗаписатьТекст(Строка(Выборка.РазделСайта.УникальныйИдентификатор()));
ЗаписьXML.ЗаписатьКонецЭлемента(); // Ид
ЗаписьXML.ЗаписатьКонецЭлемента(); // Группы

Важные особенности и риски при смене структуры каталога

Разберем нюансы, на которые необходимо обратить внимание перед запуском выгрузки:

  1. Идентификаторы разделов (XML_ID): при первой выгрузке по новому справочнику разделов сайт воспримет их как абсолютно новые группы (так как их GUID отличаются от старых групп номенклатуры 1С). Если на сайте уже настроена структура и к разделам привязаны SEO-теги, необходимо предварительно сопоставить внешние коды разделов на сайте с новыми GUID из 1С.
  2. Очистка старых данных: проверьте настройки импорта на стороне CMS. Рекомендуется настроить действие с товарами и группами, отсутствующими в файле обмена (например, «Деактивировать», а не «Удалять»), чтобы избежать случайной потери накопленных данных на сайте.
← На главную