noganno
10/29/2015 - 10:15 AM

Сортировка по цене с учетом валют

http://dev.1c-bitrix.ru/support/forum/forum6/topic38885/ Создал помимо базовой цены дополнительные 3 типа цены (RUB, USD, EUR). Их конвертирую из базовой цены и сортирую по выбранной валюте.

CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
CModule::IncludeModule("sale");

$iTime = 0;
$arSelect = Array("ID");
$arFilter = Array("IBLOCK_ID"=>2, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
   $arFields = $ob->GetFields();
   
   // Пауза для снижения нагрузки
   if($iTime == 25)
   {
      $iTime = 0;
      sl eep(1);
   }
   
   // получаем базовую цену товара
   $ar_res = CPrice::GetBasePrice($arFields['ID']);
   
   // получаем цену со скидкой если она существует
   $db_resSale = CPrice::GetList(
      array(),
      array(
         "PRODUCT_ID" => $arFields['ID'],
         "CATALOG_GROUP_ID" => 5
      )
   );
   // если цена со скидкой сущетвует то заменяем базовую цену новым значением для обработки в массиве
   if ($ar_resSale = $db_resSale->Fetch())
   {
      // обновляем цену
      $ar_res["PRICE"] = $ar_resSale["PRICE"];
   }
   
   /********************************************/
   
   // Валюта
   $currRub = 'RUB';
   // Конвертация цены в выбранную валюту
   $newCurrRub = CCurrencyRates::ConvertCurrency($ar_res['PRICE'], $ar_res['CURRENCY'], $currRub);
   // Массив с новыми занчениями 
   $arFieldsNewPriceRub = Array(
      "PRODUCT_ID" => $arFields['ID'],
      "CATALOG_GROUP_ID" => 4,
      "PRICE" => $newCurrRub,
      "CURRENCY" => $currRub
   );
   // Массив обновляемого товара (ID товара и тип обновляемой цены)
   $resNewPriceRub = CPrice::GetList(
      array(),
      array(
         "PRODUCT_ID" => $arFields['ID'],
         "CATALOG_GROUP_ID" => 4
      )
   );
   // обновление цены если цена существует, в противном случаи она добавится
   if ($arrNewPriceRub = $resNewPriceRub->Fetch())
   {
      CPrice::Update($arrNewPriceRub["ID"], $arFieldsNewPriceRub);
   }else{
      CPrice::Add($arFieldsNewPriceRub);
   }
   
   /********************************************/

   // Валюта
   $currUsd = 'USD';
   // Конвертация цены в выбранную валюту
   $newCurrUsd = CCurrencyRates::ConvertCurrency($ar_res['PRICE'], $ar_res['CURRENCY'], $currUsd);
   // Массив с новыми занчениями 
   $arFieldsNewPriceUsd = Array(
      "PRODUCT_ID" => $arFields['ID'],
      "CATALOG_GROUP_ID" => 3,
      "PRICE" => $newCurrUsd,
      "CURRENCY" => $currUsd
   );
   // Массив обновляемого товара (ID товара и тип обновляемой цены)
   $resNewPriceUsd = CPrice::GetList(
      array(),
      array(
         "PRODUCT_ID" => $arFields['ID'],
         "CATALOG_GROUP_ID" => 3
      )
   );
   // обновление цены если цена существует, в противном случаи она добавится
   if ($arrNewPriceUsd = $resNewPriceUsd->Fetch())
   {
      CPrice::Update($arrNewPriceUsd["ID"], $arFieldsNewPriceUsd);
   }else{
      CPrice::Add($arFieldsNewPriceUsd);
   }
   
   /********************************************/
   
   // Валюта
   $currEur = 'EUR';
   // Конвертация цены в выбранную валюту
   $newCurrEur = CCurrencyRates::ConvertCurrency($ar_res['PRICE'], $ar_res['CURRENCY'], $currEur);
   // Массив с новыми занчениями 
   $arFieldsNewPriceEur = Array(
      "PRODUCT_ID" => $arFields['ID'],
      "CATALOG_GROUP_ID" => 2,
      "PRICE" => $newCurrEur,
      "CURRENCY" => $currEur
   );
   // Массив обновляемого товара (ID товара и тип обновляемой цены)
   $resNewPriceEur = CPrice::GetList(
      array(),
      array(
         "PRODUCT_ID" => $arFields['ID'],
         "CATALOG_GROUP_ID" => 2
      )
   );
   // обновление цены если цена существует, в противном случаи она добавится
   if ($arrNewPriceEur = $resNewPriceEur->Fetch())
   {
      CPrice::Update($arrNewPriceEur["ID"], $arFieldsNewPriceEur);
   }else{
      CPrice::Add($arFieldsNewPriceEur);
   }
   
   /********************************************/
   
   $iTime++;
}