Кейс: дилер-портал для группы компаний “RM и Profiline”
Разработка B2B платформы + двухстороняя интеграция и настройка 1С. Автоматизация процесса продаж и документооборота с дилерской сетью для крупнейшего поставщика расходников для офисной техники.
«А что сложного? Просто нарисуйте красивый дизайн, закиньте туда наши товары, а уж дальше мы займемся основной проблемой — продажами». Я часто вспоминаю эту фразу, которую давным-давно сказал мне один приятель. Он искал «коробочное» решение и считал, что главная проблема при создании оптового интернет-магазина — это выбрать цвета, в которых будет выполнена его главная страница, а дальше всё делается нажатием «одной кнопки».
В реальности встает множество проблем, часть из которых общие, часть — специфичны для каждого отдельного оптового клиента. Сегодня я расскажу о том, как мы в e-Commerce агентстве Compo справлялись с проблемами на одном из наших проектов.
К нам обратилась компания RМ, это один из ведущих оптовых продавцов картриджей, тонеров и прочих расходников для офисной техники. Кроме того, компания производит расходные материалы бренда Profiline.
На момент начала проекта компания входила в топ-5 оптовых поставщиков на Российском рынке, и одной из основных причин для создания B2B-платформы было увеличение объема рынка и выход в топ-3. Кроме того, с помощью новой площадки в компании хотели повысить эффективность работы менеджеров отдела продаж. Да и вообще, клиенты становятся моложе, требовательнее, им проще покупать онлайн, а не через менеджеров.
Интересно, что для компании это была вторая попытка запустить B2B-платформу. Первая (4 года назад) оказалась неудачной из-за неоптимального интерфейса и регулярных технических проблем.
На этапе первичных переговоров нам показали порталы конкурентов с просьбой повторить и сделать лучше.
После переговоров были сформулированы две основные задачи:
- частично автоматизировать и тем самым упростить работу сотрудникам отдела продаж;
- дать клиентам удобную платформу;
Изучив предложенные заказчиком проекты, мы поняли, что сделать портал лучше остальных мы просто обязаны. Функционал, предлагаемый конкурентами, был весьма узок. По сути он ограничивался возможностью просматривать ассортимент и делать заказ по ценам, закрепленным за контрагентом. Мало того, реализовано это было на архаичных платформах, не удовлетворяющих современным требованиям ни по внешнему виду, ни по удобству работы. На конкурирующих сайтах даже не было возможности фильтровать каталог товаров, чего уж о говорить, например, об автоматических подсказках при поиске по названию.
Приятель, которого я упоминал в самом начале статьи, был бы очень удивлен, если бы узнал, что с технической точки зрения основная проблема при создании B2B-платформы с самим порталом, собственно, почти не связана. В первую очередь требуется наладить автоматическое получение данных из учетной системы поставщика (как правило это 1С).
Такая автоматизация — это процесс двухсторонний. Квалификация разработчиков на стороне учетной системы не менее, а может быть даже более важна, чем квалификация разработчиков на стороне портала. По моему опыту, в этом танце без оттоптанных ног обходится редко.
Расскажу об основных проблемах, с которыми мы столкнулись на проекте и о методах их решения.
Трудности переходного периода
Главная проблема, которая возникла перед нами с самого начала была связана с тем, что начало работ над порталом совпало по времени с переходом компании РМ со старой версии 1С: Предприятие 7.7 на новую, реализованную «с нуля» на основе библиотеки стандартных подсистем, конфигурацию на платформе 1С: Предприятие 8.3. Не секрет, что возможности этих платформ так сильно отличаются, что переходом на 8.3 сейчас занимается большинство магазинов, работающих с 1С:Предприятие..
Так или иначе, переход на новую платформу — это очень болезненный процесс, я знаю магазины, где он длится год-два. Соответственно нам надо было построить такую архитектуру, чтобы было можно запустить портал как можно скорее, не ждать перехода на 8.3. При этом так, чтобы новый сайт мог уже функционировать на новой платформе и использовать все ее функции, а не подвис бы между двумя платформами.
Нами было предложено архитектурное решение при котором портал предполагает наличие специальной «прокладки», которая может работать сразу из двух баз, ей все равно, откуда брать информацию. Благодаря этой прослойке решается проблема дублирования данных: вся новая информация вносится сразу в новую базу, а не в обе, как пришлось бы делать, если бы мы воспользовались стандартной архитектурой.
Преимущества такой архитектуры в следующем:
- Появляется возможность запустить B2B-портал до полного перехода на новую систему 1С: Предприятие
- Решается вопрос переноса данных, необходимых для старта работы новой системы 1С: Предприятие, который в любом случае необходимо было решать
- Менеджеры, частично работая в новой системе, знакомятся с её интерфейсом и механизмами, имеют возможность отработать и протестировать бизнес-процессы на реальных данных и заказах еще до перехода на новую программу, что существенно облегчает момент перехода
- Исключается необходимость вносить одни и те же данные в разные программы
Обмен между 1С 7.7 и 1С 8.3 реализован с помощью внешних источников данных, что дает преимущества в скорости, загруженности и надежности перед классическим переносом через правила обмена.
Каждому — своя цена
Ещё одна проблема, которая возникла при построении автоматизации — необходимость в переработке механизмов ценообразования.
Типовые возможности 1С позволяют для каждого соглашения с контрагентом указать только одну колонку прайс-листа для всех товаров. При этом финансовая ситуация на рынке, напротив, требовала от менеджеров предоставления более гибких соглашений. В этом случае для каждого контрагента требовалось бы создавать свою собственную колонку цен.
В компании это противоречие решали старым добрым ручным трудом. Многие цены зачастую ставились вручную, и если менеджер что-то забывал, возникали проблемы. Не поменяв механизм формирования цен, мы бы оставили процесс ценообразования хаотичным и неуправляемым.
Заказчику требовалась возможность устанавливать колонки цен и наценки к ним на товары в зависимости от ценовой группы и производителя, что зачастую не совпадало со структурой каталога.
Пришлось разработать специальный модуль, позволяющий на каждую категорию товара устанавливать для каждого клиента свою колонку цен и процент скидки/наценки к ней. Это закрывало 95% работы с ценами для контрагентов. Кроме того для каждой конкретной позиции была создана возможность указать специальную цену, которая, в случае конфликтов, имеет приоритет перед остальными типами цен. Этим мы закрыли оставшиеся 5% случаев, когда на конкретную позицию конкретному контрагенту требуется установить цену с точностью до копейки.
Мало того, часть клиентов компании РМ работают по нескольким договорам, условия работы и цены по которым могут отличаться. Нами была создана возможность задавать индивидуальные цены не только для клиента, но и для любого его договора.
Стоимость продукции привязана к курсу валют. Не секрет, что некоторые крупные заказчики в этой части также выдвигают свои условия работы. Поэтому для каждого клиента реализована возможность задания индивидуального курса, по которым происходит расчет цен, либо процента наценки на курс ЦБ. Это позволило менеджерам выставлять меньшие цены, но по большему курсу (либо наоборот), что повысило гибкость ценообразования компании.
Марафон данных
Налаженный обмен данными — эта одна из ключевых составляющих успешного портала. На этом этапе практически всегда возникает какая-нибудь проблема, с которой надо бороться. В данном случае на портале используются сразу 14 типов данных, которые надо было соотнести между собой!
Вот эти типы данных:
- Холдинги (группа юрлиц, представляющих собой фактически одного клиента);
- Контрагенты (справочник с реквизитами)
- Договоры (полная информация о сторонах договора и типе цен в нем);
- Список типов цен
- Склады
- Категории сайта (для перегруппирования номенклатуры, структура каталога в 1С и на сайте не совпадает)
- Категории 1С (для той же цели)
- Номенклатура (собственно товары с характеристиками)
- Цены (значения цен)
- Остатки (с учетом резервов)
- Категории пользователей
- Финансы (данные о дебиторской задолженности)
- Менеджеры (отдельный список разрешенных пользователей портала)
- Индивидуальные цены (те самые персональные цены на конкретную позицию)
- Регионы (перечень регионов, в которых работают контрагенты, используется для привязки складов)
Полный обмен данными об ассортименте, как правило происходит раз в сутки в ночное время, поскольку требует перекачки большого объема данных. И проблема заключалась в том, что синхронизация этих данных должна идти в определенной очереди. Типичный пример: когда мы синхронизируем данные юридических лиц, то надо понимать, что все они привязаны к разным холдингам или клиентам. А это означает, что вся информация о холдингах к этому моменту должна быть загружена. Но каждый из этих типов данных содержит разный объем информации. В свою очередь, программы, которые синхронизируют разные виды данных, работают разное время, причем разница существенная. И нам нужно было настроить такую очередность и расписание, чтобы всё нормально синхронизировалось. Всё бы ничего, но синхронизация под разными нагрузками сервера работает по-разному: с разницей чуть ли не в несколько минут.
Нам пришлось придумывать решение, которое позволяет учитывать все эти задержки.
«Решением в нашем случае является использование дополнительного компонента Symfony process component -который позволяет выполнять команды синхронизации в нужной очереди дождавшись выполнение предыдущей синхронизации. Таким образом расписание синхронизации свелось к одному единственному запуску процесса, который в свою очередь уже управляет синхронизацией данных в нужном порядке, при этом гарантирует четкую очередность выполнения», — рассказывает технический директор Compo Владимир Гантурин.
Ну и, конечно, надо было так выстроить синхронизацию, чтобы сбоев не было и она занимала бы как можно меньшее время. В итоге полная загрузка данных — порядка 600 000 записей синхронизируется 7-9 минут, в зависимости от нагрузки.
Пример. Синхронизация контрагентов на довольно слабом тестовом сервере с помощью автоматической консольной команды. 6858 контрагентов со всеми данными синхронизируются за 15 секунд.
Другие виды обмена происходят гораздо чаще, данные о наличии могут обновляться вплоть до 1 минуты. Технически возможен и обмен в реальном времени, но практически вреда от такой реализации будет больше чем пользы.
На уровне 1С запущены WEB-сервисы, что позволяет порталу самому быть инициатором обмена. Такой метод позволяет порталу получать требуемую информацию тогда, когда это необходимо, что облегчает и ускоряет обмен.
Данные обмена представляют собой отдельные передаваемые файлы в формате json. Механизм отправки данных на портал работает следующим образом:
- Портал отправляет запрос, содержащий в себе указание на тип выгрузки, и, при необходимости дополнительные отборы. Например, для контрагентов есть возможность указать идентификатор отдельного клиента и тогда в ответ придет информация только по этому пользователю. Это позволяют сделать обмен «точечным», что благоприятно сказывается на скорости обновления информации и на загруженности базы 1С.
- 1С, получив запрос, формирует необходимые файлы данных и передает их обратно на B2B-портал. При этом, в случае полной выгрузки на портале происходит очистка неактуальных данных, при частичной выгрузке (применены какие-либо из отборов) данные только дополняются. Это позволяет избежать накопления «мусора» на портале.
Полное описание каждого типа и вызывающих обмен процедур можно почитать тут (ссылка на кейс)
Оформление и дизайн
Покупатели бывают разные
Предварительные тесты показали, что, в связи с большим количеством номенклатуры найти конкретный картридж, спускаясь по дереву каталога практически невозможно. Это не проблема конкретно сайта RM, сложности связаны скорее со спецификой товара.
Вы когда-нибудь искали, например, картридж для лазерного принтера в интернет-магазинах? Это сложно. У всех моделей — названия в виде весьма длинной последовательности букв и циферок, по картинке понять, что именно нужно, тоже не получается.
Поэтому мы отказались от традиционной каталожной структуры, заменив ее параметрическим поиском, в котором можно в том числе указывать раздел каталога, в котором будет искаться товар. Например, когда ищешь картридж для принтера «samsung SCX-3400», то можно искать товар, исходя из модели принтера, артикула и прочее. А можно просто вбить цифры «3400», и он выдаст нужный картридж.
Однако тут возникла ещё одна сложность. Дело в том, что портал предназначен для разных корпоративных клиентов RM, от тех, кто покупает один-два картриджа до компаний, скупающих тысячи позиций. Для каждой из категорий покупателей пришлось разрабатывать отдельные механизмы и инструменты.
Например, вы делаете закупки для офиса и часто покупаете один и тот же набор товаров. Чаще всего вы не помните наизусть названия всех принтеров и прочей техники. Для таких заказчиков мы ввели дополнительные способы подбора товара. Например, система автоматически формирует список из последних заказов. Так что если пользователь помнит, когда заказывал нужный ему сейчас картридж, он найдет его там.
Для покупателей, кто заказывает много и часто, мы сделали функцию автоматического формирования списка наиболее часто заказываемых позиций. Здесь идет более глубокий анализ покупок пользователя за необходимый срез периодов . И традиционный для нашей платформы список избранных позиций, формируемый пользователем вручную.
Наконец есть B2B-контрагенты, которые вообще не оперируют товарными названиями, типа «картридж для samsung SCX-3400». В их документации указаны внутренние уникальные идентификаторы (UID-коды) товара. Для таких клиентов нами были разработаны соответствующие инструменты подбора по UIDу и части UIDа. Кроме того, есть возможность загрузки Excel-файла с кодом товара и количеством. При загрузке на сайт такого файла — из его данных формируется корзина.
Кроме того, перед началом подбора номенклатуры пользователь указывает следующие данные:
- договор, в соответствии с которым он будет делать закупку. Это нужно, чтобы показывать ему именно те цены, по которым он будет приобретать товар, поскольку для разных договоров один и тот же контрагент может иметь разные цены
- склад, с которого он планирует забирать товар. Это нужно, чтобы с одной стороны отсеять лишнюю для контрагента информацию, с другой — дать ему возможность заказать нужный товар из другого региона, если будет такая необходимость.
Но заказчики отличаются не только по величине. В связи с этим тоже возникают сложности. Например, для части контрагентов мы включили автоматически настраиваемое отображение валюты.
Есть ситуации и сложнее. Не всем контрагентам поставщик хочет показывать точное наличие. Поэтому часть из них видят остатки как «много-мало-достаточно», при этом зарекомендовавшим себя партнерам показываются фактические остатки в штуках по нужным складам.
Похожая ситуация и с брендами. Некоторые клиенты не работают с теми или иными брендами. Для аккаунтов таких посетителей они отключаются и ненужная номенклатура просто не отображается для выбора.
Специально для оптовиков пришлось поменять и модуль с рекламациями. Опять же, мы столкнулись со спецификой товара. Картриджи — это товар, который стоит не очень много, покупается большими партиями и имеет разные артикулы. И если покупатель по какой-то причине хочет вернуть партию, то ему при отправлении претензии в компанию, обычно надо переписывать и сверять множество артикулов, каждый из них вносить в рекламацию и несколько раз проверять, чтобы не было ошибок, прикреплять фотографию товаров. Поэтому было решено упростить форму отправления претензии, ограничив ее двумя полями — номер заказа/накладной (выбирается из списка заказов) и свободное поле с описанием проблемы. Поскольку в данном проекте рекламации не передаются порталом в 1С, а отрабатываются менеджерами в административной части портала, все спорные вопросы проще прояснить в чате с менеджером.
Общая структура портала
При всех описанных выше нюансах, если посмотреть на схему функциональных модулей портала, то она будет выглядеть совершенно стандартно.
Как будто действительно можно было взять готовое решение и развернуть его в несколько кликов. Надеюсь, я сумел показать, насколько это обманчивое впечатление.
Вместо послесловия
Вы поверите мошеннику, который скажет, что у него есть таблетка, моментально помогающая от всего на свете? Скорее всего нет. Люди, которые говорят, что их коробочное решение не требует дополнительных затрат, устанавливается за несколько кликов и сразу даёт результат, по сути, такие же мошенники. Проблемы обязательно будут. Я рассказал только о нескольких. Не факт, что в следующем проекте не появится какого-то своего набора. Однако результат того, конечно же, стоит.
О компании РМ
- РМ (производитель продукции для печати под известным брендом Profiline) — одна из ведущих компаний России, занимающихся оптовыми поставками картриджей, тонеров и прочими расходниками для офисной техники.
- Работает с 1996 года
- Дилерская сеть компании — свыше 2000 партнеров
- Работает в 300 городах России и странах СНГ
- В компании работает более 180 человек
- Склады — более 30 000 метров
Автор: Алексей Комраков, руководитель B2B проектов в компании Compo |