Валюта, которую видит покупатель в каталоге, задаётся не в одном месте, а связкой настроек: базовая валюта типа цены, параметры компонента вывода и правила конвертации. Ошибка обычно в том, что цены хранятся в одной валюте, а показать нужно в другой — и тогда важно понимать, где именно происходит пересчёт.
Где вообще «живёт» валюта каталога
В 1С-Битрикс валюта цены — это свойство не товара, а типа цены. Каждая цена в таблице b_catalog_price хранится в конкретной валюте, а сам справочник валют лежит в модуле currency. Поэтому «изменить валюту в каталоге» на практике означает одно из двух:
- изменить валюту, в которой хранятся цены (реальная смена валюты типа цены и пересчёт значений);
- изменить валюту, в которой цены отображаются на витрине, оставив хранение как есть (конвертация на лету).
Это принципиально разные задачи. Первая затрагивает данные и обмен с 1С, вторая — только компоненты публичной части. Прежде чем что-то менять, определитесь, какой из сценариев вам нужен, иначе легко получить двойную конвертацию и неверные цифры.
Базовая валюта и типы цен
Базовая валюта сайта задаётся в списке валют: Магазин → Настройки → Валюты — у одной из валют стоит флаг «Базовая». Относительно неё считаются курсы всех остальных. Валюта конкретного типа цены настраивается в Магазин → Настройки → Типы цен — но там задаётся валюта по умолчанию для новых цен, а не жёсткое ограничение.
Ключевой момент: у товара может быть несколько типов цен (например, «Розница» в рублях и «Опт» в рублях), и каждая цена несёт свою валюту. Если вы хотите, чтобы каталог показывал цены в другой валюте, вариантов два:
- физически перезалить цены в нужной валюте (через обмен с 1С или групповое действие);
- оставить хранение и включить конвертацию при выводе.
RUB, USD и т. д.).Настройка компонентов вывода
За отображение цен на витрине отвечают комплексные компоненты bitrix:catalog, bitrix:catalog.section, bitrix:catalog.element и связанные с ними catalog.item. В настройках компонента (режим редактирования публички → «Изменить параметры компонента») есть блок «Цены», где перечислены выводимые типы цен, и параметр «Конвертировать цены к валюте» (CONVERT_CURRENCY).
- Тип цен (
PRICE_CODE) — какие типы цен показывать. Валюта витрины напрямую зависит от валюты выбранного типа цены. - Конвертировать цены к валюте (
CONVERT_CURRENCY = Y) — при включении цены пересчитываются в единую валюту, заданную параметромCURRENCY_ID. - Валюта конвертации (
CURRENCY_ID) — код целевой валюты, напримерUSD.
Именно эта пара параметров и решает большинство задач вида «показать весь каталог в одной валюте», не трогая хранимые данные. Пересчёт идёт по курсам из модуля «Валюты».
Конвертация на лету и курсы
Когда включена конвертация, Битрикс берёт цену в её исходной валюте и переводит в целевую по курсу из справочника валют. Курс задаётся в карточке валюты полем «Курс» и «Номинал» относительно базовой валюты. Формула простая: значение приводится к базовой валюте, а затем к целевой.
| Параметр | Где задаётся | На что влияет |
|---|---|---|
| Базовая валюта | Список валют (флаг «Базовая») | Точка отсчёта всех курсов |
| Курс и номинал | Карточка каждой валюты | Результат пересчёта на витрине |
| CONVERT_CURRENCY | Параметры компонента каталога | Включает пересчёт при выводе |
| CURRENCY_ID | Параметры компонента каталога | Валюта отображения |
CONVERT_CURRENCY в ту же валюту — цифры не изменятся, но при неверном курсе легко получить искажение. Держите один слой пересчёта.Формат и символ валюты
Смена валюты почти всегда тянет за собой формат вывода: символ, его положение, разделители разрядов и дробной части. Это настраивается не в компоненте, а в карточке валюты — поле «Формат» (шаблон вида # с указанием символа, например $# или # руб.) и параметры десятичных знаков.
Если после смены валюты цена показывается «как раньше» — с рублёвым символом или неверными разделителями, — проблема почти наверняка в формате конкретной валюты, а не в компоненте. Битрикс при выводе цены применяет форматирование именно той валюты, в которой цена отображается, через функцию CCurrencyLang::CurrencyFormat().
- Проверьте языковые настройки формата валюты для нужного языкового интерфейса сайта.
- Убедитесь, что число десятичных знаков соответствует валюте (для рублей обычно 2, для некоторых — 0).
Кэш каталога и обмен с 1С
После изменения настроек цены на витрине могут остаться прежними — виноват кэш. Комплексные компоненты каталога кэшируют вывод, поэтому сбросьте кэш: Настройки → Настройки продукта → Автокэширование или кнопкой сброса кэша в административной панели. При сложных доработках чистите и кэш компонента вручную в /bitrix/cache/.
Отдельно держите в голове обмен с 1С. Если каталог и цены приходят из 1С через стандартный обмен (CommerceML), то физическая валюта цены задаётся выгрузкой из 1С. Любая ручная смена валюты типа цены будет перезаписана при следующем обмене. В таких проектах менять валюту хранения нужно на стороне 1С, а на витрине использовать конвертацию только для отображения.
Итог
Чтобы изменить валюту в публичной части каталога, сначала определите задачу: сменить хранение или только отображение. Для отображения достаточно включить CONVERT_CURRENCY = Y и задать CURRENCY_ID в компонентах каталога, настроить курсы и формат валюты, а затем сбросить кэш. Для смены хранимой валюты — работайте с типами цен и учитывайте обмен с 1С, иначе изменения затрёт выгрузка.
Если каталог завязан на обмен с 1С или нужен корректный мультивалютный вывод без двойной конвертации, мы в B2Bsite настраиваем это как часть разработки и интеграции: аккуратно разводим слой хранения цен и слой отображения, чтобы на витрине всегда были верные цифры и формат.
Частые вопросы
Где в Битрикс задаётся валюта цены товара?
Валюта привязана не к товару, а к типу цены. Каждая цена хранится в своей валюте в модуле «Торговый каталог», а сам справочник валют — в модуле «Валюты».
Как показать весь каталог в другой валюте, не меняя цены?
Включите в параметрах компонента каталога опцию «Конвертировать цены к валюте» (CONVERT_CURRENCY) и задайте целевую валюту в CURRENCY_ID. Пересчёт пойдёт по курсам из модуля «Валюты».
Почему после смены валюты цена не изменилась на сайте?
Чаще всего дело в кэше компонентов каталога. Сбросьте кэш в настройках продукта или очистите кэш вручную, после чего проверьте вывод снова.
Откуда берётся курс для конвертации?
Из карточки валюты: поля «Курс» и «Номинал» задают отношение к базовой валюте сайта. Битрикс приводит цену к базовой валюте, а затем к целевой.
Почему валюта сменилась, а символ остался рублёвым?
Символ и разделители задаются в формате конкретной валюты, а не в компоненте. Проверьте поле «Формат» и число десятичных знаков в карточке валюты для нужного языка.
Что будет с валютой при обмене с 1С?
Валюта хранимых цен приходит из выгрузки 1С по CommerceML и перезаписывает ручные изменения. Менять валюту хранения нужно в 1С, а на витрине применять конвертацию для отображения.
Можно ли показывать цены сразу в двух валютах?
Да, но это уже мультивалютный сценарий, а не разовая настройка. Он требует продуманной схемы типов цен и правил конвертации, чтобы избежать двойного пересчёта.
Опасна ли двойная конвертация?
Да. Если цена уже хранится в целевой валюте, а компонент дополнительно конвертирует в ту же валюту, при неверных курсах цифры исказятся. Держите только один слой пересчёта.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.