Типова ситуація в українському 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.
Опишіть, що у вас за прайс і куди його треба віддати, – я скажу, як це зробити і скільки коштуватиме. Коротка консультація безкоштовна і ні до чого не зобов’язує.
