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