Вебформат

Главная/Блог/Сайты и e-commerce

Сайты и e-commerce10 июля 202610 мин

Магазин, который говорит со снабженцем на языке Excel

Снабженец не набирает заявку на сорок позиций в браузере - он загружает файл из своей учётной системы, и файл становится корзиной. Формат - три столбца, распознавание точное, цену назначает сайт: одна и та же заявка обходится рознице около 480 тысяч ₽, а дилеру - около 370 тысяч. Разбор, как Excel-инструменты замыкают весь круг работы снабженца - от прайс-листа до предложения в PDF.

Заявка файлом - корзина за минуту
Заявка файлом - корзина за минуту

Оптовую закупку оформляет не покупатель, а снабженец. Он работает не в браузере: у него открыта учётная система, в ней ведётся заявка, и заявка эта - на тридцать, сорок, шестьдесят позиций. Чтобы разместить её в интернет-магазине, ему предлагают найти каждую позицию в каталоге и нажать "в корзину" - сорок раз подряд.

Так заказы и теряются. Снабженец либо звонит менеджеру и диктует список по телефону, либо отправляет файл по электронной почте - и менеджер вручную вводит те же сорок строк, уже за него. Сайт в этой цепочке не участвует вовсе: он проиграл конкуренцию обычной почте.

Дальше начинается вторая часть работы, о которой магазины забывают. Заявку надо согласовать внутри компании клиента: показать руководителю смету, отдать в тендерный отдел характеристики оборудования, передать логисту габариты упаковки. Всё это снова файлы, и все эти файлы кто-то собирает вручную.

Требовалось, чтобы сайт разговаривал со снабженцем на его языке - языке таблиц и файлов - и чтобы на всём пути от прайс-листа до согласованного предложения ему ни разу не пришлось ничего перебивать.

Решение

Excel-инструменты закрывают весь круг работы снабженца - и круг этот замкнут.

Круг работы снабженца: все файлы готовит сайт
Персональный прайс-лист
файл своего сегмента, готовит 1С; скачивается из личного кабинета
Бланк заявки с сайта
выборка каталога с учётом фильтра на экране
снабженец проставляет количества в Excel
Файл заявки
три столбца: артикул, наименование, количество
файл загружается на сайт целиком
Загрузка в корзину
отчёт "всего - найдено - добавлено - ошибки"
цены персональные, остатки проверены
результат работы - снова файлы
Выгрузка корзины
формат совпадает с форматом загрузки: правки в Excel - и снова на сайт
Коммерческое предложение
PDF на фирменном бланке - на согласование внутри компании клиента
Круг замкнут: бланк и прайс-лист сайт отдаёт сам, выгрузка корзины совпадает по формату с загрузкой - ни один файл не готовится вручную.

Заявка приходит на сайт файлом и становится корзиной. Корзина выгружается обратно файлом того же формата - его правят в Excel и загружают снова. Каталог сам отдаёт бланк заявки по тому фильтру, который покупатель отобрал на экране. А из карточки товара одним нажатием собирается коммерческое предложение в PDF - то, что уйдёт на согласование.

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

Формат намеренно простой - три столбца: артикул, наименование, количество. Такую таблицу выгружает любая учётная система, и её же можно собрать в Excel за минуту.

Файл принимается целиком - до 10 МБ, в форматах xlsx и xls. Строка заголовка распознаётся и пропускается, так что выгрузка из 1С загружается как есть, без подготовки. По каждой строке система отвечает: всего строк, найдено товаров, добавлено в корзину, ошибки. Если строка не прошла, покупатель видит её номер, артикул и причину - и точно знает, что поправить.

Формат объясняется прямо на странице загрузки: "Вы можете прикрепить запрос/смету в формате Excel", "Товары должны быть представлены в табличной форме со следующей структурой: первый столбец - артикул товара, второй - наименование, третий - количество".

Как строка файла находит товар

Как строка файла находит товар в каталоге
Строка файла
артикул, наименование, количество
две ступени распознавания, обе - точное совпадение
Ступень 1: точный артикул
надёжнее наименования - проверяется первой
заполнен у 12 550 позиций из 13 125
Ступень 2: точное наименование
575 позиций ведутся без артикула - их находит только эта ветка
товар определён - дальше персональная проверка
Проверка доступности
есть ли у этого покупателя цена на товар
есть ли остаток на складах его сегмента
итог по каждой строке файла
Добавлен в корзину
по цене прайс-листа покупателя
Виден под предзаказ
купить сейчас нельзя, но позиция не пропадает
Строка в отчёте
номер строки, артикул и причина
Обе ступени - точное совпадение: магазин не подставляет "похожий товар".

