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

Рассказываем, как решали задачу по разработке интернет-магазина с каталогом продукции, синхронизированным с внешней системой учета СБИС. Одним из ключевых требований была автоматизация разделов «Аналоги» и «С этим товаром покупают».

Выбор инструментов

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

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

Данный формат полностью идентичен интеграции с 1С, имеет ряд преимуществ, но вместе с ним и наследует все недостатки.

Кстати, ранее мы уже публиковали кейс с интеграцией СБИС и онлайн-каталога тут. Тогда мы использовали API СБИС и выгрузку в формате YML (Yandex Market Language). В этот раз была задача выгрузить штатные для СБИС связи «Аналогов» и «С этим товаром покупают», а в формате .yml этого сделать нельзя.

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

Кроме того, если работать с выгрузкой каталога СБИС в YML-формате, то необходимо сначала создать отдельный прайс-лист товаров. То есть из имеющегося каталога СБИС добавить товарные позиции в прайс-лист, например, «для сайта» и уже данный прайс-лист использовать в выгрузке.

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

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

  • import.xml;
  • offers.xml;
  • prices.xml;
  • rests.xml.

Их обработка возможна штатным функционалом платформы 1С-Битрикс.

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

Но для решения наших задач этот способ не подходит — ведь нам предстоит не просто загрузить как есть, а применить множественные преобразования значений при загрузке каталога. Для этого мы используем решение «Импорт из XML, YML, JSON. Загрузка каталога товаров 1С-Битрикс» от наших многолетних партнеров — компании Esolutions.

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

Сначала, произведя необходимые настройки в СБИС, мы получаем пакет нужных нам файлов штатным способом в привычном формате с удобной настройкой расписания.

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

При импорте многие моменты необходимо «подкручивать», ведь то, что есть в СБИС, не всегда прямо идентично тому, что мы хотим видеть на сайте. Вот лишь несколько преобразований, которые мы применили при обработке стандартных файлов, полученных через CommerceML:

  • Удаление родительской категории из иерархии. Внутри СБИС нужная нам номенклатура хранится по пути «Интернет-магазин/Категория/Подкатегория». На сайте же родительская категория «Интернет-магазин» нам не нужна.

Интеграция со СБИС по CommerceML с массовыми преобразованиями на лету
  • Отбор только нужных свойств из полученных с автоматической публикацией их в детальной карточке товара и в фильтре.

    Нужные свойства отмечаются «!» в начале имени, после попадания на сайт этот префикс удаляется. В результате получается простой, масштабируемый и понятный всем отбор необходимых свойств.

  • Использование одного и того же текста в анонсе и детальном описании. PHP-преобразованием мы получаем первые 200 символов из описания карточки товара СБИС и публикуем его в анонс, а полное описание попадает в детальное описание товара.
Интеграция со СБИС по CommerceML с массовыми преобразованиями на лету
  • Изменение формата валюты, отбор нужного склада, суммирование остатков по складам и запись отдельных значений по каждому складу. Стандартной интеграцией не получить остатки по каждому складу в отдельности: модуль всегда проведет суммирование и запишет в качестве значения доступного количества сумму. Поэтому если вам нужно показать наличие в конкретном пункте выдачи, стандартная выгрузка вам не подойдет.

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

Одной из самых важных задач, поставленных перед нами заказчиком, была выгрузка значений свойств товара «Аналоги» и «С этим товаром покупают». Они относятся к штатному функционалу СБИС, позволяющему для каждого товара выбрать позиции из уже имеющейся номенклатуры в качестве аналогов или сопутствующих. Но, как оказалось, выгрузить значения этих свойств стандартным способом невозможно. И мы чуть не потеряли заказчика, так как импорт связей «Аналоги» и «С этим товаром покупают» был ключевым требованием.

Первой сложностью стало то, что связка внутри СБИС происходит по собственному коду товара (он имеет вид X2126858), но в файл выгружается внешний код вида 19a9fa22-5156-4b66-8444-3c6546b18f6f, а в 1С-Битрикс связь товаров происходит через ID товара, назначаемого на сайте.

