For trade offers I did not try, but for ordinary goods in the template of the integrated component bitrix:catalog , before calling the component bitrix:catalog.section , I use the following code:
if (CModule::IncludeModule('currency') && !empty($GLOBALS[$arParams["FILTER_NAME"]]) && ( !empty($GLOBALS[$arParams["FILTER_NAME"]]['>=CATALOG_PRICE_1']) || !empty($GLOBALS[$arParams["FILTER_NAME"]]['>=CATALOG_PRICE_1']) || !empty($GLOBALS[$arParams["FILTER_NAME"]]['><CATALOG_PRICE_1']) ) ) { if (!empty($GLOBALS[$arParams["FILTER_NAME"]]['><CATALOG_PRICE_1'])) { $GLOBALS[$arParams["FILTER_NAME"]]['>=CATALOG_PRICE_1'] = $GLOBALS[$arParams["FILTER_NAME"]]['><CATALOG_PRICE_1'][0]; $GLOBALS[$arParams["FILTER_NAME"]]['<=CATALOG_PRICE_1'] = $GLOBALS[$arParams["FILTER_NAME"]]['><CATALOG_PRICE_1'][1]; unset($GLOBALS[$arParams["FILTER_NAME"]]['><CATALOG_PRICE_1']); } $arCurrency = array(); $res = CCurrency::GetList($by = 'currency', $order = 'asc'); while ($arRes = $res->Fetch()) { $arCurrency[] = $arRes['CURRENCY']; } if (!empty($GLOBALS[$arParams["FILTER_NAME"]]['>=CATALOG_PRICE_1']) && count($arCurrency) > 1) { $arPriceFilter = array('LOGIC' => 'OR'); foreach ($arCurrency as $currency) { $price = floatval($GLOBALS[$arParams["FILTER_NAME"]]['>=CATALOG_PRICE_1']); if ($arParams['CURRENCY_ID'] != $currency) { $price = CCurrencyRates::ConvertCurrency($price, $arParams['CURRENCY_ID'], $currency); } $arPriceFilter[] = array( 'CATALOG_CURRENCY_1' => $currency, '>=CATALOG_PRICE_1' => $price, ); } $GLOBALS[$arParams["FILTER_NAME"]][] = $arPriceFilter; unset($arPriceFilter); unset($GLOBALS[$arParams["FILTER_NAME"]]['>=CATALOG_PRICE_1']); } if (!empty($GLOBALS[$arParams["FILTER_NAME"]]['<=CATALOG_PRICE_1']) && count($arCurrency) > 1) { $arPriceFilter = array('LOGIC' => 'OR'); foreach ($arCurrency as $currency) { $price = floatval($GLOBALS[$arParams["FILTER_NAME"]]['<=CATALOG_PRICE_1']); if ($arParams['CURRENCY_ID'] != $currency) { $price = CCurrencyRates::ConvertCurrency($price, $arParams['CURRENCY_ID'], $currency); } $arPriceFilter[] = array( 'CATALOG_CURRENCY_1' => $currency, '<=CATALOG_PRICE_1' => $price, ); } $GLOBALS[$arParams["FILTER_NAME"]][] = $arPriceFilter; unset($arPriceFilter); unset($GLOBALS[$arParams["FILTER_NAME"]]['<=CATALOG_PRICE_1']); } }
Naturally, everything works out correctly only for the price type with ID = 1 , who needs another - change CATALOG_PRICE_1 and CATALOG_CURRENCY_1 to the ones you need.