Разработка и переделка

Прайс поставщика на сайте: как загрузить и ничего не потерять

Эдгар Косулин 6 мин чтения

Серия «Каталог без ручного труда» · часть 2 из 5

Содержание

Задача звучит просто: есть файл от поставщика, нужно, чтобы товары появились на сайте. Раз в неделю, а лучше каждый день.

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

Это нормальный прайс. Они почти все такие, и вот почему.

Почему «выгрузить как есть» не работает

Прайс поставщика сделан для снабженца, а не для покупателя. Его задача: чтобы человек, который разбирается в товаре, нашёл нужную позицию и понял, почём она сегодня.

Отсюда всё, что в нём есть и чего в нём нет:

  • названия для своих: «Кран шар. 1/2 ВВ руч. баб.», снабженец прочитает, покупатель нет;
  • никаких описаний: зачем, если и так понятно;
  • цены закупочные, часто несколькими колонками под разные объёмы;
  • характеристики внутри названия, а не отдельными полями;
  • разделы строками посреди таблицы, а не отдельной колонкой;
  • фотографий нет или они где-то ещё.

Каталог для покупателя устроен наоборот: понятное название, описание, картинка, характеристики отдельными полями, чтобы по ним работали фильтры.

Между этими двумя мирами и находится вся работа. Загрузка каталога - это не перенос файла, а преобразование. Понимание этого экономит месяц взаимных разочарований с подрядчиком.

Какие колонки нужны

Минимум, без которого каталог не соберётся:

Колонка Зачем
Артикул уникальный ключ; по нему товар опознаётся при следующих загрузках
Название то, что увидит покупатель
Цена закупочная или уже розничная, надо договориться
Остаток количество или хотя бы «есть / нет»
Раздел куда положить товар в каталоге

Желательно, но не обязательно: единица измерения, бренд, характеристики отдельными колонками, ссылка на фотографию, штрихкод, вес и габариты для расчёта доставки.

Артикул: единственная по-настоящему критичная колонка. Он связывает строку в файле с карточкой на сайте. Есть артикул, и вторая загрузка обновит существующий товар. Нет артикула, и система будет опознавать товар по названию, и любая правка названия у поставщика создаст дубль вместо обновления.

Если артикулов нет вообще, их придётся присвоить самим и вести своё соответствие. Это разовая работа, но её надо сделать до первой загрузки, а не после третьей.

Фотографии

Самая трудоёмкая часть, и её всегда недооценивают.

Варианты, в порядке убывания удобства:

Ссылки в файле. Идеально: колонка с адресом изображения, система скачивает сама. Проверьте, что ссылки открываются без авторизации.

Архив с именами по артикулу. Тоже рабочий вариант: А-1234.jpg кладётся к товару А-1234. Требует, чтобы поставщик так именовал файлы, а он редко так делает.

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

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

Отдельно: проверьте права на изображения. Фотографии из прайса поставщика обычно можно использовать, но лучше спросить прямо, чем выяснять потом.

Наценка и цены

Если в файле закупочные цены, нужно правило пересчёта. Обычно оно не одно.

  • общий процент: простой случай, работает для однородного ассортимента;
  • разные проценты по разделам: самый частый вариант: на расходники одна наценка, на оборудование другая;
  • фиксированная наценка для дешёвых позиций, где процент даёт копейки;
  • округление: до рубля, до десяти, до «красивых» окончаний;
  • ручные исключения: позиции, где цена задана вручную и пересчёт их не трогает.

Последний пункт важнее, чем кажется. Без него маркетолог поставит акционную цену, а ночная загрузка её сотрёт, и никто не поймёт, почему акция не сработала.

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

Товары, пропавшие из прайса

Позиция была, в новом файле её нет. Что делать, это решение, а не техника.

Удалить. Почти никогда не стоит. Вместе с карточкой уходят накопленные позиции в поиске, ссылки на неё и история просмотров. А поставщик может вернуть товар через месяц.

