Интеграция со СБИС по CommerceML с массовыми преобразованиями на лету

Выбор инструментов
Для интеграции сайта и СБИС на этот раз мы использовали протокол CommerceML.

Данный формат полностью идентичен интеграции с 1С, имеет ряд преимуществ, но вместе с ним и наследует все недостатки.
Кстати, ранее мы уже публиковали кейс с интеграцией СБИС и онлайн-каталога тут.
Тогда мы использовали API СБИС и выгрузку в формате YML (Yandex Market Language). В этот раз была задача выгрузить штатные для СБИС связи «Аналогов» и «С этим товаром покупают», а в формате .yml этого сделать нельзя.
Кроме
того, если работать с выгрузкой каталога СБИС в YML-формате, то необходимо сначала создать отдельный прайс-лист товаров. То есть из имеющегося каталога СБИС добавить товарные позиции в прайс-лист, например, «для сайта» и уже данный прайс-лист использовать в выгрузке. Как
оказалось, данное решение очень неудобное, ведь администратору СБИС постоянно нужно помнить, что при добавлении товара в основную номенклатуру его также нужно добавить и в прайс-лист для выгрузки на сайт. Это простое действие, но оно отнимает много времени и приносит неудобства, плюс заставляет держать в памяти саму необходимость процесса. По
стандарту CommerceML можно легко выгрузить практически все, что есть в товарной карточке, в привычном формате, пакетом, состоящим из файлов: Их обработка возможна штатным функционалом платформы 1С-Битрикс. Но
для решения наших задач этот способ не подходит — ведь нам предстоит не
просто загрузить как есть, а применить множественные преобразования значений при загрузке каталога. Для этого мы используем решение «Импорт из XML, YML, JSON. Загрузка каталога товаров 1С-Битрикс» от наших многолетних партнеров — компании Esolutions. Сначала,
произведя необходимые настройки в СБИС, мы получаем пакет нужных нам файлов штатным способом в привычном формате с удобной настройкой расписания. При
импорте многие моменты необходимо «подкручивать», ведь то, что есть в СБИС, не всегда прямо идентично тому, что мы хотим видеть на сайте. Вот лишь несколько преобразований, которые мы применили при обработке стандартных файлов, полученных через CommerceML: Нужные свойства отмечаются «!» в начале имени, после попадания на сайт этот префикс удаляется. В результате получается простой, масштабируемый и понятный всем отбор необходимых свойств. Одной
из самых важных задач, поставленных перед нами заказчиком, была выгрузка значений свойств товара «Аналоги» и «С этим товаром покупают». Они относятся к штатному функционалу СБИС, позволяющему для каждого товара выбрать позиции из уже имеющейся номенклатуры в качестве аналогов
или сопутствующих. Но, как оказалось, выгрузить значения этих свойств стандартным способом невозможно. И мы чуть не потеряли заказчика, так как импорт связей «Аналоги» и «С этим товаром покупают» был ключевым требованием. Первой
сложностью стало то, что связка внутри СБИС происходит по собственному коду товара (он имеет вид X2126858), но в файл выгружается внешний код вида 19a9fa22-5156-4b66-8444-3c6546b18f6f, а в 1С-Битрикс связь товаров происходит через ID товара, назначаемого на сайте. А еще выяснилось, что по протоколу CommerceML значения полей «Аналоги» и «С этим товаром покупают» не передаются совсем. Изучая
документацию, мы обнаружили, что секция «С этим товаром покупают» может
быть выгружена при обращении к товару через API. Нужно лишь знать внешний код товара. Получить его можно из списка товаров прайс-листа. На
первый взгляд, это решение подходило, но оказалось, чтобы получить эти данные, необходимо сначала получить id прайс-листа, его же в свою очередь можно получить, зная id точки продаж, а точку продаж можно создать если у вас есть лицензия на тариф «Профи» сервиса «Для магазинов
(розница)» на СБИС. На момент написания кейса, стоимость тарифа составляла 15 000 р./год. Платить столько, чтобы получить ID точки продаж и зависимый от нее ID прайс-листа вместе с лишним для нас функционалом магазина, настройкой кассы и многим другим ненужным, сочли неуместным и мы, и заказчик. В
процессе мозгового штурма пришла идея: "не может ли внешний код товара,
полученный через интеграцию по протоколу CommerceML, совпадать с внешним кодом из недосягаемого без лицензии прайс-листа? Чтобы проверить
это, мы создали пробную интеграцию, получили API-ключи и отправили запрос на получение подробной информации по товару с внешним кодом 16013ac4-60f9-46e6-995e-8ac838f98aa9. В
секции related_products мы получили массив, в котором наряду с прочей информацией есть нужные нам внешние коды товаров, связанных с запрашиваемым в поле «С этим товаром покупают». Ура! Но
радость оказалась преждевременной. На момент реализации нами данного решения API СБИС не позволяла выгрузить таким способом еще и «Аналоги». На вопрос в поддержку СБИС, почему мы не можем их получить, пришел шаблонный ответ о возможном дополнении функционала API в дальнейшем. В
итоге в шаге от успеха, уперевшись в стену, выстроенную СБИСовцами, мы приняли решение присвоить каждому товару дополнительный номер — штрихкод. Это можно легко сделать с помощью стандартного функционала СБИС. Далее
мы создали для всех товаров в СБИС новые свойства «Аналоги (штрихкоды...)» и «С этим товаром покупают (штрихкоды...)». В их поля вручную вписали штрихкоды товаров — аналогичных и покупаемых совместно —
относящихся к конкретной карточке. Эти свойства импортируются на сайт как обычные характеристики. Этот
же штрихкод товара мы решили использовать как уникальный идентификатор,
единый для сайта и СБИС. Поэтому в настройках импорта задали замену внешнего кода товара, получаемого из стандартной выгрузки, на штрихкод. А
также прописали использование значения штрихкода в качестве символьного
кода элемента каталога. Это, помимо прочего, обеспечивает единообразие url товарных карточек. Штрихкод
стал универсальным номером товара, по которому его легко можно найти и в
публичном интерфейсе сайта, и в его административной части, и в СБИС. В
результате при импорте на сайте создаются товарные карточки, у каждой из которых в качестве внешнего кода указан ее уникальный штрихкод, а в отдельных свойствах перечислены штрихкоды связанных товаров. Затем модуль импорта находит эти товары на сайте по значению штрихкода и в штатное для «1С-Битрикс» поле карточки типа «Привязка к элементам» вписывает присвоенный на сайте ID этих товаров, создавая необходимые связи. Таким
образом, задачу решили, хотя и не так красиво, как хотелось бы. Однако у
нашего решения есть и плюс — без него, при использовании API, нужно было бы запрашивать информацию по каждому товару отдельно, а, значит, при ассортименте каталога в 5000 позиций нам пришлось бы отправлять на сервер СБИС 5000 запросов и получать 5000 ответов. Это увеличило бы время импорта на порядок. Автоматизация
стикеров — специальных меток для товарных карточек — частично уже решена командой «Аспро» — разработчиком решения «Аспро: Максимум», на котором мы реализовали наш проект. Ребята, как и мы, постоянно ищут возможности автоматизировать рутинные процессы, и имеют в своем арсенале
простое, но очень удобное решение для автоматизации стикеров «Новинка» и
«Специальное предложение». Ежедневно
cron-задание проверяет условия и принимает решение: установить, оставить или снять тот или иной стикер у каждого товара. Мы
же сконцентрировались на более важном для нас — на установке стикера «Есть аналоги». В каталоге заказчика для некоторых товаров, в том числе не всегда представленных в наличии, есть аналоги. И нам нужно было реализовать автоматический поиск таких товаров и установку на них соответствующего стикера. По
аналогии с решением «Аспро» по «Новинкам» и «Спецпредложениям» мы настроили проверку в XML-файле, полученном от СБИС, наличия у конкретного товара данных в секции «Аналоги». Если значения в массиве более 0, то стикер устанавливается, равно 0 — отметка снимается. В
«1С-Битрикс» есть стандартная настройка инфоблока, позволяющая преобразовывать размер изображения и накладывать водяной знак при добавлении анонсной и детальной картинок. Но на дополнительные изображения штатно наложить водяной знак нельзя. Поэтому
мы использовали функционал, внедренный в последней версии модуля импорта от Esolutions. При обработке свойств с изображениями теперь доступно наложение водяного знака на любые поля с типом «картинка». Благодаря этому все изображения товара обрабатываются однообразно и получают на выходе единый водяной знак. Разработанный нами сайт имеет все атрибуты стандартного интернет-магазина: Дополнительный требованием заказчика стала реализация отображения «летающей» корзины в публичной части сайта. Целевая
аудитория интернет-магазина — в основном снабженцы и менеджеры по закупкам. Чаще всего они заходят в интернет-магазин с десктопных устройств на рабочем месте, набирают множество товаров и комплектуют сложные заказы. Поэтому им крайне необходимо видеть сразу всю корзину и управлять товарами в ней без дополнительного перехода на отдельную страницу в саму корзину. Для удобства использования сайта на всех устройствах мы реализовали отображения корзины в трех режимах: В рамках проекта интернет-магазина «Агросервис „Стратегия“» были реализованы: Разработанный digital-агентством «Винтра» сайт интернет-магазина — new.strat96.ru
— полностью выполняет требования заказчика и оптимизирован для удобства
использования целевой аудиторией. Интеграция сайта со СБИС, реализованная с применением нестандартных решений, обеспечивает постоянную актуальность наполнения каталога и управление им в режиме одного окна. Как вам такая интеграции со СБИС? Будем рады прочитать ваше мнение в комментариях. И если вам потребуется импорт каталога в интернет-магазин из любого внешнего источника — пишите, всегда поможем.





Настройка импорта




Импорт значений свойств «Аналоги» и «С этим товаром покупают»



Свое решение





Автоматизированное присваивание стикеров товарам


Нанесение водяного знака на все изображения



Настройка «летающей» корзины

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

Результат