События на сохранение заказа
События
Все сущности сохраняются в том состоянии, в котором они есть на текущий момент, т.е. сохранение происходит на уже рассчитанном заказе. Сохранение всегда происходит через метод заказа 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 | Происходит в самом начале процесса сохранения.
Параметры
|
||||||
OnSaleOrderSaved | Происходит в конце сохранения, когда заказ и все связанные сущности уже сохранены.
Параметры
|
Примеры
//пример использования события 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(); // . . . } }
![]()
Cтанислав Захаров
| ||
P.S. чтобы применить изменения для $order
| ||
![]()
Максим Масалов
| ||
Если вам нужно изменить значения определенных свойств в заказе, но при этом в этих значениях участвуют другие свойства, то сделать это можно таким образом.
| ||
© «Битрикс», 2001-2025, «1С-Битрикс», 2025
Пользовательские комментарии
Помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.