При интеграции 1С с несколькими интернет-магазинами часто возникает ситуация, когда для каждого сайта требуется своя собственная структура каталога товаров. В базовой архитектуре 1С справочник Номенклатура имеет строго моно-иерархическую структуру — одна позиция номенклатуры может находиться только в одной конкретной группе (иметь только одного родителя). В то же время на разных витринах один и тот же товар может находиться в совершенно разных категориях или даже одновременно в нескольких разделах.
Рассмотрим подробнее основные технические варианты решения этой задачи: от использования штатных механизмов модулей обмена до разработки собственных структур хранения данные в 1С.
Прежде чем приступать к доработке конфигурации, проанализируем возможности типовых модулей обмена 1С с сайтами (например, типового модуля обмена с 1С-Битрикс или модулей CommerceML). Во многих из них уже реализована функция виртуального дерева категорий.
Разберем по шагам, как работает данный подход:
Номенклатура без изменений.Преимущества: Не требуется изменение конфигурации 1С.
Ограничения: Ручная настройка дерева может быть трудоемкой при больших объемах номенклатуры (десятки тысяч позиций).
Если требуется предоставить пользователям удобный интерфейс управления категориями сайтов прямо в 1С, наиболее грамотным архитектурным решением является связка: отдельный справочник для структуры категорий плюс регистр сведений для привязки товаров.
Выясним причину эффективности этой схемы: основной справочник Номенклатура не засоряется «пустыми» дублирующими группами, а связи «товар — категория» хранятся в независимой структуре.
Для реализации выполняются следующие шаги:
СтруктураКаталоговСайтов), где верхний уровень иерархии определяет конкретный сайт или проект, а вложенные элементы — разделы витрины.ПривязкаНоменклатурыККатегориямСайтов с измерениями:
СайтКатегория (ссылка на справочник СтруктураКаталоговСайтов)Номенклатура (ссылка на справочник Номенклатура)Пример получения структуры товаров для конкретного сайта в коде выгрузки:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Привязка.СайтКатегория КАК КатегорияСайта,
| Привязка.Номенклатура КАК Товар
|ИЗ
| РегистрСведений.ПривязкаНоменклатурыККатегориямСайтов КАК Привязка
|ГДЕ
| Привязка.СайтКатегория.ВИерархии(&КорневаяПапкаСайта)";
Запрос.УстановитьПараметр("КорневаяПапкаСайта", КорневаяПапкаВыгружаемогоСайта);
Результат = Запрос.Выполнить().Выгрузить();
Альтернативой отдельному регистру сведений является создание справочника, подчиненного справочнику Номенклатура. В этом подчиненном справочнике создаются элементы, хранящие ссылку на виртуальную группу или сайт.
Посмотрим на особенности этого метода: он удобен, если на форме номенклатуры необходимо отображать табличную часть со списком всех сайтов и разделов, к которым относится данный конкретный товар. Однако при выборке каталога для выгрузки сайта запрос по подчиненному справочнику будет работать немного медленнее, чем по индексированному регистру сведений.
Рассмотрим еще один подход, широко применяемый при интеграции с современными CMS. Вместо того чтобы выстраивать сложную иерархию в 1С и передавать её на сайт, задача управления деревом каталога полностью делегируется административной панели интернет-магазина.
XML_ID (GUID), ценами и остатками.Если в используемой конфигурации 1С присутствует механизм сегментации (например, в 1С:Управление торговлей ред. 11 или 1С:ERP), мы можем использовать СегментыНоменклатуры для формирования разделов сайта.
Проанализируем преимущества сегментов: один товар может одновременно входить в неограниченное количество сегментов. Сегменты могут формироваться как вручную, так и автоматически по правилам (например, по пересечению брендов, видов номенклатуры или значений дополнительных реквизитов). В модуле выгрузки достаточно сопоставить каждый сегмент с соответствующим разделом сайта.
Выбор конкретного решения зависит от ваших задач: