Импорт опций и наборов товаров из 1С в Битрикс

Зачем передавать на сайт наборы из 1С

Компания «ГольфСтрим» — поставщик оборудования для хлебопекарных и кондитерских производств. С 2007 года компания является не только дистрибьютором, но и производителем оборудования нескольких собственных торговых марок.

В 2017 году компания решила заменить старенький неадаптивный сайт на HostCMS на новый на 1С-Битрикс. В качестве дизайна использовали готовое решение от Аспро. Несколько советов по переносу сайта на 1С-Битрикс в отдельной статье.

устаревший сайт Гольфстрим
Устаревший сайт на HostCMS.

ГольфСтрим обратились к нам за помощью в сложной задаче — доработке импорта товаров из 1С в Битрикс с целью внедрения наборов и опций в каталог.

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

Пример: есть условная хлебопечь за полмиллиона рублей. К ней еще за 100 тысяч можно купить опции «Вытяжной зонт» и «Душирующее устройство». Кто-то берет печь без опций. Кому-то нужна их комбинация. У некоторых товаров бывает до 15 различных опций.

Число вариантов поставки измеряется сотнями.

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

Похожая ситуация с наборами товаров. К печи сразу предлагается подставка и расстоечный шкаф. Это отдельные товары. Их можно покупать отдельно. Но удобней — в наборе.

товар-набор и его комплектующие

Основная сложность задачи — в интеграции с 1С. Типовая выгрузка не передает данные по опциям и наборам с привязкой к оборудованию. В сотрудничестве с IT-отделом компании «Гольфстрим», мы смогли настроить выгрузку и связи, о структуре данных ниже.

Структура данных для интеграции наборов и опций между 1С и сайтом

Первоначальную установку и настройку готового сайта выполнила компания Аспро. К нам сайт пришел «свеженький». Базовая интеграция с 1С настроена. Можно работать.

Задача по доработке опций в каталоге выглядела так:

  1. В карточке товара можно выбирать необходимые опции.
  2. Рядом с каждой опцией указана ее цена.
  3. Выбор опций меняет итоговую стоимость товара.
  4. В интерфейсе карточки товара должны быть два типа опций:
    1. Чекбокс (значения «да/нет»)
    2. Выпадающий список (несколько вариантов одной опции)
      опции-флажки и опции-списки
  5. Каждая опция не связана с другими и может добавляться независимо от них.
  6. В корзине в наименовании добавленного товара должны указываться выбранные опции.
  7. Отличие от  стандартных (SKU) в том, что в 1С не будут храниться все возможные торговые предложения (характеристики), но будет информация о всех опциях конкретного товара.

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

Совместно с заказчиком мы придумали решение для хранения и интеграции с 1С опций, наборов и множественных связей «товар - опция» и «товар - набор».

связь товаров, опций и наборов

Товаров несколько сотен. Опций несколько десятков на весь каталог. Опции выгружаются из 1С в отдельную папку «Опции» (не активна). У товара-родителя заведено 15 свойств (максимальное количество опций у одного товара), в которых хранится внешний код товаров-опций. Тип данных: строка.

Во время предварительного анализа выявили несколько проблем и неопределенностей:

  1. Как быть, если одна и та же опция для разных товаров имеет разную цену? Решение — заводить одинаковые опции с разной ценой.
  2. Как формировать выпадающий список опций? По какому признаку «слеплять» опции в список? Решение — в свойство товара передавать xml_id опций через точку с запятой.
    связь товаров с опциями
  3. Как узнать название опции - выпадающего списка? Его нельзя взять из названия товара. Решение — в соответствующее свойство первым выводить название, далее через точку с запятой xml_id опций списка.
  4. Как передавать заказы, в которых встречаются товары с опциями, в 1С и Битрикс24? Решение — завести реквизит заказа, в который в виде многострочного текста передавать список товаров и выбранных опций.

