С OnBasketAdd не получилось. В массиве входящих параметров не обнаружил значение скидки, видимо оно где-то позже формируется.
Приспособил вот такое событие - OnSaleComponentOrderOneStepComplete.
Привожу код, думаю может кому-нибудь пригодиться, наверняка не мне одному нужно получить округленные значения цен и скидок.
Этим обработчиком я модифицирую цены и скидки в заказах сделанных через публичную часть:[CODE]AddEventHandler("sale", "OnSaleComponentOrderOneStepComplete", "DiscountPublic");
function DiscountPublic($ID, $arOrder)
{
$dbItemsInOrder = CSaleBasket::GetList( array( "ID" => "ASC" ), array( "ORDER_ID" => intval($ID) ) );
while( $arItems = $dbItemsInOrder->Fetch() )
{
$basket_element_id = $arItems['ID'];
$price = ceil($arItems['PRICE']);
$discount_price = floor($arItems['DISCOUNT_PRICE']);
$quantity = $arItems['QUANTITY'];
$order_price = $order_price + ($price * $quantity);
$arFields = array("PRICE" => $price, "DISCOUNT_PRICE" => $discount_price);
CSaleBasket::Update($basket_element_id, $arFields);
}
$arF = array("PRICE" => $order_price);
CSaleOrder::Update($ID, $arF);
}[/CODE]А вот этим в заказах сделанных через админку:
[CODE]AddEventHandler("sale", "OnBeforeBasketAdd", "DiscountAdmin");
function DiscountAdmin($arFields)
{
if($arFields['ORDER_ID'])
{
global $order_price;
$arFields['PRICE'] = ceil($arFields['PRICE']);
$arFields['DISCOUNT_PRICE'] = floor($arFields['DISCOUNT_PRICE']);
$order_price = $order_price + ($arFields['PRICE'] * $arFields['QUANTITY']);
$order_id = $arFields['ORDER_ID'];
$arF = array("PRICE" => $order_price);
CSaleOrder::Update($order_id, $arF);
}
} [/CODE]Насколько я успел протестировать эти обработчики работают так как мне и нужно.
Евгений, еще раз спасибо вам.
Хоть и не смог применить предложенные вами события, но из ваших ответов я узнал очень важную штуку, что номера заказа при добавлении товара в корзину в публичке не существует еще. !!!