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

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

При интеграции 1С с несколькими интернет-магазинами часто возникает ситуация, когда для каждого сайта требуется своя собственная структура каталога товаров. В базовой архитектуре 1С справочник Номенклатура имеет строго моно-иерархическую структуру — одна позиция номенклатуры может находиться только в одной конкретной группе (иметь только одного родителя). В то же время на разных витринах один и тот же товар может находиться в совершенно разных категориях или даже одновременно в нескольких разделах.

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

Вариант 1. Использование штатного механизма «Пользовательское дерево групп»

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

Разберем по шагам, как работает данный подход:

  1. В узле обмена с конкретным сайтом включается режим использования произвольного дерева групп.
  2. Пользователь или контент-менеджер создаёт виртуальное дерево разделов прямо в форме настройки узла обмена.
  3. Товары и стандартные папки 1С перетаскиваются мышью в соответствующие узлы созданного виртуального дерева.
  4. При выгрузке модуль обмена формирует структуру каталога CommerceML на основе этого виртуального дерева, оставляя основной справочник Номенклатура без изменений.

Преимущества: Не требуется изменение конфигурации 1С.
Ограничения: Ручная настройка дерева может быть трудоемкой при больших объемах номенклатуры (десятки тысяч позиций).

Вариант 2. Создание отдельного иерархического справочника и регистра сведений

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

Выясним причину эффективности этой схемы: основной справочник Номенклатура не засоряется «пустыми» дублирующими группами, а связи «товар — категория» хранятся в независимой структуре.

Для реализации выполняются следующие шаги:

  1. Создаем иерархический справочник (например, СтруктураКаталоговСайтов), где верхний уровень иерархии определяет конкретный сайт или проект, а вложенные элементы — разделы витрины.
  2. Создаем регистр сведений ПривязкаНоменклатурыККатегориямСайтов с измерениями:
    • СайтКатегория (ссылка на справочник СтруктураКаталоговСайтов)
    • Номенклатура (ссылка на справочник Номенклатура)
  3. Настраиваем удобную форму для пользователей (с использованием динамических списков и перетаскивания drag-and-drop) для оперативного распределения товаров по виртуальным папкам.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Привязка.СайтКатегория КАК КатегорияСайта,
    |	Привязка.Номенклатура КАК Товар
    |ИЗ
    |	РегистрСведений.ПривязкаНоменклатурыККатегориямСайтов КАК Привязка
    |ГДЕ
    |	Привязка.СайтКатегория.ВИерархии(&КорневаяПапкаСайта)";

Запрос.УстановитьПараметр("КорневаяПапкаСайта", КорневаяПапкаВыгружаемогоСайта);
Результат = Запрос.Выполнить().Выгрузить();

Вариант 3. Использование подчиненного справочника

Альтернативой отдельному регистру сведений является создание справочника, подчиненного справочнику Номенклатура. В этом подчиненном справочнике создаются элементы, хранящие ссылку на виртуальную группу или сайт.

Посмотрим на особенности этого метода: он удобен, если на форме номенклатуры необходимо отображать табличную часть со списком всех сайтов и разделов, к которым относится данный конкретный товар. Однако при выборке каталога для выгрузки сайта запрос по подчиненному справочнику будет работать немного медленнее, чем по индексированному регистру сведений.

Вариант 4. Перенос иерархии на сторону CMS (плоская выгрузка)

Рассмотрим еще один подход, широко применяемый при интеграции с современными CMS. Вместо того чтобы выстраивать сложную иерархию в 1С и передавать её на сайт, задача управления деревом каталога полностью делегируется административной панели интернет-магазина.

  1. Из 1С выгружается единый список товаров (или товары в одной технической папке) вместе со своими идентификаторами XML_ID (GUID), ценами и остатками.
  2. В административной панели сайта контент-менеджер единоразово распределяет товары по разделам и создаёт меню любой степени вложенности.
  3. При последующих обменах 1С обновляет только коммерческие данные (цены, остатки, характеристики) по идентификаторам товаров, не затрагивая структуру каталога на сайте.

Вариант 5. Использование сегментов номенклатуры

Если в используемой конфигурации 1С присутствует механизм сегментации (например, в 1С:Управление торговлей ред. 11 или 1С:ERP), мы можем использовать СегментыНоменклатуры для формирования разделов сайта.

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

Резюме и рекомендации

Выбор конкретного решения зависит от ваших задач:

← На главную