Мало придумать механизм отображения опций на сайте. Надо предусмотреть множество связанных областей — в 1С, в продажах, в SEO.

Многие вещи в этом проекте еще только предстоит сделать (например, изменение url для каждой комбинации опций). Мы не боимся сложных задач и готовы придумывать интеграционные решения на стыке веб-технологий, маркетинга и товарного учета.

Начальная оценка по задаче — 40+ часов. В итоге, все базовые доработки мы сделали за 38.

Еще около 30 часов потратили на интеграцию наборов и сопутствующие новые задачи.

Ход работ по внедрению опций в каталог товаров

Первым делом мы развернули собственную копию сайта на сервере для разработки и настроили git. Кроме нас на проекте работали ребята из Аспро, нам понадобилась система контроля версий.

Второй важный шаг — настройка логирования выгрузки из 1С. Это собственная разработка ИНТЕРВОЛГИ. При любом сеансе обмена между 1С и сайтом программа логирования записывает несколько десятков параметров обмена. Помогает раскопать проблемы, если они есть. Сделали выгрузку товаров на тестовый сервер, проверили корректность. Итак, все данные об опциях есть на сайте, можно заниматься их выводом.

Карточка товара немного изменилась :

  1. Добавили опции-чекбоксы.
  2. Добавили опции-списки. Сделали первое значение списка выбранным по умолчанию. Для некоторых товаров опции обязательны.
  3. Добавили строку с перечислением выбранных опций под заголовком товара.
  4. Добавили иконки с информационными сообщениями о назначении каждой опции.
  5. Научили цену изменяться в момент выбора опций.
  6. При добавлении товара с выбранными опциями в корзину есть одна хитрость. Физически, товара с конкретным набором опций не существует, в корзину мы кладем лишь «упоминание» о нем. Поэтому, если пользователь из корзины щелкнет на товар с опциями, он увидит «пустой» товар.

Добавление опций повлекло за собой одну неприятную проблему, над решением которой долго бились.

При попытке передать в почтовое уведомление и счет на оплату заказа информации об опциях, передавались не только их названия, но и сопутствующие XML_ID.

Выглядело так:

лишние данные в уведомлении о заказе

Исправили, оставили только названия.

Результат изменения карточки товара ниже.

оригинальная карточка товара
Оригинальный вид карточки товара

карточка товара с опциями
Карточка товара с опциями

Внедрение наборов на сайт и связь с 1С

1С не знает ничего про наборы и различные типы товаров. Для нее вся номенклатура одинаковая.

Перед началом работы по наборам мы проверили, что 1С не сбрасывает тип товара-набора при выгрузке:

  1. создали тестовый товар в 1С;
  2. выгрузили на сайт;
  3. конвертировали в набор;
  4. изменили название и цену в 1С, снова сделали выгрузку;
  5. товар остался набором (!), у него изменились название и цена;
  6. удалили товар в 1С, сделали выгрузку;
  7. товар остался набором и деактивировался.

Вывод. Типовой обмен товарами с 1С не меняет «тип товара». Осталось придумать, по какому признаку превращать товары в наборы. Это просто. Также, как и с опциями, мы завели свойство и передавали в него xml_id составляющих набор товаров.

свойство для хранения информации о наборе
Наборы передаются аналогично. Есть свойство «Товары набора». В нем передаются xml-id.

После проверки гипотезы перешли к основной части задачи по наборам — Конвертация товаров в наборы. Мы написали скрипт, который:

  1. проверяет все товары, у которых заполнено свойство «товары набора», являются они наборами или нет;
  2. если не являются, конвертирует в набор;
  3. если являются, ничего не делает.

Скрипт стоит на cron в 4.30 каждый день. Работает.

Типовой обмен товарами с 1С не меняет «тип товара». Главное — конвертировать товар в набор.

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

товары набора

Шлифовка внешнего вида

