Для интеграции сайта и СБИС на этот раз мы использовали протокол 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 — полностью выполняет требования заказчика и оптимизирован для удобства использования целевой аудиторией. Интеграция сайта со СБИС, реализованная с применением нестандартных решений, обеспечивает постоянную актуальность наполнения каталога и управление им в режиме одного окна.
Как вам такая интеграции со СБИС? Будем рады прочитать ваше мнение в комментариях. И если вам потребуется импорт каталога в интернет-магазин из любого внешнего источника — пишите, всегда поможем.