svalmak.ruСергей Макаров

Прайсы поставщиков в разных файлах: как обновлять цены на сайте без ручного копирования

Прайсы поставщиков проходят проверку перед изменением цен.
От разных файлов к проверенной партии изменений цен.

У одного поставщика цена в Excel, у другого — в CSV, у третьего новый столбец появился между артикулом и названием. Переносить всё вручную надоедает. Но ещё неприятнее загрузить файл и обнаружить, что цена сосновой кровати досталась дубовой, а пустая ячейка превратилась в ноль.

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

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

Уточните, какую цену вы переносите

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

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

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

Найдите точное соответствие товара и варианта

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

Названия используйте как подсказку при разборе спорных строк. Сходства «Стол Лира» и «Лира стол» недостаточно, чтобы автоматически подтвердить одну карточку. Если поставщик сменил код, сначала подтвердите связь нового и старого артикула. Не создавайте её по одному похожему названию.

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

Приведите разные прайсы к одной структуре

Для каждого формата опишите, какой столбец что означает. Затем собирайте общую таблицу с происхождением каждой строки.

Поле общей таблицыЗачем оно нужно
Поставщик, артикул и вариантОднозначно найти товар, сохранив исходные коды
Внутренний код сайтаПередать изменение нужной карточке
Новая цена, валюта и вид ценыНе смешать разные денежные значения
Файл, строка и дата действияНайти основание и проверить актуальность
Текущая цена сайтаСравнить значения до записи
Статус и причина остановкиОтделить готовые изменения от вопросов

Заранее задайте правила для разделителей и десятичной части: «23 800,00» и «23800.00» могут обозначать одно значение. Не удаляйте символы наугад: сначала убедитесь, какой формат использует конкретный поставщик. Пустая цена, явный ноль и отсутствие товара в файле — три разные ситуации. Ни одна не должна молча превращаться в другую.

Если формат стабилен, часто достаточно правил обработки и обычного импорта. Power Query умеет объединять файлы с одинаковой структурой. Разные схемы сначала надо привести к общей форме: положить несопоставимые файлы в одну папку недостаточно.

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

Что показал учебный импорт

Для примера отдельно создан учебный магазин с каталогом из семи записей и подготовлены два CSV-файла с разными заголовками и разделителями. Все товары и цены условные. Каталог учебного магазина скопирован в отдельную базу SQLite, а простая HTML-витрина показывает значения из этой копии. Это не копия клиентского OpenCart и не проверка его импортёра.

Из двух файлов получено восемь строк. В тесте принимаются только рублёвые цены без пересчёта. Изменение цены более чем на 20% в любую сторону отправляется на проверку — это специально выбранный порог примера, а не норма для любого бизнеса.

Строки прайсаРезультат проверки
Поставщик A, 00107, сосна 90×200: 22 500 → 23 800 ₽Подготовлено изменение для своего кода товара
Поставщик B, тоже 00107, другой товар: 6 000 → 6 600 ₽Подготовлено отдельное изменение; артикулы не перепутаны
Цена 50 000 → 5 000 ₽Остановлено: снижение на 90% превышает тестовый порог
Пустая ценаОстановлено: нет значения для обновления
Цена в EURОстановлено: пересчёт и эта валюта не утверждены
Вариант не найден в каталогеОстановлено: нет подтверждённого соответствия
Две строки одного варианта с разными ценамиОбе остановлены: конфликт внутри прайса

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

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

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

Согласуйте изменения и испытайте импорт на копии

До записи покажите ответственному человеку отчёт: внутренний код, поставщик, вариант, старая и новая цена, разница, источник и статус. Ошибки должны быть видны отдельно, с причиной и следующим действием. «Не удалось загрузить» мало помогает, если непонятно, какая строка и почему не прошла.

Часть корректных строк можно выпустить отдельно, если ответственный явно одобрил именно такую партию. Но если причина похожа на общую ошибку файла — например, весь столбец разобран не в той валюте, — остановите весь пакет. Отчёт не должен прятать массовый сбой за несколькими зелёными строками.

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

Для пробной партии сохраните прежние значения. Убедитесь, что меняется только разрешённая цена. Откройте товар и корзину, проверьте нужный вариант, отображение валюты и итог после обновления. Если система хранит старую цену в кеше, учтите её штатный порядок обновления. Надпись «Импорт завершён» ещё не показывает, что увидел покупатель.

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

Подготовьте откат и порядок следующих загрузок

Сохраните для каждой партии коды товаров и пары «было → стало». При отмене возвращайте только затронутые цены, предварительно проверив, что они всё ещё равны значениям этой партии. Если после импорта уже было новое изменение, автоматический откат тоже должен остановиться для разбора.

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

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

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

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

Есть задача по автоматизации или развитию сайта? Расскажите о ней — обсудим, с чего начать.

Все статьи