Интеграция со СБИС по CommerceML с массовыми преобразованиями на лету
ЗаказчикАгросервис «Стратегия» — интернет-магазин запчастей для сельскохозяйственной техники. ЗадачаРазработать интернет-магазина с каталогом продукции, синхронизированным с внешней системой учета СБИС. Автоматизировать разделы «Аналоги» (кроссы) и «С этим товаром покупают»…
Выбор инструментов
Для интеграции сайта и СБИС на этот раз мы использовали протокол CommerceML.
Данный формат полностью идентичен интеграции с 1С, имеет ряд преимуществ, но вместе с ним и наследует все недостатки.
Кстати, ранее мы уже публиковали кейс с интеграцией СБИС и онлайн-каталога тут. Тогда мы использовали API СБИС и выгрузку в формате YML (Yandex Market Language). В этот раз была задача выгрузить штатные для СБИС связи «Аналогов» и «С этим товаром покупают», а в формате .yml этого сделать нельзя.
Кроме того, если работать с выгрузкой каталога СБИС в YML-формате, то необходимо сначала создать отдельный прайс-лист товаров. То есть из имеющегося каталога СБИС добавить товарные позиции в прайс-лист, например, «для сайта» и уже данный прайс-лист использовать в выгрузке.Как оказалось, данное решение очень неудобное, ведь администратору СБИС постоянно нужно помнить, что при добавлении товара в основную номенклатуру его также нужно добавить и в прайс-лист для выгрузки на сайт. Это простое действие, но оно отнимает много времени и приносит неудобства, плюс заставляет держать в памяти саму необходимость процесса.
По стандарту CommerceML можно легко выгрузить практически все, что есть в товарной карточке, в привычном формате, пакетом, состоящим из файлов:
- import.xml;
- offers.xml;
- prices.xml;
- rests.xml.
Их обработка возможна штатным функционалом платформы 1С-Битрикс.
Но для решения наших задач этот способ не подходит — ведь нам предстоит не просто загрузить как есть, а применить множественные преобразования значений при загрузке каталога. Для этого мы используем решение «Импорт из XML, YML, JSON. Загрузка каталога товаров 1С-Битрикс» от наших многолетних партнеров — компании Esolutions.
Сначала, произведя необходимые настройки в СБИС, мы получаем пакет нужных нам файлов штатным способом в привычном формате с удобной настройкой расписания.
Выгрузка возможна также в ручном режиме в один клик.
Настройка импорта
При импорте многие моменты необходимо «подкручивать», ведь то, что есть в СБИС, не всегда прямо идентично тому, что мы хотим видеть на сайте. Вот лишь несколько преобразований, которые мы применили при обработке стандартных файлов, полученных через CommerceML:
- Удаление родительской категории из иерархии. Внутри СБИС нужная нам номенклатура хранится по пути «Интернет-магазин/Категория/Подкатегория». На сайте же родительская категория «Интернет-магазин» нам не нужна.
- Отбор только нужных свойств из полученных с автоматической публикацией их в детальной карточке товара и в фильтре.
Нужные свойства отмечаются »!» в начале имени, после попадания на сайт этот префикс удаляется. В результате получается простой, масштабируемый и понятный всем отбор необходимых свойств. - Использование одного и того же текста в анонсе и детальном описании. PHP-преобразованием мы получаем первые 200 символов из описания карточки товара СБИС и публикуем его в анонс, а полное описание попадает в детальное описание товара.
- Изменение формата валюты, отбор нужного склада, суммирование остатков по складам и запись отдельных значений по каждому складу. Стандартной интеграцией не получить остатки по каждому складу в отдельности: модуль всегда проведет суммирование и запишет в качестве значения доступного количества сумму. Поэтому если вам нужно показать наличие в конкретном пункте выдачи, стандартная выгрузка вам не подойдет.
Импорт значений свойств «Аналоги» и «С этим товаром покупают»
Одной из самых важных задач, поставленных перед нами заказчиком, была выгрузка значений свойств товара «Аналоги» и «С этим товаром покупают». Они относятся к штатному функционалу СБИС, позволяющему для каждого товара выбрать позиции из уже имеющейся номенклатуры в качестве аналогов или сопутствующих. Но, как оказалось, выгрузить значения этих свойств стандартным способом невозможно. И мы чуть не потеряли заказчика, так импорт связей «Аналоги» и «С этим товаром покупают» был ключевым требованием.
Первой сложностью стало то, что связка внутри СБИС происходит по собственному коду товара (он имеет вид 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. При обработке свойств с изображениями теперь доступно наложение водяного знака на любые поля с типом «картинка».
Благодаря этому все изображения товара обрабатываются однообразно и получают на выходе единый водяной знак.
Настройка «летающей» корзины
Разработанный нами сайт имеет все атрибуты стандартного интернет-магазина:
- личный кабинет с данными покупателя, историей заказов, возможностью смены собственных данных;
- функционал сохранения отдельных товаров в качестве «Избранных»;
- полноценную корзину с возможностью оформления заказа, выбрав способ оплаты заказа и доставки.
Дополнительный требованием Заказчика стала реализация отображения «Летающей корзины» в публичной части сайта. Его целевая аудитория — в основном снабженцы и менеджеры по закупкам. Чаще всего они заходят в интернет-магазин с десктопных устройств на рабочем месте, набирают множество товаров и комплектуют сложные заказы. Поэтому им крайне необходимо видеть сразу всю корзину и управлять товарами в ней без дополнительного перехода на отдельную страницу в саму корзину.
Для удобства использования сайта на всех устройствах мы реализовали отображения корзины в трех режимах:
На десктопных устройствах с шириной экрана от 1200 пикселей показывается одновременно и обычный фиксированный виджет корзины, и боковой — расширенный. При этом боковая панель появляется только тогда, когда в корзину добавляется товар. Решение работает на Ajax и дружит с автокомпозитом.
Боковая панель позволяет быстро управлять перечнем и количеством отложенных товаров, и при готовности — сразу перейти к оформлению заказа.
На десктопных устройствах шириной меньше 1200 пикселей будет показана только корзина в фиксированной нижней панели.
В ней отражается количество товаров и сумма заказа.
На мобильных устройствах показывается только число товаров у иконки, размещенной в фиксированной шапке.
Результат
В рамках проекта интернет-магазина «Агросервис «Стратегия» были реализованы:
- Полностью автоматизированная система управления каталогом товаров из СБИС по протоколу CommerceML, обеспечивающая импорт на сайт подробной информация о товаре, включая описание, картинки, цены, складские остатки, свойства. Все редактирование каталога выполняется в системе учета СБИС, никаких дополнительных действий на стороне сайта не требуется.
- Массовые преобразования передаваемой номенклатуры из СБИС «на лету» в процессе импорта.
- Связка на сайте передаваемого товара из СБИС с другими позициями для наполнения блоков «Аналоги» и «С этим товаром покупают».
- Интеллектуальная установка стикеров «Новинка», «Специальное предложение» и «Есть аналоги».
- Автоматический отбор основного и дополнительных изображений, нанесение водяного знака на все картинки.
- Личный кабинет пользователя на сайте и уникальное кроссплатформенное отображение корзины товаров.
Итог
Разработанный digital-агентством «Винтра» сайт интернет-магазина полностью выполняет требования Заказчика и оптимизирован для удобства использования целевой аудиторией. Интеграция сайта со СБИС, реализованная с применением нестандартных решений, обеспечивает постоянную актуальность наполнения каталога и управление им в режиме одного окна.
Перейти на сайт
Полный текст статьи читайте на CMS Magazine