Сортировка по цене после обновления каталога: 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 дней гарантии