А еще выяснилось, что по протоколу CommerceML значения полей «Аналоги» и «С этим товаром покупают» не передаются совсем.

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

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

На первый взгляд, это решение подходило, но оказалось, чтобы получить эти данные, необходимо сначала получить id прайс-листа, его же в свою очередь можно получить, зная id точки продаж, а точку продаж можно создать если у вас есть лицензия на тариф «Профи» сервиса «Для магазинов (розница)» на СБИС. На момент написания кейса, стоимость тарифа составляла 15 000 р./год. Платить столько, чтобы получить ID точки продаж и зависимый от нее ID прайс-листа вместе с лишним для нас функционалом магазина, настройкой кассы и многим другим ненужным, сочли неуместным и мы, и заказчик.

В процессе мозгового штурма пришла идея: «не может ли внешний код товара, полученный через интеграцию по протоколу CommerceML, совпадать с внешним кодом из недосягаемого без лицензии прайс-листа? Чтобы проверить это, мы создали пробную интеграцию, получили API-ключи и отправили запрос на получение подробной информации по товару с внешним кодом 16013ac4-60f9-46e6-995e-8ac838f98aa9.

В секции related_products мы получили массив, в котором наряду с прочей информацией есть нужные нам внешние коды товаров, связанных с запрашиваемым в поле «С этим товаром покупают». Ура!

Но радость оказалась преждевременной. На момент реализации нами данного решения API СБИС не позволяла выгрузить таким способом еще и «Аналоги». На вопрос в поддержку СБИС, почему мы не можем их получить, пришел шаблонный ответ о возможном дополнении функционала API в дальнейшем.

Свое решение

В итоге в шаге от успеха, уперевшись в стену, выстроенную СБИСовцами, мы приняли решение присвоить каждому товару дополнительный номер — штрихкод. Это можно легко сделать с помощью стандартного функционала СБИС.

Далее мы создали для всех товаров в СБИС новые свойства «Аналоги (штрихкоды…)» и «С этим товаром покупают (штрихкоды…)». В их поля вручную вписали штрихкоды товаров — аналогичных и покупаемых совместно — относящихся к конкретной карточке. Эти свойства импортируются на сайт как обычные характеристики.

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

Этот же штрихкод товара мы решили использовать как уникальный идентификатор, единый для сайта и СБИС. Поэтому в настройках импорта задали замену внешнего кода товара, получаемого из стандартной выгрузки, на штрихкод. А также прописали использование значения штрихкода в качестве символьного кода элемента каталога. Это, помимо прочего, обеспечивает единообразие url товарных карточек.

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

Штрихкод стал универсальным номером товара, по которому его легко можно найти и в публичном интерфейсе сайта, и в его административной части, и в СБИС.

В результате при импорте на сайте создаются товарные карточки, у каждой из которых в качестве внешнего кода указан ее уникальный штрихкод, а в отдельных свойствах перечислены штрихкоды связанных товаров. Затем модуль импорта находит эти товары на сайте по значению штрихкода и в штатное для «1С-Битрикс» поле карточки типа «Привязка к элементам» вписывает присвоенный на сайте ID этих товаров, создавая необходимые связи.

Таким образом, задачу решили, хотя и не так красиво, как хотелось бы. Однако у нашего решения есть и плюс — без него, при использовании API, нужно было бы запрашивать информацию по каждому товару отдельно, а, значит, при ассортименте каталога в 5000 позиций нам пришлось бы отправлять на сервер СБИС 5000 запросов и получать 5000 ответов. Это увеличило бы время импорта на порядок.

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

Автоматизация стикеров — специальных меток для товарных карточек — частично уже решена командой «Аспро» — разработчиком решения «Аспро: Максимум», на котором мы реализовали наш проект. Ребята, как и мы, постоянно ищут возможности автоматизировать рутинные процессы, и имеют в своем арсенале простое, но очень удобное решение для автоматизации стикеров «Новинка» и «Специальное предложение».

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

Ежедневно cron-задание проверяет условия и принимает решение: установить, оставить или снять тот или иной стикер у каждого товара.

