Типичная ситуация в украинском e-commerce: поставщик присылает прайс в формате Excel, а маркетплейс принимает только XML или YML по ссылке. Между этими двумя фактами лежит ручная работа, которую владелец магазина делает по несколько раз в неделю: открыл файл, поправил колонки, сохранил в нужном виде, залил куда-то, обновил ссылку в кабинете. Полчаса каждый раз, и каждый раз есть шанс что-то перепутать.
Клиент пришел с коротким запросом: “нужна программка, которая превращает мой входящий Excel в XML и отдает прямую ссылку, чтобы я поставил ее в кабинете на Prom.ua и товары обновлялись сами”. Расскажу, как я это сделал, почему не стал писать программу для компьютера и какие детали в такой задаче обычно недооценивают.

Почему не программа для компьютера, а сервис
Самое простое решение на вид – написать программу под Windows, отдать клиенту exe-файл и забыть. На практике это плохая идея, и я почти всегда от нее отговариваю.
- Программа живет на одном компьютере. Заболел сотрудник, сломался ноутбук, уехали в отпуск – обновления прайса не случилось.
- Обновления приходится рассылать. Изменился формат прайса – надо собрать новую версию и проследить, чтобы ее установили. Умножьте на нескольких сотрудников.
- Прямая ссылка все равно нужна. Маркетплейс не ходит на компьютер пользователя. Файл все равно надо где-то разместить, то есть без сервера не обойтись.
- Диагностика невозможна. Когда что-то пошло не так, я не вижу, что именно произошло на чужой машине.
Поэтому решение стало серверным: клиент загружает файл через веб-страницу, дальше все происходит на сервере, а результат постоянно доступен по одной и той же ссылке.
Как устроен процесс
Шаг 1. Загрузка файла
Клиент открывает страницу, выбирает Excel-файл, нажимает кнопку. Сразу получает сообщение, что файл принят. Никакой регистрации, никаких настроек – одна кнопка. Это важно: чем меньше элементов на экране, тем меньше поводов ошибиться.
Шаг 2. Обработка на сервере
Скрипт разбирает файл: находит строку с заголовками, сопоставляет колонки с полями каталога, читает товары. Дальше идет самое важное – приведение значений к формату, который примет маркетплейс.
- Цена. В прайсах она приходит как угодно: с пробелами между разрядами, с запятой вместо точки, с валютой в той же ячейке, с наценкой в соседней колонке. Все это приводится к одному числу.
- Наличие. “Есть”, “в наличии”, “+”, “да”, число остатка, пустая ячейка – все это надо перевести в то, что понимает площадка.
- Артикул. Он должен быть уникальным и неизменным. Если у поставщика артикул дублируется или меняется, товары на площадке поедут.
- Категории. Названия категорий поставщика сопоставляются с категориями магазина. Это делается один раз таблицей соответствий.
- Фото. Ссылки проверяются, битые отсеиваются. Товар без фото продается плохо, но товар со ссылкой на несуществующую картинку выглядит еще хуже.
Шаг 3. Формирование XML
Из нормализованных данных собирается файл нужной структуры. Здесь важны мелочи, из-за которых площадка отклоняет фид: кодировка, экранирование спецсимволов в названиях и описаниях, корректные типы полей, обязательные атрибуты. Один незакрытый амперсанд в названии товара – и весь файл не пройдет проверку.
Шаг 4. Выкладка и прямая ссылка
Готовый файл ложится в мое облачное хранилище по постоянному адресу. Адрес не меняется никогда – это принципиально. Клиент один раз прописал его в кабинете маркетплейса, и дальше просто загружает новый Excel, а площадка по расписанию сама забирает свежую версию.
Шаг 5. Ответ в Telegram
Результат приходит в группу в Telegram: ссылка на готовый файл, количество товаров, предупреждения о строках, которые не удалось разобрать. Это моя стандартная схема, и о ней стоит сказать отдельно.
Почему Telegram-группа, а не бот и не почта
Под каждого клиента я создаю отдельную группу и добавляю туда своего бота. Дальше клиент сам добавляет в эту группу кого считает нужным: кладовщика, контент-менеджера, партнера.
- Управление доступом на стороне клиента. Ему не надо писать мне “добавьте, пожалуйста, еще одного человека”. Добавил сам, убрал сам.
- Общая история. Вся команда видит, когда последний раз обновлялся прайс и были ли ошибки.
- Ничего не теряется. Почта попадает в спам, сообщения в группе – нет.
- Обратная связь. Вопросы задают прямо в группе, я вижу контекст: какой файл, когда, с какими предупреждениями.
Грабли, о которых стоит знать заранее
Поставщик меняет формат без предупреждения
Самая частая поломка. Добавили колонку, переставили местами, переименовали заголовок. Поэтому поиск колонок делается не по номеру, а по названию заголовка, с учетом синонимов и регистра. Если колонку найти не удалось, обработка не делает вид, что все хорошо, – она останавливается и пишет об этом в группу.
Пустые и испорченные строки
В реальных прайсах встречаются строки-разделители, итоговые строки, комментарии, объединенные ячейки. Все это надо отсеивать, иначе в каталог поедут товары с названием “Итого” и пустой ценой.
Дубли
Один и тот же товар может встретиться в прайсе дважды с разной ценой. Правило надо задать явно: брать первый, брать последний, брать минимальную цену. Молча оставлять оба нельзя – маркетплейс воспримет это как две разные карточки.
Кодировка
Кириллица в старых выгрузках до сих пор приезжает в неожиданных кодировках. Это решается автоматическим определением, но проверять результат глазами на первом запуске обязательно.
Что изменилось для клиента
До: открыть файл, вручную перебрать колонки, сохранить, залить, проверить. Полчаса и риск ошибки в каждом шаге.
После: загрузил файл, получил сообщение в Telegram, ушел по своим делам. Маркетплейс сам забирает обновление по расписанию.
Отдельно стоит отметить побочный эффект: когда обновление становится дешевым по усилиям, его начинают делать чаще. Клиент, который раньше обновлял прайс раз в неделю, потому что это было скучно, стал обновлять ежедневно. А это прямо влияет на количество отмененных заказов из-за “товара уже нет”.
Куда это обычно разрастается
Конвертация прайса почти никогда не остается единственной задачей. Практически все клиенты с такой задачей через какое-то время приходят с продолжением:
- забирать прайс у поставщика автоматически, без ручной загрузки – с почты, по ссылке или из личного кабинета;
- объединять несколько прайсов от разных поставщиков в один фид;
- добавлять наценку по правилам: свой процент на категорию, фиксированная надбавка, округление до красивой цены;
- следить за ценами конкурентов и подсвечивать позиции, где вы дороже;
- обновлять остатки и цены чаще, чем полный каталог.
Нередко простой конвертер Excel в XML со временем перерастает в полноценный мониторинг цен конкурентов. О таком мониторинге есть отдельный разбор в блоге.
Сколько это стоит
Стоимость зависит от количества прайсов, их формата и того, куда отдается результат. Конвертер работает с поддержкой: если поставщик изменит формат, фид продолжит обновляться, а исправления я делаю сам. Вам не нужно за этим следить.
Более сложный вариант – несколько источников, автоматический забор файлов, правила наценки, обработка фото – тоже оценивается после разговора. Подробнее о направлении можно почитать на странице конвертация прайс-листа поставщика в YML.
Опишите, что у вас за прайс и куда его нужно отдать, – я скажу, как это сделать и сколько будет стоить. Короткая консультация бесплатная и ни к чему не обязывает.
