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

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

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

Разберем архитектурные ограничения типовых конфигураций 1С (1С:Комплексная автоматизация 2, 1С:ERP, 1С:Управление торговлей 11), выясним, почему прямое дублирование папок не работает, и рассмотрим эффективные варианты реализации: от встроенных возможностей обмена до доработки с помощью механизма расширений.

Ограничение иерархии справочника «Номенклатура»

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

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

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

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

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

При выполнении обмена по протоколу CommerceML система сформирует XML-пакет, где в описании товара узел <Группы> будет содержать идентификаторы сразу всех выбранных разделов. Интернет-магазин примет эту структуру и корректно разместит товар во всех указанных секциях.

Вариант 2. Автоматизация связей через регистр сведений и расширение

Рассмотрим ситуацию, когда номенклатура загружается от поставщика автоматически (через API, Excel или XML) в больших объемах. Вручную настраивать пользовательское дерево для тысяч позиций нецелесообразно. Для полной автоматизации процесса реализуем архитектурную доработку через механизм расширений, сохраняя конфигурацию на поддержке.

  1. Хранение структуры: Создадим в расширении вспомогательный справочник категорий сайта и непериодический независимый регистр сведений. В качестве измерений укажем Номенклатура (тип СправочникСсылка.Номенклатура) и Категория.
  2. Загрузка данных: При обработке файла или ответа API поставщика основную позицию помещаем в одну базовую папку справочника Номенклатура (например, по типу учета или бренду), а все сопутствующие категории поставщика программно записываем в созданный регистр сведений.
  3. Модификация обмена: В расширении перехватываем процедуру выгрузки каталога на сайт. В момент формирования тега <Группы> выполняем запрос к нашему регистру сведений и дописываем все найденные категории в XML-файл обмена.

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


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

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

Полученные идентификаторы добавляются в тег <Группы> стандартного пакета CommerceML рядом с основным родителем, благодаря чему сайт связывает позицию со всеми нужными узлами без изменения типовой логики учета в 1С.

Вариант 3. Аналитика через «Сегменты номенклатуры» и умные фильтры CMS

Проанализируем альтернативный сценарий, когда разделы вроде «Кабинет психолога» или «Старшая группа» являются не жесткими категориями каталога, а динамическими выборками или тематическими подборками.

  1. В 1С включаем функциональную опцию Сегменты номенклатуры (раздел администрирования CRM и маркетинга).
  2. Формируем сегменты по динамическим правилам или вручную, распределяя товары по целевым назначениям.
  3. Если CMS интернет-магазина поддерживает фасетные фильтры, теги или посадочные страницы, передаем принадлежность товара к группе как дополнительный реквизит (свойство) или через отдельный признак.
  4. На стороне CMS страница категории формируется динамически как выборка по фильтру, что избавляет от необходимости дублировать физические привязки к разделам каталога.

Важные настройки на стороне интернет-магазина

Обратим особое внимание на логику работы модуля интеграции самой CMS (например, 1C-Битрикс). Если вы привязываете товары к разделам вручную на стороне сайта, то при очередной стандартной выгрузке из 1С эти привязки могут быть сброшены.

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

← На главную