Мы же сконцентрировались на более важном для нас — на установке стикера «Есть аналоги». В каталоге заказчика для некоторых товаров, в том числе не всегда представленных в наличии, есть аналоги. И нам нужно было реализовать автоматический поиск таких товаров и установку на них соответствующего стикера.

По аналогии с решением «Аспро» по «Новинкам» и «Спецпредложениям» мы настроили проверку в XML-файле, полученном от СБИС, наличия у конкретного товара данных в секции «Аналоги».

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

Если значения в массиве более 0, то стикер устанавливается, равно 0 — отметка снимается.

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

В «1С-Битрикс» есть стандартная настройка инфоблока, позволяющая преобразовывать размер изображения и накладывать водяной знак при добавлении анонсной и детальной картинок.

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

Но на дополнительные изображения штатно наложить водяной знак нельзя.

Поэтому мы использовали функционал, внедренный в последней версии модуля импорта от Esolutions. При обработке свойств с изображениями теперь доступно наложение водяного знака на любые поля с типом «картинка».

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

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

Разработанный нами сайт имеет все атрибуты стандартного интернет-магазина:

  • личный кабинет с данными покупателя, историей заказов, возможностью смены собственных данных;
  • функционал сохранения отдельных товаров в качестве «Избранных»;
  • полноценную корзину с возможностью оформления заказа, выбрав способ оплаты заказа и доставки.

Дополнительный требованием заказчика стала реализация отображения «летающей» корзины в публичной части сайта.

Расширенный режим отображения корзины с боковой панелью.<br />
Расширенный режим отображения корзины с боковой панелью.

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

Для удобства использования сайта на всех устройствах мы реализовали отображения корзины в трех режимах:

  • На десктопных устройствах с шириной экрана от 1200 пикселей выводится одновременно и обычный фиксированный виджет корзины, и боковой — расширенный, как это показано на скриншоте выше. При этом боковая панель появляется только тогда, когда в корзину добавляется товар. Решение работает на Ajax и дружит с автокомпозитом.
    Боковая панель позволяет быстро управлять перечнем и количеством отложенных товаров, и при готовности — сразу перейти к оформлению заказа.

  • На десктопных устройствах шириной меньше 1200 пикселей отображается только корзина в фиксированной нижней панели. В ней отражается количество товаров и сумма заказа.

Интеграция со СБИС по CommerceML с массовыми преобразованиями на лету
  • На мобильных устройствах показывается только число товаров у иконки, размещенной в фиксированной шапке.
Интеграция со СБИС по CommerceML с массовыми преобразованиями на лету

Результат

В рамках проекта интернет-магазина «Агросервис "Стратегия"» были реализованы:

  • Полностью автоматизированная система управления каталогом товаров из СБИС по протоколу CommerceML, обеспечивающая импорт на сайт подробной информация о товаре, включая описание, картинки, цены, складские остатки, свойства. Все редактирование каталога выполняется в системе учета СБИС, никаких дополнительных действий на стороне сайта не требуется.
  • Массовые преобразования передаваемой номенклатуры из СБИС «на лету» в процессе импорта.
  • Связка на сайте передаваемого товара из СБИС с другими позициями для наполнения блоков «Аналоги» и «С этим товаром покупают».
  • Интеллектуальная установка стикеров «Новинка», «Специальное предложение» и «Есть аналоги».
  • Автоматический отбор основного и дополнительных изображений, нанесение водяного знака на все картинки.
  • Личный кабинет пользователя на сайте и уникальное кроссплатформенное отображение корзины товаров.

Разработанный digital-агентством «Винтра» сайт интернет-магазина —new.strat96.ru — полностью выполняет требования заказчика и оптимизирован для удобства использования целевой аудиторией. Интеграция сайта со СБИС, реализованная с применением нестандартных решений, обеспечивает постоянную актуальность наполнения каталога и управление им в режиме одного окна.

Как вам такая интеграции со СБИС? Будем рады прочитать ваше мнение в комментариях. И если вам потребуется импорт каталога в интернет-магазин из любого внешнего источника — пишите, всегда поможем.

11
Начать дискуссию