Документация для разработчиков
Темная тема

События на сохранение заказа

События

Все сущности сохраняются в том состоянии, в котором они есть на текущий момент, т.е. сохранение происходит на уже рассчитанном заказе. Сохранение всегда происходит через метод заказа save(). При этом сохраняется не только заказ, но и все связанные с ним сущности (оплаты и отгрузки) именно в том консистентном состоянии, которое было достигнуто путем расчетов объектов:

/** \Bitrix\Sale\Order $order */
$order = \Bitrix\Sale\Order::load(18);
$order->setField("USER_DESCRIPTION", "Доставить к подъезду");

$shipmentCollection = $order->getShipmentCollection();
/** \Bitrix\Sale\Shipment $shipment */
foreach ($shipmentCollection as $shipment)
{
    if (!$shipment->isSystem())
        $shipment->allowDelivery();
}

$order->save();

Вмешаться в процесс сохранения можно с помощью двух событий на сохранение заказа.

СобытиеОписание и параметры
OnSaleOrderBeforeSaved Происходит в самом начале процесса сохранения.

Параметры
ENTITY Объект заказа.
VALUES Старые значения полей заказа.
OnSaleOrderSaved Происходит в конце сохранения, когда заказ и все связанные сущности уже сохранены.

Параметры
ENTITY Объект заказа.
VALUES Старые значения полей заказа.
IS_NEW Принимает одно из двух значений: true - если заказ новый, false - если нет. Использование данного флага позволяет избавиться от зацикливаний при вызове сохранения заказа в событии.

Примеры

//пример использования события OnSaleOrderSaved

use Bitrix\Main; 
Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderSaved',
    'myFunction'
);

//в обработчике получаем сумму, с которой планируются некоторые действия в дальнейшем:

function myFunction(Main\Event $event)
{
    /** @var Order $order */
    $order = $event->getParameter("ENTITY");
    $oldValues = $event->getParameter("VALUES");
    $isNew = $event->getParameter("IS_NEW");

    if ($isNew)
    {
        $sum = $order->getPrice();
        // . . . 
    }
}



© «Битрикс», 2001-2021, «1С-Битрикс», 2021
Наверх