Распознавание двухступенчатое: сначала точный артикул, затем точное наименование. Порядок не случаен - артикул надёжнее, он и проверяется первым.

Вторая ступень - не перестраховка. Из 13 125 позиций каталога артикул заполнен у 12 550, а остальные 575 ведутся без него: найти их можно только по названию. Без поиска по наименованию эти позиции не загрузились бы никогда.

Принципиально, что совпадение требуется точное. Магазин не подставляет "похожий товар": снабженец получает либо ровно то, что заказал, либо явную строку в отчёте с причиной. В закупке оборудования это важнее удобства - подмена артикула обнаружилась бы уже при отгрузке.

Дальше каждая найденная позиция проверяется на доступность, и проверка эта персональная: есть ли у этого покупателя цена на товар и есть ли остаток на его складах. Что нельзя купить сейчас, не пропадает - позиция видна, и её можно заказать предзаказом. Как устроены два контура корзины, описано в отдельном материале - "Корзина с двумя контурами".

Один файл - две корзины

Здесь и проходит главная граница. Цены в файле нет вообще - формат её не предусматривает. Цену назначает сайт, по прайс-листу того, кто загрузил файл.

Один и тот же файл - две разные корзины
Файл заявки
четыре позиции на оснащение шиномонтажной мастерской: станок, подъёмник, балансировочный стенд и десяток домкратов
цены в файле нет - формат её не предусматривает
каждую позицию оценивает сайт - по прайс-листу того, кто загрузил
Розничный клиент
корзина по розничным ценам
≈480 000 ₽
Дилер
та же корзина по дилерским ценам
≈370 000 ₽
Разница - больше 110 тысяч ₽ на одном файле. Сегментов девятнадцать, и каждый получит из этого файла свою корзину. Пример - реальная заявка с рабочего сервера, суммы округлены, покупатели обезличены.

Это не теоретическая тонкость. Выше - реальная заявка на оснащение шиномонтажной мастерской, четыре позиции с рабочего сервера. Розничному клиенту она обходится примерно в 480 тысяч ₽, дилеру - примерно в 370 тысяч. Файл один и тот же, разница - больше 110 тысяч ₽ на одном файле.

Сегментов покупателей девятнадцать, и каждый получит из этого файла свою корзину. Как рассчитываются персональные цены, описано в материале "Персональные цены для 19 сегментов покупателей".

Следствие важно и для безопасности: раз цена в файл не входит, её нельзя из файла и подменить. Правка суммы в Excel на цену заказа не влияет никак.

Каталог отдаёт бланк заявки

Обратная задача возникает не реже: снабженец отобрал в каталоге нужное - и ему нужен этот список файлом.

Выгрузка не строит отбор заново, а берёт фильтр, уже собранный каталогом. Что покупатель видит на экране, то он и получает файлом: расхождение между экраном и выгрузкой невозможно. Можно забрать текущую выборку со всеми фильтрами, можно раздел целиком, можно посмотреть список прямо в браузере. Форматы - xlsx и csv.

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

Отдельно устроены персональные прайс-листы: свой файл для каждого сегмента готовит 1С, и покупатель скачивает его из личного кабинета. У коммерческой политики единственный источник истины - учётная система, а не сайт.

Предложение на согласование

Заявку надо защитить внутри компании клиента, и для этого нужен документ.

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

Источников у предложения два, а кнопка одна. Если менеджеры подготовили в 1С официальный утверждённый файл - покупатель получит именно его. Если нет - предложение соберётся само, из тех же данных, что показаны на карточке. Пустой выдачи не бывает ни при каком состоянии данных.


Как это устроено внутри

Общая картина - на схеме: четыре инструмента опираются на общий слой распознавания, цены и остатка.