Показать как «нет в наличии». Хороший вариант для товаров, которые регулярно то есть, то нет. Карточка остаётся, покупатель видит честно.

Скрыть. Товар исчезает из каталога, но карточка сохраняется и вернётся, если позиция появится в файле снова.

Разумное умолчание: скрывать, а не удалять, с отчётом о том, что скрылось. Отчёт нужен: если однажды из каталога пропадёт треть товаров, вы захотите узнать об этом сразу, а не от клиента.

Несколько поставщиков на один товар

Здесь начинается самая недооценённая по трудозатратам задача.

Один и тот же товар приходит от трёх поставщиков. Артикулы у всех разные, названия тоже: «Кран шаровой 1/2», «Кран шар. 1/2 ВВ», «Шаровый кран Ду15». Для покупателя это одна карточка. Для системы три разных товара.

Что с этим делают:

Сопоставление один раз, автоматика дальше. Ключевой принцип. Первый раз товары сводятся вручную: по штрихкоду, если он есть, по артикулу производителя, если он общий, в остальных случаях глазами. Дальше система помнит соответствие и обновляет автоматически.

Штрихкод: лучший ключ, если он есть у всех. Артикул производителя второй по надёжности. Название худший, но иногда единственный.

Кто главный по цене и остатку. Когда товар есть у троих, надо решить: показывать минимальную цену, цену приоритетного поставщика или свою. И остаток: суммарный или только по основному.

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

Первая загрузка отличается от остальных

Об этом почти не думают, а стоит.

Первая: самая тяжёлая: заводятся все товары, скачиваются все фотографии, строятся все разделы. Она может идти часами и её лучше делать не в рабочее время.

Регулярные обновляют изменившееся: цены, остатки, новые позиции. Идут быстро, потому что фотографии уже на месте.

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

Частые вопросы

Поставщик присылает прайс в Excel. Это подойдёт?

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

Можно ли грузить прайс автоматически, без участия человека?

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

У нас 5 000 позиций и нет артикулов. Что делать?

Присваивать свои и вести соответствие. Это разовая работа, и она окупается на второй же загрузке. Альтернатива (опознавание по названию) обернётся дублями, и разбирать их будет дороже.

Нужно ли переписывать названия товаров вручную?

Ходовые да, они продают. Весь ассортимент из пяти тысяч позиций нереально. Рабочая стратегия: автоматическая чистка названий по правилам (убрать сокращения, привести регистр), плюс ручная доработка топовых позиций.

Можно ли обойтись без загрузки и вести каталог руками?

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

Что дальше

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

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

Серия

Каталог без ручного труда

  1. 1. Обмен 1С с сайтом: что на самом деле синхронизируется
  2. 2. Прайс поставщика на сайте: как загрузить и ничего не потерять
  3. 3. Товары, варианты и характеристики: почему каталог потом не фильтруется
  4. 4. Цены и остатки обновляются сами: как устроено и что ломается
  5. 5. Покупатель не находит товар: фильтры и поиск по каталогу

Интернет-магазин

Поделиться: Telegram ВКонтакте

Новые статьи и разборы — в канале Siteko: Telegram MAX

Подписчикам: +30 дней к пробному хостингу, клиентам: +150 ₽ на баланс

Ещё по теме

Разработка и переделка 5 мин чтения

Новая админка: что действительно нужно менеджерам

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

«Старый сайт - новая рабочая система», часть 7

Разработка и переделка 5 мин чтения

Перенос товаров, клиентов и заказов: что теряется на самом деле

Что теряется при переносе данных на новый сайт: поля без аналога, дубли товаров, пароли клиентов, статусы заказов, и как проверить полноту переноса.

«Старый сайт - новая рабочая система», часть 6

Разработка и переделка 5 мин чтения

Переписать или перенести: что из старого сайта стоит сохранить

Что из старого сайта имеет смысл перенести, а что честнее сделать заново: данные, оформление и бизнес-логика при переделке, и почему «перенести как есть» дороже.

«Старый сайт - новая рабочая система», часть 5