К статье
Практический материал

Торговля и Склад · 11 мин

Как обновить цены в 1С Битрикс

Как обновить цены в 1С Битрикс: через админку, импорт из CSV, обмен с 1С и REST API. Проверка результата, типичные ошибки и способы избежать рассинхронизации.

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

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

Ниже разобраны четыре рабочих способа обновления цен: ручное редактирование, импорт из CSV/Excel, обмен с 1С и обновление через API. Для каждого указаны условия применения, ограничения и признаки успешного результата.

Как устроены цены в Битрикс и почему это важно понять до обновления

В 1С-Битрикс цена товара хранится не в инфоблоке, а в отдельной таблице каталога. У одного товара может быть несколько цен разных типов: базовая (BASE), оптовая, розничная, цена для партнёров. Типы цен настраиваются в разделе «Магазин → Настройки → Цены → Типы цен», и каждому типу назначаются группы пользователей, которые его видят.

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

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

Способ 1: ручное обновление цены в карточке товара

Ручное редактирование подходит, когда нужно изменить цену у нескольких товаров — до нескольких десятков. Откройте «Контент → Каталоги → Товары», найдите нужный товар и перейдите в режим редактирования. В карточке есть вкладка «Торговый каталог» (или секция «Цены»), где для каждого типа цены задаётся значение и валюта.

Для массовой правки удобнее список товаров: в нём можно вывести колонку с ценой, выделить несколько записей галочками и использовать групповые действия. Часть редакций позволяет редактировать цену прямо в таблице списка без открытия карточки — это заметно ускоряет работу при точечных правках.

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

Ручное обновление цены
  1. 1
    Откройте Контент → Каталоги → Товары и найдите товар
  2. 2
    Откройте карточку, перейдите к секции цен и введите новое значение
  3. 3
    Проверьте валюту и тип цены — частая ошибка: цена введена не в тот тип
  4. 4
    Сохраните и откройте страницу товара на витрине в режиме инкогнито
  5. 5
    Если цена старая — очистите кеш и проверьте активные скидки

Способ 2: импорт цен из CSV-файла

Когда обновить нужно сотни или тысячи позиций, используется импорт. Перейдите в «Контент → Инфоблоки → Импорт → CSV» или используйте мастер импорта торгового каталога (в новых версиях — «Магазин → Импорт данных»). Файл должен содержать минимум два столбца: уникальный идентификатор товара (артикул, XML_ID или код) и новую цену.

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

Перед полным импортом сделайте пробный прогон на файле из 10–20 строк и проверьте результат на витрине. Обратите внимание на разделитель дробной части: если в файле цена записана через запятую, а настройки импорта ожидают точку, значение может быть обрезано или записано неверно.

Способ 3: обновление цен через обмен с 1С

Если товарный учёт ведётся в 1С (Управление торговлей, УНФ, Комплексная автоматизация), цены должны обновляться только через обмен. Ручная правка цен на сайте в этом случае бессмысленна: при следующей выгрузке из 1С они будут перезаписаны значениями из учётной системы.

Обмен работает по протоколу CommerceML: 1С формирует файлы с товарами и ценами и передаёт их на сайт. Настройка выполняется на стороне 1С в настройках узла обмена: там указывается, какой вид цен выгружать и в какой тип цен Битрикс он попадает. На стороне сайта параметры обмена находятся в «Магазин → Настройки → Интеграция с 1С».

Для обновления только цен без полной выгрузки каталога в 1С есть режим выгрузки изменений или отдельная выгрузка предложений (цен и остатков). Это быстрее полного обмена и снижает нагрузку на сайт. Если цены после обмена не изменились, проверьте: выбран ли в настройках обмена нужный вид цен, установлены ли цены в 1С на дату документа «Установка цен номенклатуры» и не падает ли обмен с ошибкой в журнале.

Способ 4: обновление цен через REST API и скрипты

Для интеграций с поставщиками, парсерами и внешними учётными системами используется REST API Битрикс. Метод catalog.price.update (и связанные методы модуля catalog) позволяет изменить цену конкретного товара, зная его идентификатор и тип цены. Для массовых операций запросы объединяются в пакеты (batch), чтобы не выполнять тысячи отдельных обращений.

Альтернатива — серверный PHP-скрипт с использованием API ядра, например функций модуля каталога для добавления или обновления цены. Такой скрипт запускается по расписанию через cron, забирает прайс поставщика с FTP или по ссылке и обновляет цены напрямую. Это самый гибкий вариант, но он требует разработчика: ошибка в скрипте может массово испортить данные.