Устройство Excel-инструментов: общий слой под четырьмя кнопками
1С:ERP
прайс-листы по сегментам и утверждённые коммерческие предложения
цены и остатки приезжают на сайт заранее
Общий слой сайта
распознавание: точный артикул, затем точное наименование
персональная цена - по сегменту покупателя
остаток - на складах его сегмента
на этот слой опираются все четыре инструмента
Загрузка заявки
файл до 10 МБ, отчёт по каждой строке
Выгрузка корзины
тот же формат, что у загрузки
Бланк из каталога
по фильтру на экране, xlsx и csv
Предложение в PDF
приоритет у готового файла из 1С
Формат загрузки и выгрузки один, поэтому файл проходит полный цикл "сайт - Excel - сайт" без преобразований.
РешениеКак сделано
Формат файлаТри столбца по позиции, без привязки к заголовкам: файл из любой учётной системы загружается без шаблона. Строка "Артикул" в первой ячейке распознаётся и пропускается
Разбор файлаПромышленная библиотека работы с электронными таблицами; принимаются xlsx и xls, размер ограничен 10 МБ, читается первый лист
РаспознаваниеТочное совпадение по артикулу, затем точное совпадение по наименованию. Подстановок "похожего" нет: либо товар, либо строка в отчёте с причиной
ЦенаИз файла не читается никогда - берётся из собственного прайс-слоя по сегменту покупателя (более 200 тысяч готовых персональных цен). Подменить цену через файл невозможно
ДоступностьКритерий - есть цена и есть остаток на складах сегмента покупателя; склады подбираются по типу контрагента, для гостя - набор по умолчанию
ОтчётСчётчики "всего / найдено / добавлено" плюс список ошибок с номером строки и причиной; список ошибок ограничен по длине, чтобы отчёт оставался читаемым
Замкнутый форматВыгрузка корзины пишет тот же артикул, по которому ищет загрузка, и ту же тройку столбцов - файл проходит цикл "сайт - Excel - сайт" без преобразований
Выгрузка каталогаПереиспользует фильтр, собранный компонентом каталога, и тот же построитель файла, что и выгрузка корзины: один формат на оба инструмента
Предложение в PDFСборка на фирменном бланке из данных карточки; приоритет у утверждённого файла из 1С, состав блоков задаёт покупатель
Прайс-листыГотовит 1С - по файлу на сегмент; сайт их не генерирует, а выдаёт авторизованному покупателю файл его сегмента

Два решения, которые обычно вызывают вопросы у коллег.

Почему цена не читается из файла. Казалось бы, снабженец выгрузил заявку из своей системы вместе с ценами - логично их учесть. Но цена в его файле - это цена вчерашнего прайс-листа или вовсе прошлогоднего договора. Принять её значит либо продать по устаревшей цене, либо открыть очевидную уязвимость: достаточно исправить число в Excel, чтобы купить дешевле. Поэтому файл несёт только намерение - что и сколько, - а цену всегда назначает сайт, по действующему прайс-листу этого покупателя. Это то же правило, по которому работает сверка корзины.

Почему выгрузка не строит свой запрос. Умный фильтр каталога собирает отбор внутри себя, из десятков параметров - раздел, характеристики, наличие, распродажа. Повторить эту логику в отдельном обработчике выгрузки означало бы завести вторую реализацию того же отбора, и рано или поздно они разошлись бы: на экране одно, в файле другое. Вместо этого выгрузка получает уже готовый фильтр от самого каталога. Один отбор - два способа его показать.

Что это дало бизнесу

РаньшеСтало
Заявку на 40 позиций снабженец вводил в браузере вручную - или диктовал менеджеру по телефонуФайл из учётной системы становится корзиной за минуту
Ошибка ввода обнаруживалась уже при отгрузкеОтчёт по каждой строке: всего, найдено, добавлено, ошибки - с номером строки и причиной
Прайс-лист запрашивали у менеджераПерсональный прайс-лист сегмента скачивается из личного кабинета
Отобрал в каталоге - и повторял тот же список в своей системеКаталог отдаёт бланк заявки ровно по фильтру на экране
Характеристики и габариты для согласования собирал менеджер вручнуюПредложение в PDF собирается нажатием кнопки; состав блоков выбирает покупатель
Правка заявки - переписка "пришлите новый список"Корзина выгружается в том же формате: правки в Excel - и файл снова на сайте

В цифрах

ПоказательЗначение
Столбцов в файле заявки3 - артикул, наименование, количество
Предельный размер файла10 МБ; форматы xlsx и xls
Позиций в каталоге13 125; артикул заполнен у 12 550, ещё 575 находятся по названию
Сегментов покупателей19 - один файл даёт 19 разных корзин
Готовых персональных ценболее 200 тысяч - ими оценивается каждая строка файла
Блоков предложения на выбор4 - описание, комплектация, характеристики, упаковка
Одна заявка из четырёх позицийоколо 480 тысяч ₽ для розницы, около 370 тысяч для дилера

Excel-инструменты - часть большой B2B-платформы: каталог, дилерский кабинет и двусторонний обмен с 1С. Что вошло в проект целиком - в кейсе B2B e-commerce платформы.

Ваши оптовики всё ещё присылают заявки на почту?

Расскажите, как ваши клиенты оформляют закупку. Покажем на живом проекте, как заявка файлом становится корзиной по персональным ценам, и оценим перенос на ваш каталог.