А вот функция, которая возвращает только рассчитанную цену[CODE]function getSalePrice($productId,$productPriceId=null,$price=null,$quantity = 1,$currency="RUB"){
if($productId < 1)
return false;
\Bitrix\Main\Loader::includeModule('sale');
if(!isset($productPriceId) || !isset($price)){
\Bitrix\Main\Loader::includeModule('catalog');
$arBasePrice = CCatalogGroup::GetBaseGroup();
$db_res = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $productId,
"CATALOG_GROUP_ID" => $arBasePrice['ID']
),false,false,Array(
'ID','PRICE'
)
);
if ($ar_res = $db_res->Fetch())
{
$productPriceId = $ar_res["ID"];
$price = $ar_res["PRICE"];
}
else
{
return false;
}
}
$arOrder = array(
'SITE_ID' => 's1',
'USER_ID' => $GLOBALS["USER"]->GetID(),
'ORDER_PRICE' => "0", // сумма всей корзины
'ORDER_WEIGHT' => "0", // вес всей корзины
'BASKET_ITEMS' => [
[
'PRODUCT_ID' => $productId,
'PRODUCT_PRICE_ID' => $productPriceId,
'PRICE' => $price,
'CURRENCY' => $currency,
'BASE_PRICE' => $price,
'QUANTITY' => $quantity,
'LID' => 's1',
'MODULE' => 'catalog',
]
]
);
$arOptions = array(
'COUNT_DISCOUNT_4_ALL_QUANTITY' => "Y",
);
$arErrors = array();
CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors);
$resultPrice = $arOrder['BASKET_ITEMS'][0]['PRICE'];
return $resultPrice;
}[/CODE]
if($productId < 1)
return false;
\Bitrix\Main\Loader::includeModule('sale');
if(!isset($productPriceId) || !isset($price)){
\Bitrix\Main\Loader::includeModule('catalog');
$arBasePrice = CCatalogGroup::GetBaseGroup();
$db_res = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $productId,
"CATALOG_GROUP_ID" => $arBasePrice['ID']
),false,false,Array(
'ID','PRICE'
)
);
if ($ar_res = $db_res->Fetch())
{
$productPriceId = $ar_res["ID"];
$price = $ar_res["PRICE"];
}
else
{
return false;
}
}
$arOrder = array(
'SITE_ID' => 's1',
'USER_ID' => $GLOBALS["USER"]->GetID(),
'ORDER_PRICE' => "0", // сумма всей корзины
'ORDER_WEIGHT' => "0", // вес всей корзины
'BASKET_ITEMS' => [
[
'PRODUCT_ID' => $productId,
'PRODUCT_PRICE_ID' => $productPriceId,
'PRICE' => $price,
'CURRENCY' => $currency,
'BASE_PRICE' => $price,
'QUANTITY' => $quantity,
'LID' => 's1',
'MODULE' => 'catalog',
]
]
);
$arOptions = array(
'COUNT_DISCOUNT_4_ALL_QUANTITY' => "Y",
);
$arErrors = array();
CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors);
$resultPrice = $arOrder['BASKET_ITEMS'][0]['PRICE'];
return $resultPrice;
}[/CODE]