php
\Bitrix\Catalog\Model\Price::update($priceId, ['PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => 1, 'PRICE' => 1990.00, 'CURRENCY' => 'RUB']);

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

Как проверить, что цены обновились корректно

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

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

Контрольные точки

Как проверить результат

Цена на витрине в режиме инкогнито
Норма

Совпадает с новым значением

Тревожный признак

Старая цена — очистите кеш и проверьте скидки

Цена в корзине и при оформлении
Норма

Равна цене карточки или отличается на понятную скидку

Тревожный признак

Расхождение без активных скидок — проверяйте типы цен

Цены торговых предложений (SKU)
Норма

У каждого варианта новая цена

Тревожный признак

Обновился только товар-родитель, варианты со старой ценой

Выгрузка в фиды и маркетплейсы
Норма

В фиде новые значения после очередной генерации

Тревожный признак

Фид отдаёт старые цены — обновите генерацию фида

Типичные ошибки и как их избежать

Самая частая ошибка — обновление цены не в том типе цен. Менеджер вносит значение в «Розничную», а на витрине отображается «Базовая», и посетители продолжают видеть старую сумму. Перед массовым обновлением выясните, какой именно тип цены показывается на сайте по умолчанию.

Вторая группа ошибок связана с валютами и форматами: цена из прайса поставщика в долларах записывается как рублевая, либо разделитель дробной части съедает копейки. Третья типичная ситуация — параллельная работа обмена с 1С и ручных правок: цены «скачут» туда-обратно, потому что два источника данных конфликтуют. Правило простое: для каждого товара должен быть один источник истины по цене.

Типичные ошибки
01
Запись цены не в тот тип цен — на витрине остаётся старое значение
02
Ручная правка цен при работающем обмене с 1С — значения перезаписываются при следующей выгрузке
03
Импорт без сопоставления по уникальному полю — создаются дубли или ничего не обновляется
04
Забытые торговые предложения — у вариаций товара остаются старые цены
05
Отсутствие резервной копии перед массовым импортом — откатить ошибку невозможно
Маршрут решения

Как выбрать способ обновления

Товаров меньше нескольких десятков и учёт ведётся на сайтеРедактируйте цены вручную в карточке или через список товаров
Прайс поставщика приходит файлом и товаров сотни или тысячиНастройте импорт из CSV с сопоставлением по артикулу
Учёт ведётся в 1СОбновляйте цены только через обмен, предварительно проведя документ установки цен
Цены приходят из внешней системы по расписаниюИспользуйте REST API или серверный скрипт с логированием
Итог

Что важно запомнить

Определите источник истины по ценам: если это 1С — обновляйте только через обмен, если сайт — через карточку, импорт или API. Перед массовым обновлением делайте резервную копию и тестовый прогон, после — проверяйте витрину, корзину, SKU и фиды. Не забывайте про типы цен, валюты и скидки: именно они чаще всего объясняют «неправильную» цену на сайте.

Частые вопросы

Почему после обновления цены на сайте показывается старое значение?

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

Можно ли обновить цены сразу на процент, а не конкретными значениями?

Штатного массового пересчёта «плюс 10%» в админке нет. Варианты: выгрузить цены в файл, пересчитать в Excel и загрузить обратно, либо использовать наценки на группы товаров, если они поддерживаются вашей редакцией, либо небольшой скрипт через API.

Обмен с 1С проходит без ошибок, но цены не меняются. Что проверить?

Проверьте, что в 1С проведён документ «Установка цен номенклатуры» с нужной датой, что в настройках узла обмена выбран правильный вид цен и что этот вид сопоставлен с типом цен на сайте. Также посмотрите журнал обмена на стороне сайта — там видно, какие данные реально пришли.

Как обновить цены у товаров с размерами и цветами?

Цены хранятся у каждого торгового предложения отдельно. При ручной правке открывайте каждый вариант, при импорте сопоставляйте строки файла с предложениями, а не с товаром-родителем, при обмене с 1С убедитесь, что выгружаются характеристики номенклатуры.

Безопасно ли обновлять цены в рабочее время?

Ручная правка и обмен с 1С безопасны: они не блокируют работу сайта. Массовый импорт и скрипты лучше запускать в период низкой нагрузки: между записью цены и сбросом кеша посетители могут видеть смешанные данные, а тяжёлый импорт способен замедлить сайт.