Цены в интернет-магазине почти никогда не редактируются вручную. Их выгружают из учётной системы или поставщика и загружают в каталог пакетно — файлом. В 1С-Битрикс для этого есть несколько механизмов, и выбор зависит от того, откуда приходит прайс и как часто он меняется.
Какие есть способы загрузки цен
В 1С-Битрикс задача «обновить цены из прайса» решается одним из четырёх инструментов. Каждый закрывает свой сценарий, и на практике их часто комбинируют.
- Импорт CSV —
Магазин → Настройки → Импорт данных → CSV. Подходит, когда прайс приходит от поставщика Excel-файлом или выгрузкой без своего API. - Обмен с 1С (CommerceML) — основной промышленный способ: 1С:Предприятие само публикует цены на сайт через протокол
CommerceML 2. Файлыimport.xmlиoffers.xmlсодержат в том числе типы цен. - Импорт из Yandex Market (YML) — если источник в формате
yml, его тоже можно распарсить, но чаще как временное решение. - Свой скрипт на API — прямое обновление через
\Bitrix\Catalog\Model\Priceили старыйCPrice, когда формат нестандартный.
Импорт цен из CSV-прайса
Модуль импорта CSV находится в Магазин → Настройки → Импорт данных → Импорт из CSV (или Контент → Инфоблоки → Импорт → CSV в зависимости от версии). На первом шаге указывается путь к файлу, кодировка (UTF-8 или windows-1251) и разделитель полей — точка с запятой или табуляция.
Ключевой этап — сопоставление колонок. Цену нужно привязать не к «полю товара», а к конкретному типу цены (например BASE). В модуле каталога цена — это отдельная сущность, поэтому в маппинге выбирают поле вида «Цена [Розничная], RUB». Товар при этом ищется по уникальному признаку.
- Артикул (
XML_IDторгового предложения или свойствоCML2_ARTICLE) — самый надёжный ключ. - Внешний код (
XML_IDэлемента) — если товары уже связаны с учётной системой. - Название — крайне ненадёжно, использовать только при полном отсутствии кодов.
Обновление цен через обмен с 1С
Если магазин связан с 1С, цены приезжают вместе с каталогом. В CommerceML базовый каталог передаётся в import.xml, а торговые предложения и цены — в offers.xml. В блоке <Цены> каждая цена имеет свой <ИдТипаЦены>, который на стороне Битрикса сопоставляется с типом цены магазина.
Настройка обмена — Магазин → Настройки → Настройки обмена данными и одноимённая обработка «Обмен с сайтом» внутри 1С. Важные моменты:
- Типы цен в 1С и в Битриксе должны совпадать по идентификатору, а не только по названию — иначе цена приедет «в никуда».
- Обмен идёт по расписанию: 1С инициирует сессию, Битрикс принимает файлы в
/bitrix/admin/1c_exchange.php. - Можно выгружать только цены и остатки, не трогая описания — в 1С это отдельный флажок выгрузки, что заметно ускоряет обмен.
Автоматизация регулярного обновления
Ручной запуск импорта годится один раз. Для магазина, где прайс меняется ежедневно, обновление ставят на автомат.
- Профиль импорта. Настройки маппинга CSV сохраняются в профиль — его можно вызывать повторно без ручной настройки колонок.
- Агент или cron. Профиль запускается по расписанию через агенты Битрикса (
Настройки → Настройки продукта → Агенты) или, что стабильнее под нагрузкой, через системныйcron, вызывающий PHP-скрипт импорта. - Забор файла. Если поставщик кладёт прайс на FTP или отдаёт по ссылке, скрипт сначала скачивает файл (
curl/file_get_contents), затем передаёт его в импорт.
Для нестандартных прайсов пишут обработчик на API. Обновление одной цены современным ядром:
\Bitrix\Catalog\Model\Price::update($priceId, ['PRICE' => 1990, 'CURRENCY' => 'RUB']);
Такой скрипт сам решает, создавать цену или обновлять существующую, и корректно чистит кэш каталога через события модуля.
Типы цен, валюты и наценки при импорте
Один прайс нередко наполняет сразу несколько типов цен. Типичная связка выглядит так.
| Колонка прайса | Тип цены в Битриксе | Кто видит |
|---|---|---|
| Розница | BASE (Розничная) | Все пользователи |
| Опт | Оптовая | Группа «Оптовики» |
| Дилер | Дилерская | Группа «Дилеры» |
Если поставщик даёт только закупочную цену, розницу считают наценкой: закупку импортируют в служебный тип цены, а публичную цену формируют наценкой на группу или скидкой. Это удобно — при смене прайса пересчёт розницы происходит автоматически.
Магазин → Валюты) должен работать актуальный курс, иначе цены после импорта окажутся некорректными.Типичные ошибки и как их избежать
Проблемы импорта почти всегда сводятся к нескольким повторяющимся причинам. Проверьте их до запуска на боевом каталоге.
- Кодировка. «Кракозябры» в названиях — знак, что кодировку файла указали неверно. Excel по умолчанию сохраняет CSV в
windows-1251. - Разделитель дробной части. Запятая вместо точки (
1990,50) обрежет копейки или обнулит цену — приводите к точке до импорта. - Несовпадение типов цен. При обмене с 1С цена «теряется», если идентификаторы типов цен не совпадают.
- Отсутствие товара. Строки прайса без совпадения по артикулу либо игнорируются, либо плодят дубли — включайте лог импорта.
- Обнуление наличия. Импорт «только цен» не должен трогать остатки; проверьте, что колонка количества не передаётся пустой.
Итог
Для разовой загрузки от поставщика подойдёт импорт CSV с сопоставлением по артикулу; для постоянной работы магазина — обмен с 1С по CommerceML с частичной выгрузкой цен и остатков. Автоматизацию строят на профилях импорта, агентах или cron, а нестандартные прайсы обрабатывают скриптом на API каталога. Главное — надёжный ключ сопоставления, правильные кодировка и валюта и обязательное тестирование на копии.
Мы настраиваем такие обмены под ключ: связываем 1С с сайтом, разбираем «кривые» прайсы поставщиков и делаем обновление цен и остатков регулярным и предсказуемым. Если импорт тормозит или ломает каталог — поможем разобраться и стабилизировать процесс.
Частые вопросы
Можно ли импортировать только цены, не трогая описания и картинки?
Да. В CSV достаточно передать колонку с ключом (артикул) и колонку цены. В обмене с 1С для этого есть отдельная выгрузка «только цены и остатки», которая не перезаписывает контент.
По какому полю лучше сопоставлять товары при импорте?
По уникальному коду: артикулу (CML2_ARTICLE) или внешнему коду XML_ID. Сопоставление по названию ненадёжно и приводит к дублям.
Почему после обмена с 1С цены не появились на сайте?
Чаще всего идентификаторы типов цен в 1С и в Битриксе не совпадают. Сверьте ИдТипаЦены в offers.xml с настройками типов цен магазина.
Как обновлять цены автоматически по расписанию?
Сохраните настройки импорта в профиль и запускайте его агентом Битрикса или системным cron. Файл прайса скрипт может сам скачивать с FTP или по ссылке поставщика.
Что делать, если в прайсе цены в долларах, а на сайте рубли?
Импортируйте цену в валюте прайса и настройте актуальный курс в модуле валют. Битрикс пересчитает цену в рубли при показе на витрине.
Как загрузить закупочные цены, но показывать розницу с наценкой?
Импортируйте закупку в служебный тип цены, а публичную розницу формируйте наценкой на группу покупателей. При обновлении прайса розница пересчитается автоматически.
Импорт создал дубли товаров — как исправить?
Это признак сопоставления по названию или пустого ключа в части строк. Удалите дубли, задайте импорт по артикулу и включите лог, чтобы видеть непривязанные строки.
Можно ли обновлять цены через код, а не через модуль импорта?
Да, через API каталога: \Bitrix\Catalog\Model\Price::update() или add(). Это удобно для нестандартных форматов прайса и сложной логики пересчёта.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.