Перечёркнутая старая цена рядом с новой — это не отдельная настройка в карточке товара, а результат работы каталожных скидок. Битрикс автоматически считает две величины: полную цену и цену со скидкой, а вывести их обе — задача компонента и шаблона.
Откуда берутся две цены
В 1С-Битрикс нет поля «старая цена» и «новая цена» у товара. Есть базовая цена (тип цены, например «Розница») и механизм скидок каталога. Когда к товару применяется активная скидка, модуль catalog при выводе рассчитывает оптимальную цену методом \CCatalogProduct::GetOptimalPrice() и возвращает сразу два значения: полную цену (она станет перечёркнутой) и цену с учётом скидки.
То есть «перечёркивание» появляется только тогда, когда есть разница между базовой ценой и ценой со скидкой. Нет активной скидки — обе величины равны, и старая цена не показывается. Это ключевой момент: чтобы получить два ценника, нужно не менять карточку, а создать скидку.
Настройка каталожной скидки
Скидки на товары настраиваются в админке: раздел «Магазин» → «Скидки» (страница cat_discount_admin.php). Нажимаете «Добавить скидку» и задаёте условия:
- Название и активность — скидка работает только со статусом «Активна» и в рамках указанного периода дат.
- Величина — процент от цены или фиксированная сумма в валюте.
- Группы пользователей — для кого действует скидка (например, только «Оптовики» или все покупатели).
- Условия применения — конкретные товары, разделы каталога, свойства, диапазон цен, количество в заказе.
- Приоритет и «Прекратить дальнейшее применение» — если скидок несколько, порядок и суммирование управляются здесь.
После сохранения товары, попадающие под условие, начнут отдавать в компонент две цены. Проверить расчёт можно прямо в карточке товара в админке — блок цен покажет цену со скидкой.
Какие поля отдаёт компонент
Стандартные компоненты каталога (bitrix:catalog.section, bitrix:catalog.element, bitrix:catalog.item) нормализуют цены в массив ITEM_PRICES. Именно эти ключи используются в шаблоне для вывода двух ценников:
| Ключ | Что содержит |
|---|---|
VALUE / PRINT_VALUE | Полная (базовая) цена — её выводят как перечёркнутую |
DISCOUNT_VALUE / PRINT_DISCOUNT_VALUE | Цена со скидкой — актуальная к покупке |
DISCOUNT_DIFF | Сумма скидки в деньгах |
DISCOUNT_DIFF_PERCENT | Размер скидки в процентах (для бейджа «−20%») |
Логика простая: если VALUE не равно DISCOUNT_VALUE, значит скидка есть — показываем оба значения. Если равны — только одно. Версии PRINT_* уже отформатированы с валютой, поэтому в вёрстке удобнее опираться на них.
Параметры компонента
Чтобы старая цена и процент скидки вообще дошли до шаблона, у компонента должны быть включены соответствующие параметры. В настройках bitrix:catalog.section (и аналогичных) это:
SHOW_OLD_PRICE = Y— выводить старую (перечёркнутую) цену;SHOW_DISCOUNT_PERCENT = Y— показывать размер скидки в процентах;PRICE_CODE— список типов цен, которые участвуют в выводе (без нужного типа цена вообще не отобразится);PRICE_VAT_INCLUDE = Y— учитывать НДС в отображаемой цене.
SHOW_OLD_PRICE стоит в N. Проверяйте параметры именно того комплексного компонента, который выводит нужную страницу (каталог, раздел, деталь).Вывод в шаблоне и вёрстка
Само перечёркивание — это вёрстка. В стандартных шаблонах (например, тема eshop_bootstrap) старая цена оборачивается в отдельный элемент с CSS text-decoration: line-through, а актуальная — в текущий ценник. Если пишете свой шаблон catalog.item, логика такая:
- Берёте из товара массив
ITEM_PRICESпо нужномуPRICE_ID. - Сравниваете
VALUEиDISCOUNT_VALUE. - Если они различаются — выводите
PRINT_VALUEв теге со стилем.price-old, аPRINT_DISCOUNT_VALUE— в основном ценнике; рядом можно показать бейдж изDISCOUNT_DIFF_PERCENT.
Важно менять копию шаблона в /local/templates/<шаблон>/components/bitrix/catalog.section/<свой>/, а не системные файлы в /bitrix/ — иначе правки затрёт первое же обновление платформы. Для «умного» ценника с обновлением по количеству и без перезагрузки в комплексных компонентах используется JS из template.js — там же учитывается смена цены при выборе торгового предложения.
Разные скидки для групп покупателей
Поскольку в скидке указываются группы пользователей, вы можете показывать разное перечёркивание разным посетителям. Гость видит розничную цену без скидки, авторизованный оптовик — свою специальную цену как «новую», а розничную как «старую» перечёркнутую. Это удобный приём для B2B-витрин: акцент на выгоде для зарегистрированных клиентов.
Технически цена пересчитывается под текущего пользователя, потому что GetOptimalPrice() получает его группы. Если у вас настроены отдельные типы цен для B2B, скидка может строиться относительно розничного типа — тогда старой (перечёркнутой) будет розница, а новой — оптовая. Комбинируйте типы цен и скидки осознанно, чтобы клиент не увидел «отрицательную» экономику.
Проверка и типичные проблемы
Если две цены не выводятся как ожидается, проходите по чек-листу:
- Скидка активна и попадает в период — просроченная или неактивная скидка молча игнорируется.
- Совпадают группы — пользователь должен входить в группу, для которой задана скидка (проверьте и гостей).
- Кэш компонента — после создания скидки очистите кэш (
catalog.sectionкэшируется), иначе увидите старую картину. - Округление — правила округления цен со скидкой («Магазин → Настройки → Округление») могут сделать так, что после округления «новая» цена сравняется с базовой, и перечёркивание пропадёт.
- НДС — если базовая и итоговая цены считаются с разным учётом НДС, суммы визуально «не сойдутся»; держите настройку
PRICE_VAT_INCLUDEединой по каталогу.
Для отладки удобно временно вывести ITEM_PRICES через print_r() в шаблоне и посмотреть, реально ли различаются VALUE и DISCOUNT_VALUE — это сразу разделяет проблему «не считается скидка» и «не выводит шаблон».
Итог
Перечёркнутая старая цена в Битрикс — это связка трёх слоёв: каталожная скидка формирует две величины, компонент с включённым SHOW_OLD_PRICE отдаёт их в ITEM_PRICES, а шаблон сравнивает VALUE и DISCOUNT_VALUE и рисует ценник. Настроив скидки на группы, вы получаете и B2B-сценарий с персональной выгодой.
Если нужно аккуратно доработать шаблоны каталога, увязать акции со скидками из 1С или ускорить каталог, где ценники обновляются на лету, — мы в B2Bsite делаем это на проектах регулярно и поможем собрать корректный вывод цен без потери при обновлениях платформы.
Частые вопросы
Где в Битрикс включить показ старой цены?
Отдельной галочки «показать старую цену» в карточке товара нет. Нужно создать активную скидку в разделе «Магазин → Скидки» и включить параметр SHOW_OLD_PRICE в настройках компонента каталога.
Почему скидка есть, а перечёркнутой цены не видно?
Чаще всего причина в параметре компонента SHOW_OLD_PRICE = N или в кэше. Также проверьте, что скидка активна, попадает в период дат и назначена на группу текущего пользователя.
Чем каталожная скидка отличается от скидки на корзину?
Каталожная скидка меняет отображаемую цену товара в списке и карточке, давая перечёркнутый ценник. Скидка на корзину применяется при оформлении заказа и на витрине товар перечёркнутым обычно не делает.
Как показать разную старую цену для розницы и опта?
Задайте скидку с привязкой к группам пользователей или используйте отдельные типы цен для B2B. Тогда оптовик увидит свою цену как новую, а розничную как перечёркнутую старую.
Какие поля отвечают за две цены в шаблоне?
В массиве ITEM_PRICES это VALUE/PRINT_VALUE (полная цена, идёт в перечёркивание) и DISCOUNT_VALUE/PRINT_DISCOUNT_VALUE (цена со скидкой). Процент скидки лежит в DISCOUNT_DIFF_PERCENT.
Как сделать перечёркивание визуально?
Это задача CSS: старую цену оборачивают в элемент со стилем text-decoration: line-through, а актуальную выводят обычным ценником. Правки вносят в копию шаблона в /local, а не в системные файлы /bitrix.
Может ли округление убрать перечёркнутую цену?
Да. Если правила округления цен со скидкой приводят итоговую цену к значению базовой, разница исчезает и старая цена перестаёт показываться. Проверьте настройки округления в разделе «Магазин».
Нужно ли чистить кэш после создания скидки?
Да, компоненты каталога кэшируются, и новая скидка может не отобразиться сразу. Очистите кэш компонента или сайта, чтобы увидеть корректный расчёт двух цен.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.