Массовое изменение цен — это пересчёт стоимости сразу для целого раздела или подборки товаров: повышение на процент, округление, смена типа цены или валюты. В 1С-Битрикс для этого есть штатные групповые операции в списке товаров, а для регулярных пересчётов — агенты и небольшие скрипты на API модуля catalog.
Когда это нужно
Ситуации, где ручное редактирование карточек не годится, встречаются постоянно: поставщик поднял отпускные цены на всю линейку, изменился курс валюты, нужно провести распродажу в конкретной категории или синхронизировать наценку по разделу. Открывать каждый товар по отдельности — это часы работы и высокий риск ошибки.
Массовые операции решают задачу за один проход по разделу. Основные сценарии:
- Повышение или снижение цен на процент — например, +7% на весь раздел «Насосы».
- Фиксированная надбавка — прибавить или вычесть сумму в валюте цены.
- Смена типа цены — перевести товары на другой тип (розница, опт, B2B).
- Округление — привести цены к «красивым» значениям после пересчёта.
Магазин → Настройки → Типы цен.Групповые операции в списке товаров
Самый простой инструмент — встроенные групповые действия в списке товаров раздела. Откройте Контент → Каталог → нужный раздел (или Магазин → Каталог), зайдите в целевой раздел инфоблока и включите отображение колонки с ценой через шестерёнку настройки списка.
- Отметьте галочками товары или установите флажок в шапке, чтобы выбрать всё на странице.
- Внизу списка в выпадающем меню «Для всех отмеченных» (или «Для всех найденных», если работаете с фильтром по всему разделу) выберите нужное действие.
- В зависимости от версии доступны действия по изменению цены — установить значение, изменить тип цены, а также редактирование прямо в ячейках при включённом режиме правки.
- Нажмите «Применить» и подтвердите операцию.
Режим редактирования в списке (карандаш/«Править» у строки или общий флажок «Редактировать») позволяет менять значения прямо в таблице и сохранять пачкой — удобно, когда правок немного, но они разные для каждого товара.
Пересчёт на процент и округление
Пропорциональный пересчёт — самая частая задача. В штатном интерфейсе прямого поля «изменить на N%» может не быть во всех сборках, поэтому для процентных операций часто используют один из подходов:
- Наценки и скидки — если нужно не менять базовую цену, а показывать другую для группы покупателей, логичнее настроить
наценку к базовой цене, а не переписывать цены массово. - Экспорт-правка-импорт — выгрузить раздел в CSV/Excel, пересчитать формулой и импортировать обратно через профиль импорта.
- Скрипт на API — точечный пересчёт с округлением по вашей логике (см. ниже).
Про округление: в 1С-Битрикс есть отдельная настройка Магазин → Настройки → Настройки цен → Правила округления. Она задаёт, как округляется отображаемая цена (до рубля, до 10 рублей и т. д.) при выводе на витрине, не трогая сохранённое значение. Это удобно совмещать с массовым повышением: пересчитали на процент, а округление на витрине держит цены аккуратными.
Через экспорт и импорт CSV
Для больших разделов и сложных формул надёжнее всего работать через файл. Схема простая:
- Выгрузите товары раздела в CSV:
Магазин → Настройки → Экспорт данных → CSVили экспорт инфоблока. Убедитесь, что в выгрузку попадают внешний код (XML_ID) и колонки цен. - Откройте файл в Excel/LibreOffice, пересчитайте цены формулой (например,
=ЦЕНА*1.07), при необходимости округлите функциейОКРУГЛ. - Импортируйте обратно через
Магазин → Настройки → Импорт данных → CSV, сопоставив колонки и указав XML_ID как ключ обновления.
| Способ | Когда подходит | Риск |
|---|---|---|
| Групповые операции | Небольшой раздел, простое действие | Низкий |
| Экспорт → правка → импорт | Сложные формулы, сотни позиций | Ошибка сопоставления колонок |
| Скрипт по API / агент | Регулярный пересчёт, автоматизация | Нужен разработчик |
Скрипт на API модуля catalog
Когда пересчёт нужен регулярно или по нетривиальной логике, самый гибкий вариант — программный. Цены товаров хранятся в модуле catalog, работать с ними следует через методы класса \Bitrix\Catalog\Model\Price (в старых проектах — CPrice).
Типовой алгоритм: выбрать элементы раздела через CIBlockElement::GetList() с фильтром SECTION_ID, для каждого получить текущую цену нужного типа и обновить её с повышающим коэффициентом:
- Получаем ID цены:
Price::getList()с фильтром поPRODUCT_IDиCATALOG_GROUP_ID(тип цены). - Считаем новое значение и вызываем
Price::update($id, ['PRICE' => $new, 'CURRENCY' => 'RUB']). - Если цены для товара ещё нет — используем
Price::add().
Такой скрипт можно повесить в Настройки → Агенты для планового запуска (например, ночной пересчёт по курсу) или вызывать вручную из-под администратора. Важно: обновление через модель Price корректно чистит кэш и пересчитывает связанные данные, тогда как прямые UPDATE в таблицу b_catalog_price оставят витрину с устаревшими значениями.
Частые ошибки и как их избежать
Массовые операции необратимы «в один клик», поэтому дисциплина важнее скорости. На что смотреть:
- Нет резервной копии. Перед крупным пересчётом сделайте дамп таблиц
b_catalog_priceили выгрузите текущие цены в CSV — это ваш откат. - Перепутан тип цены. Легко повысить розницу, а поднять надо было опт. Всегда проверяйте
CATALOG_GROUP_ID/название типа перед применением. - Валюта. В мультивалютном каталоге пересчёт на процент по разным валютам без учёта курса даёт кашу — фильтруйте по валюте.
- Кэш витрины. После правок в БД сбросьте кэш каталога:
Настройки → Настройки продукта → Автокэшированиеи очистка кэша компонентов. - Обмен с 1С. Если работает обмен, ближайшая выгрузка из 1С может перезаписать ваши ручные правки. Меняйте цены в источнике или отключайте перезапись поля цены.
Итог
Для разовой правки небольшого раздела хватает групповых операций в списке товаров. Для сотен позиций и формул надёжнее связка экспорт → пересчёт → импорт с ключом по XML_ID. А регулярные пересчёты по курсу или наценке лучше автоматизировать агентом и скриптом на API модуля catalog. Во всех случаях следите за типом цены, валютой, кэшем и делайте бэкап перед запуском.
Если пересчёты цен завязаны на 1С или требуют своей бизнес-логики, мы настраиваем корректный обмен и пишем скрипты пересчёта, которые не ломают витрину и кэш. Поможем один раз выстроить процесс, чтобы цены обновлялись автоматически и без сюрпризов.
Частые вопросы
Как повысить цены во всём разделе на определённый процент?
Проще всего выгрузить раздел в CSV, пересчитать цены формулой в Excel и импортировать обратно по XML_ID. Для регулярного пересчёта используют скрипт на API модуля catalog, запускаемый агентом.
Групповая операция «Для всех найденных» затронет только видимые товары?
Нет, она применится ко всем товарам, попавшим под текущий фильтр, включая скрытые за пределами экрана. Обязательно проверьте фильтр и число найденных позиций перед запуском.
Можно ли массово изменить только оптовую цену, не трогая розницу?
Да. И в групповых операциях, и в скрипте нужно указывать конкретный тип цены (CATALOG_GROUP_ID). Тогда пересчёт затронет только выбранный тип, остальные останутся прежними.
Изменения не видны на витрине после правки цен, в чём дело?
Чаще всего это кэш каталога. Очистите кэш компонентов и проверьте автокэширование в настройках. Если правили цены прямым SQL, обновляйте их через модель Price, иначе кэш не сбросится.
Что будет с ценами при следующем обмене с 1С?
Если обмен перезаписывает поле цены, ближайшая выгрузка из 1С затрёт ваши ручные правки. Меняйте цены в источнике (1С) или настраивайте, какие поля перезаписываются при обмене.
Как откатить неудачное массовое изменение цен?
Штатной кнопки отмены нет. Заранее сделайте бэкап таблицы b_catalog_price или выгрузите текущие цены в CSV — это позволит вернуть прежние значения импортом или из дампа.
Нужно ли отдельно округлять цены после повышения на процент?
Сохранённые значения останутся с копейками. Для аккуратного вида на витрине настройте правила округления в настройках цен — они округляют отображаемую цену, не меняя её в базе.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.