Вся бизнес-логика работает. Можно заниматься внешним видом. Что сделали:

  1. увеличили высоту выпадающего списка для отображения большего количества опций;
  2. добавили иконку и дополнительное описание для опций;
    всплывающие подсказки
  3. немного поправили шаблон набора;
  4. перенесли выбранные опции в заголовок товара для небольшой напоминалки пользователю;
  5. к составляющим набор товарам добавили краткое описание, выводится при наведении;
  6. добавили на карточку товара текстовые блоки «Описание» и «Особенности». Текст берем из дополнительных свойств в 1С.

Самая трудоемкая задача

Удивительно, но самой трудоемкой оказалась задача второстепенной важности. Изначально выбор опций в товаре не влиял на стоимость набора с этим же товаром. Мы решили, что правильно при выборе опций одновременно менять цену набора (на этой же странице ниже).

Так вот, задача заняла 10 часов. Причина — товар с опциями добавляется в корзину «кастомным» скриптом через AJAX, а товар с набором стандартным скриптом с перезагрузкой. Пришлось написать что-то среднее.

План тестирования опций и наборов

Перед тем, как сдавать работу заказчику, мы составили и осуществили план тестирования.

Техническая часть

  1. Опции находятся в папке «Опции», не выводятся в каталоге на публичке.
  2. Названия для Опций передаются из 1С на сайт.
  3. Цены для Опций передаются из 1С на сайт.
  4. Краткое описание для Опций передается из 1С на сайт.
  5. Товар содержит ссылки на опции посредством указания xml_id в соответствующем поле.
  6. На карточке товара отображаются опции-флажки.
  7. На карточке товара отображаются опции-списки.
  8. Тип цен опции соответствует типу цены товара для данного пользователя.
  9. В корзине для товара выводятся названия опций.
  10. При оформлении заказа для товаров выводятся названия опций.
  11. На детальной карточке заказа в ЛК выводятся названия опций.
  12. Товар, который нельзя купить, нельзя купить ни с опциями, ни без опций.

Административная часть

  1. Опцию можно добавить к товару вручную, она появится в карточке товара.
  2. На детальной карточке заказа в админке выводятся названия опций.

Пользовательская часть

  1. При выборе опции цена товара пересчитывается, это однозначно видно и понятно на карточке.
  2. Товар с опциями можно положить в корзину.
  3. Можно положить несколько одинаковых товаров с разным набором опций в корзину. Товары «не клеятся».
  4. В корзине можно изменить количество товаров с опциями, цена пересчитается корректно.
  5. Товар с опциями можно оформить в заказ.
  6. Заказ можно отменить.

После проведения тестирования нашли несколько мелких багов. В целом, работа выполнена хорошо и с первого раза.

Результат — работающий сайт под конкретные b2b-задачи за 3 месяца

ГольфСтрим — хороший пример проекта «быстрый запуск и поэтапное наращивание функций». В современном бизнесе скорость внедрения изменений играет большую роль. В интернете также.

Как мы пишем в статье про итерационную веб-разработку , «перфекционисты проигрывают».

Мы отказываемся от длинных проектов с толстыми ТЗ. Мы любим проекты с быстрым развертыванием новых функций в публичном доступе, чтобы заказчик сразу получил обратную связь от своих клиентов.

Что увидели клиенты и партнеры компании Гольфстрим на новом сайте:

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

Описанные функции мы внедрили на сайт меньше, чем за 2 месяца работы. Скорость внедрения новых функций — одна-две в неделю.

На данный момент в проекте 70 задач, из них 4 в работе. Остальные закрыты.

Проект запущен — http://www.golfstream.org .

Выражаем благодарность Андрею Щербаку, менеджеру по маркетингу компании ГольфСтрим за участие в проекте, постановку интересных задач и выработку совместных решений.

Мы готовы взять любой проект на сопровождение. Заполните форму или напишите на dav@intervolga.ru .

Заявка на разработку сайта