У вас пять поставщиков, и каждый присылает прайс по-своему: один — Excel с объединёнными ячейками и логотипом в шапке, второй — CSV в кодировке из прошлого века, третий — XML со своей структурой. Цены и остатки в них меняются каждый день, а менеджер по полдня вручную переносит числа в каталог, ошибается и не успевает. Знакомая картина — и она напрямую бьёт по обороту: витрина с устаревшими ценами и остатками теряет заказы и репутацию.
В этой статье разберём, как настроить импорт прайс-листов поставщиков в интернет-магазин на 1С-Битрикс: какие бывают форматы, как сопоставлять колонки и товары, накручивать наценку по группам клиентов, обновлять цены и остатки, не затирая свой контент, и не ронять сайт кривым файлом. Это инженерная тема, и делаем мы её в рамках автоматизации на 1С.
Коротко
- Не требуйте от поставщиков один формат — стройте гибкий импорт с настраиваемым сопоставлением колонок под каждого.
- Сопоставляйте товары по стабильному коду (артикул, штрихкод), а не по названию, и храните таблицу соответствий.
- Закупочную цену прогоняйте через правила наценки в цены продажи по группам клиентов, не кладите в витрину напрямую.
- Обновляйте только цену и остаток, защищайте свой контент, валидируйте файл и ведите лог каждого запуска.
Почему импорт прайсов — это боль
Импорт прайсов сложен не технически, а из-за хаоса на входе. У каждого поставщика свой формат, своя структура, свои единицы измерения и свои представления о том, как назвать колонку с ценой. Нет стандарта, которому все следуют, — есть десятки разных файлов, которые нужно свести к единой витрине.
Сложность умножается на регулярность: прайс — не разовая загрузка, а ежедневный процесс. Цены меняются, остатки скачут, появляются новые позиции и исчезают старые. Ручной перенос при таком темпе невозможен физически: менеджер либо не успевает, либо ошибается, и витрина расходится с реальностью. Покупатель заказывает то, чего нет, или по старой цене — и это прямые убытки и негатив.
Поэтому импорт прайсов почти всегда автоматизируют. Но автоматизировать хаос нельзя — сначала его нужно причесать: договориться о ключах сопоставления, построить маппинг под каждого поставщика и обложить процесс валидацией. Об этом и пойдёт речь.
Форматы прайсов: Excel, CSV, XML
Прайсы приходят в трёх основных форматах, и у каждого своя специфика при разборе.
| Формат | Плюсы | Сложности |
|---|---|---|
| Excel (XLS/XLSX) | Привычен поставщикам, распространён | Объединённые ячейки, шапки, несколько листов, форматирование |
| CSV | Простой, легко парсить | Кодировки, разделители, экранирование, дробные числа |
| XML | Структурирован, машиночитаем | Разные схемы, вложенность, объём |
На практике вы не выбираете формат — его диктует поставщик. Чаще всего это Excel произвольной структуры, самый неудобный для машины вариант: логотипы в шапке, объединённые ячейки, товары вперемешку с заголовками разделов. Задача импорта — уметь читать всё это и извлекать полезные строки.
Отдельная головная боль — кодировки и числа. CSV в Windows-кодировке превращает кириллицу в мусор, если не распознать её; запятая как десятичный разделитель ломает парсинг цен. Всё это обрабатывается на этапе чтения, до того как данные попадут в каталог.
Сопоставление колонок: маппинг под поставщика
Первый шаг после чтения файла — понять, где что. У одного поставщика цена в колонке «Опт», у другого — «Цена руб», у третьего колонок с ценами три. Артикул может называться «Код», «Артикул», «SKU» или вообще не иметь заголовка. Требовать единообразия бесполезно — нужно настраиваемое сопоставление колонок.
Маппинг — это правило «в файле поставщика X колонка N — это цена, колонка M — артикул, колонка K — остаток». Его настраивают один раз под каждого поставщика и переиспользуют при каждом импорте:
- Привязка полей. Для каждого целевого поля (артикул, цена, остаток, название) указывают, из какой колонки прайса его брать.
- Пропуск мусора. Строки шапки, разделов и итогов исключаются по правилам, чтобы не попасть в каталог.
- Преобразования. Единицы, формат чисел, лишние пробелы приводятся к нужному виду на лету.
- Профиль на поставщика. Каждый маппинг сохраняется как профиль импорта и применяется автоматически.
Гибкий маппинг — сердце хорошего импорта. Именно он позволяет подключить нового поставщика за настройку профиля, а не за переписывание кода. Без него каждый новый прайс превращается в отдельную разработку.
Сопоставление товаров: по какому ключу
Второй, более тонкий шаг — понять, какому товару на сайте соответствует строка прайса. Здесь главное — выбрать правильный ключ сопоставления.
Пригодные ключи, по надёжности:
- Штрихкод (EAN). Самый надёжный глобальный идентификатор, если поставщик его даёт.
- Код производителя. Стабилен между поставщиками одного бренда.
- Артикул поставщика. Уникален в рамках конкретного поставщика; хранится в таблице соответствий.
Для каждого поставщика ведут таблицу соответствия «его код → ваш товар». Она накапливается: один раз сопоставленная позиция дальше матчится автоматически. Новые, ещё не привязанные строки прайса выводят на ручное сопоставление — менеджер один раз связывает их с товаром или заводит новую карточку, и дальше они идут автоматом. Это ключевой механизм: он превращает разовый героизм в управляемый процесс.
Наценка и цены по группам клиентов
Из прайса приходит закупочная цена, а витрине нужны цены продажи — и часто не одна, а несколько для разных групп клиентов (розница, опт, дилеры). Класть закупочную цену прямо в каталог нельзя: вы либо покажете себестоимость покупателю, либо продадите в убыток.
Поэтому между прайсом и витриной стоит слой наценки:
- Получите закупочную цену. Она приходит из прайса и хранится как внутренняя, невидимая покупателю.
- Примените правила наценки. Процент или сумма наценки — общий, по категории, бренду или конкретному поставщику.
- Сформируйте типы цен. На основе закупочной и наценки считаются цены для групп клиентов через типы цен и группы пользователей.
- Округлите красиво. Цены приводятся к «маркетинговому» виду (999 вместо 1003) по заданным правилам.
Так закупочная цена остаётся вашей внутренней информацией, а покупатель каждой группы видит корректную цену. Механика типов цен и групп в 1С-Битрикс — штатная, но правила наценки поверх неё обычно кастомные под бизнес. Это уже соприкасается с логикой B2B-каталога, где у каждой группы своя цена, — и с автоматизацией продаж в целом.
Что обновлять, а что защитить
Импорт — это обновление, и здесь легко навредить. Из прайса приходят цена и остаток, но карточка товара содержит гораздо больше: описание, фото, характеристики, SEO-тексты, которые вы наполняли вручную. Если импорт затрёт их данными поставщика (а у поставщика описания либо нет, либо оно куцее), вы потеряете весь контент.
Поэтому обработчик импорта должен явно разделять поля:
- Обновляемые. Цена, остаток, иногда срок поставки — то, что реально меняется в прайсе и приходит из него.
- Защищённые. Название (ваше, не поставщика), описание, фото, характеристики, SEO — импорт их не трогает.
- Заполняемые при создании. Для новых товаров можно взять базовые поля из прайса, но при обновлении — не перезаписывать.
Это правило спасает от классической катастрофы, когда очередной ночной импорт обнуляет вручную наполненные карточки. Разделение «обновляем / защищаем» задаётся в обработчике явно и проверяется на тесте до боевого запуска.
Валидация: не сломать сайт кривым файлом
Прайс приходит извне, а значит, ему нельзя доверять. Поставщик может прислать файл в другой кодировке, с пустыми ценами, с остатками-заглушками или с ценами, случайно уменьшенными в десять раз. Без валидации такой файл заливается в витрину и ломает её — покупатели видят цену «0» или «в десять раз дешевле».
Валидация до записи проверяет:
- Кодировку и структуру. Файл читается, обязательные колонки на месте, строк не подозрительно мало.
- Адекватность цен. Нет нулей и отрицательных чисел там, где должна быть цена; нет резких аномальных отклонений.
- Адекватность остатков. Остаток — число, не мусор; массовое обнуление остатков — повод насторожиться.
- Полноту. Файл не обрезан, число строк близко к ожидаемому.
Подозрительный импорт — например, где средняя цена вдруг упала в разы, — обработчик должен не заливать молча, а отклонять или ставить на подтверждение оператором. Лучше задержать обновление на час, чем на этот час показывать покупателям сломанные цены. Как выстраивать безопасную обработку внешних данных и не завязать на ней стабильность сайта, мы разбираем в статье про REST, вебхуки и безопасность в Битрикс.
Пропавшие позиции и снятие с продажи
Отдельный вопрос — что делать с товарами, которые были в прошлом прайсе, но исчезли из нового. Обычно это значит, что позиции нет в наличии или поставщик снял её с продажи.
Соблазн — удалить такие товары, но это ошибка. Удаление ломает внешние и внутренние ссылки, теряет наработанные позиции в поиске и историю. Правильно — пометить позицию «нет в наличии» и снять с продажи, сохранив карточку:
- Скрытие вместо удаления. Товар перестаёт продаваться, но карточка и её SEO живут.
- Обнуление остатка. Остаток ставится в ноль, покупатель видит «нет в наличии» или «под заказ».
- Обратимость. Появился снова в прайсе — автоматически вернулся в продажу.
- Порог осторожности. Если из прайса «пропала» подозрительно большая доля товаров, это, скорее, битый файл — не снимайте всё с продажи, поднимите тревогу.
Такой подход бережёт SEO и не создаёт битых ссылок, а массовое исчезновение товаров превращает из катастрофы в контролируемое событие.
Расписание, агенты и фоновая обработка
Импорт — регулярный процесс, и запускать его руками не нужно. В 1С-Битрикс это делают через агенты или системный крон по расписанию.
Несколько принципов надёжного расписания:
- Разная частота для цен и остатков. Цены обычно раз в сутки, остатки — чаще, если поставщик отдаёт их оперативно.
- Фон для тяжёлых файлов. Большие прайсы обрабатывают в фоне частями, чтобы не вешать сайт и не упираться в лимиты выполнения.
- Запуск вне пика. Тяжёлый импорт ставят на ночь или на время низкого трафика.
- Защита от наложения. Новый запуск не стартует, пока не завершился предыдущий, — иначе гонки и дубли.
Крон надёжнее агентов на хитах для тяжёлых регулярных задач, потому что не зависит от посещаемости сайта. Стабильность таких фоновых процессов сильно зависит от инфраструктуры — как её настроить под нагрузку, мы описываем в материале про хостинг и инфраструктуру BitrixVM.
Реализация импорта в 1С-Битрикс
Технически импорт прайсов ложится на инфоблоки и торговый каталог, а обработчик пишут на современном ядре D7. Общая архитектура такая:
- Приём файла. Прайс забирается из почты, с FTP или по ссылке и складывается в очередь на обработку.
- Чтение и маппинг. Файл читается по формату, колонки сопоставляются по профилю поставщика, мусорные строки отсеиваются.
- Сопоставление товаров. Строки матчатся с товарами по ключу через таблицу соответствий; несопоставленное — в очередь на ручную привязку.
- Наценка и цены. Закупочная цена прогоняется через правила наценки в типы цен для групп клиентов.
- Запись с защитой полей. Обновляются только цена и остаток, контент защищён; отсутствующие позиции скрываются.
- Сброс кэша. После записи инвалидируется кэш каталога, чтобы витрина показала новые цены и остатки.
Работу с данными эффективнее строить на D7 ORM — это быстрее и безопаснее прямых запросов; подробно об этом в статье про D7 ORM в Битрикс. А чтобы такой обработчик выкатывался на прод контролируемо и без риска уронить боевой импорт, процесс выстраивают по CI/CD и деплою на Битрикс.
Логи, ошибки и контроль импорта
Автоматический импорт нельзя запустить и забыть — он работает с изменчивыми внешними данными, и что-то обязательно пойдёт не так. Спасает подробное логирование и контроль.
- Лог каждого запуска. Когда, какой файл, сколько строк обработано, обновлено, пропущено, отклонено.
- Список ошибок. Несопоставленные позиции, битые строки, отклонённые по валидации — с причинами.
- Уведомления. Если импорт упал, отклонён или дал много ошибок — оповещение ответственному, а не тишина.
- Дашборд состояния. Когда последний раз обновился каждый поставщик, всё ли свежее.
Хороший лог превращает импорт из чёрного ящика в управляемый процесс: видно, что каждый поставщик обновился вовремя, а сбои всплывают сразу, а не через неделю жалоб покупателей на неверные цены.
Частые ошибки импорта прайсов
- Сопоставление по названию. Строки не матчатся из-за разных формулировок, товары дублируются.
- Закупочная цена в витрину. Наценка не применяется, покупатель видит себестоимость или магазин продаёт в минус.
- Импорт затирает контент. Описания, фото и SEO перезаписываются пустыми данными поставщика.
- Нет валидации. Кривой файл с нулями и аномальными ценами заливается прямо в витрину.
- Удаление пропавших товаров. Ломаются ссылки, теряется SEO вместо обратимого скрытия.
- Жёсткий маппинг в коде. Новый поставщик требует переписывания обработчика вместо настройки профиля.
- Импорт на хитах в пик. Тяжёлый файл тормозит сайт в час нагрузки; нет фоновой обработки.
- Нет логов. Сбои и несопоставленные позиции всплывают из жалоб, а не из мониторинга.
Чек-лист настройки импорта
- Форматы разобраны. Импорт читает Excel, CSV и XML ваших поставщиков с учётом кодировок и структуры.
- Маппинг настраиваемый. Для каждого поставщика есть профиль сопоставления колонок, новый подключается настройкой.
- Ключ сопоставления надёжный. Товары матчатся по штрихкоду или коду, а не по названию; есть таблица соответствий.
- Наценка настроена. Закупочная цена превращается в цены продажи по группам клиентов, остаётся внутренней.
- Поля разделены. Обновляются только цена и остаток, контент и SEO защищены от перезаписи.
- Валидация работает. Кодировка, обязательные колонки и адекватность цен/остатков проверяются до записи.
- Пропавшее скрывается. Исчезнувшие из прайса товары помечаются «нет в наличии», а не удаляются.
- Расписание и логи. Импорт идёт по крону в фоне, каждый запуск логируется, сбои уведомляют.
Вывод
Импорт прайс-листов — это не разовая загрузка, а постоянный процесс сведения хаоса поставщиков к единой актуальной витрине. Его нельзя делать вручную и нельзя автоматизировать наивно: нужен гибкий маппинг колонок, надёжное сопоставление товаров по коду, слой наценки под группы клиентов и защита вашего контента от перезаписи.
Обложите импорт валидацией и логами, скрывайте пропавшие позиции вместо удаления, гоняйте тяжёлые файлы в фоне по расписанию — и каталог всегда будет с актуальными ценами и остатками без ручного труда. Это освобождает менеджеров и убирает целый класс ошибок, которые стоят заказов. Настроить такой импорт под ваших поставщиков поможет автоматизация на 1С, а привести в порядок уже существующий обмен — аудит и оптимизация 1С.