Yandex Metrika
sanches.free 1 просмотр

Сортировка по цене после обновления каталога: PRICE_SCALE и валюта

Откуда берётся сбой

На проектах, которые долго жили на старых ветках и затем переехали на «1С‑Битрикс» шестнадцатой линейки, заметили неверную сортировку по цене в выборках CIBlockElement::GetList и в компонентах каталога. С модуля catalog версии 16.0.3 при построении сортировки опираются на столбец b_catalog_price.PRICE_SCALE — нормализованное значение в базовой валюте. Если конвертация прайсов прошла с пропуском, поле может оказаться пустым по всей таблице, и упорядочивание по стоимости перестаёт соответствовать ожиданиям.

Быстрое восстановление

  • В административном разделе откройте список валют, выберите используемую как базовую, и сохраните карточку без изменений — генератор коэффициентов заново синхронизирует параметры.
  • Если после этого PRICE_SCALE всё ещё нулится или остаётся пустым, выполните на рабочей базе апдейт, который перемножит цену и актуальный CURRENT_BASE_RATE из справочника валют.
UPDATE b_catalog_price AS shop_price_sheet
INNER JOIN b_catalog_currency AS shop_currency_sheet
    ON shop_currency_sheet.CURRENCY = shop_price_sheet.CURRENCY
SET shop_price_sheet.PRICE_SCALE = shop_price_sheet.PRICE * shop_currency_sheet.CURRENT_BASE_RATE;

Что проверить

Для ключевых типов цен строки в b_catalog_price должны иметь заполненный PRICE_SCALE, а в b_catalog_currency — осмысленный CURRENT_BASE_RATE. Когда оба набора данных согласованы, фильтры и сортировка на витрине обычно снова ведут себя предсказуемо.

Дополнительная диагностика

Цепочку обновления модулей удобно просмотреть в файле /bitrix/modules/updater.log: там фиксируются операции апдейтера и помогает понять, не оборвался ли сценарий миграции на промежуточном шаге.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии