Держи очень плохую кашу, которую не проверял. Дорабатывай.
AddEventHandler("sale", "OnSaleStatusOrder", Array("Zzpro", "habr"));
CModule::IncludeModule('sale');
class Zzpro
{
function habr($ID, $val)
{if ($val == "F") {
//F замени на статус заказа при котором должно происходить действие, в моем случае это доставлен
use Bitrix\Sale;
$order = Sale\Order::load($ID);
$basket = \Bitrix\Sale\Order::load($ID)->getBasket();
//загрузили заказ, смотрим его состав
foreach ($basket as $basketItem) {
$dbItem = \Bitrix\Iblock\ElementTable::getList(array(
'select' => array('ID', 'IBLOCK_ID', 'NAME'),
'filter' => array('ID' => $basketItem->getProductId()),
'limit' => 10,
'order' => array('TIMESTAMP_X' => 'ASC')
));
while ($arItem = $dbItem->fetch()) {
//echo $arItem[ID];
//echo $basketItem->getQuantity();
//получили ID товара и количество
$db_props = CIBlockElement::GetProperty(8, $arItem[ID], Array("CODE"=>"KUPLENO"));
//8 это твой инфоблок, KUPLENO это код твоего свойства, нам нужно получить кол-во ранее записанное
if($ar_props = $db_props->Fetch()) $KUPLENO = IntVal($ar_props["VALUE"]);
//Берем прежнее значение, и добавляем сколько куплено
//почему не +1? потому что могли же купить 10))
$property_value = $KUPLENO + $basketItem->getQuantity() ;
CIBlockElement::SetPropertyValuesEx($arItem[ID], false, array($property_id => $property_value));
//запишем в свойства товара новое значение
//$property_id это id свойства KUPLENO
}
}}};