В типовых конфигурациях 1С (в частности, 1С:Управление торговлей 10.3) механизм обмена с сайтом по стандарту CommerceML 2 по умолчанию формирует структуру каталога строго на основе иерархии папок справочника Номенклатура. Однако в реальной практике структура каталога интернет-магазина часто не совпадает с внутренним складским или управленческим учетом компании.
Разберем типичную задачу: в 1С создан отдельный справочник РазделыСайта, а в номенклатуре добавлен реквизит РазделСайта. Необходимо выгружать товары на сайт именно по этой новой структуре, игнорируя стандартные группы номенклатуры и исключая из обмена позиции без указанного раздела.
Рассмотрим два основных пути решения этой задачи: настройка обмена с помощью специализированного модуля интеграции (без доработки кода) и ручная модификация алгоритмов типовой выгрузки в конфигураторе.
Если интернет-магазин работает под управлением CMS (например, 1С-Битрикс), наиболее удобным решением является внедрение официального специализированного модуля обмена. В нем уже заложен механизм создания произвольного виртуального дерева каталога.
Разберем процесс настройки по шагам:
Операции → Планы обмена → Обмен с WEB-сайтом (или соответствующий пункт подсистемы) и создаем новый узел настройки.Такой подход позволяет гибко управлять структурой сайта без изменения типового программного кода и дает возможность при необходимости помещать один и тот же товар сразу в несколько разделов интернет-магазина.
Если используется типовой модуль или требуется жестко связать логику выгрузки со справочником РазделыСайта, внесем изменения в алгоритмы формирования XML-пакета. Выгрузка строится на базе обработки ОбменССайтом.
Проанализируем архитектуру пакета CommerceML: структура дерева передается в теге <Группы>, а в каждом теге <Товар> передается вложенный блок <Группы><Ид>...</Ид></Группы>, содержащий GUID соответствующего раздела.
Рассмотрим, как изменить выгрузку в кодовой базе обработки ОбменССайтом:
Номенклатура или ЦеновыеГруппы). Заменяем источник выборки на наш справочник РазделыСайта. Для каждого узла и подраздела формируем тег группы, передавая в <Ид> строковый GUID элемента: Строка(Раздел.УникальныйИдентификатор()).Номенклатура.Родитель на добавленный реквизит Номенклатура.РазделСайта. При записи XML-узла товара передаем GUID выбранного раздела.Посмотрим на пример текста запроса для выборки номенклатуры с отбором по заполненному разделу сайта:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
Номенклатура.Наименование КАК Наименование,
Номенклатура.Артикул КАК Артикул,
Номенклатура.РазделСайта КАК РазделСайта,
Номенклатура.РазделСайта.УникальныйИдентификатор КАК ИдРаздела
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ЭтоГруппа
И Номенклатура.РазделСайта <> ЗНАЧЕНИЕ(Справочник.РазделыСайта.ПустаяСсылка)
И НЕ Номенклатура.ПометкаУдаления
При формировании узла товара в XML для тега идентификатора группы используем полученный GUID:
ЗаписьXML.ЗаписатьНачалоЭлемента("Группы");
ЗаписьXML.ЗаписатьНачалоЭлемента("Ид");
ЗаписьXML.ЗаписатьТекст(Строка(Выборка.РазделСайта.УникальныйИдентификатор()));
ЗаписьXML.ЗаписатьКонецЭлемента(); // Ид
ЗаписьXML.ЗаписатьКонецЭлемента(); // Группы
Разберем нюансы, на которые необходимо обратить внимание перед запуском выгрузки: