Как посчитать стоимость товара или предложения со всеми скидками

Как посчитать стоимость товара или предложения со всеми скидками

Просмотров: 413
Вариант получения стоимости товара или предложения со всеми скидками в функции файла init.php
/***Как посчитать стоимость товара или предложения со всеми скидками***/
function getFinalPriceInCurrency($item_id, $sale_currency = 'RUB') { CModule::IncludeModule("iblock");  CModule::IncludeModule("catalog"); CModule::IncludeModule("sale");      global $USER;     $currency_code = 'RUB';     // Проверяем, имеет ли товар торговые предложения?     if(CCatalogSku::IsExistOffers($item_id)) {         // Пытаемся найти цену среди торговых предложений         $res = CIBlockElement::GetByID($item_id);         if($ar_res = $res->GetNext()) {             if(isset($ar_res['IBLOCK_ID']) && $ar_res['IBLOCK_ID']) {                 // Ищем все тогровые предложения                 $offers = CIBlockPriceTools::GetOffersArray(array(                     'IBLOCK_ID' => $ar_res['IBLOCK_ID'],                     'HIDE_NOT_AVAILABLE' => 'Y',                     'CHECK_PERMISSIONS' => 'Y'                 ), array($item_id), null, null, null, null, null, null, array('CURRENCY_ID' => $sale_currency), $USER->getId(), null);                 foreach($offers as $offer) {                     $price = CCatalogProduct::GetOptimalPrice($offer['ID'], 1, $USER->GetUserGroupArray(), 'N');                     if(isset($price['PRICE'])) {                         $final_price = $price['PRICE']['PRICE'];                         $currency_code = $price['PRICE']['CURRENCY'];                         // Ищем скидки и высчитываем стоимость с учетом найденных                         $arDiscounts = CCatalogDiscount::GetDiscountByProduct($item_id, $USER->GetUserGroupArray(), 1, SITE_ID);                         if(is_array($arDiscounts) && sizeof($arDiscounts) > 0) {                             $final_price = CCatalogProduct::CountPriceWithDiscount($final_price, $currency_code, $arDiscounts);                         }                         // Конец цикла, используем найденные значения                         break;                     }                 }             }         }     } else {         // Простой товар, без торговых предложений (для количества равному 1)         $price = CCatalogProduct::GetOptimalPrice($item_id, 1, $USER->GetUserGroupArray(), 'N');         // Получили цену?         if(!$price || !isset($price['PRICE'])) {             return false;         }         // Меняем код валюты, если нашли         if(isset($price['CURRENCY'])) {             $currency_code = $price['CURRENCY'];         }         if(isset($price['PRICE']['CURRENCY'])) {             $currency_code = $price['PRICE']['CURRENCY'];         }         // Получаем итоговую цену         $final_price = $price['PRICE']['PRICE'];         // Ищем скидки и пересчитываем цену товара с их учетом         $arDiscounts = CCatalogDiscount::GetDiscountByProduct($item_id, $USER->GetUserGroupArray(), "N", 1, SITE_ID);         if(is_array($arDiscounts) && sizeof($arDiscounts) > 0) {             $final_price = CCatalogProduct::CountPriceWithDiscount($final_price, $currency_code, $arDiscounts);         }     }     // Если необходимо, конвертируем в нужную валюту     if($currency_code != $sale_currency) {         $final_price = CCurrencyRates::ConvertCurrency($final_price, $currency_code, $sale_currency);     }     return $final_price; }

Ещё статьи:

02.04.2026 Разговоры о фрилансе
Предыстория - автор вопроса хочет войти в IT сферу, я человеку начал подсказывать в комментариях на форуме. На примере вопросов и ответов в разговоре можно увидеть типовые ошибки и непонимание начинающего, и в будущем избежать повторения ошибок.

21.03.2026 PHP файловый менеджер
Попался мне такой PHP файловый менеджер, вполне функциональный, выкладываю в копилку скриптов

21.03.2026 Ошибка CUser::IsAuthorized() cannot be called statically
Такая ошибка старых весрий битрикс давно известна. Нужно заменить CUser::IsAuthorized() на $USER->IsAuthorized(), но в моём случае я сначала не смог найти место, где же находится проблема.

© 2015-2026 Web админ
Связаться по WhatsApp