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

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

События

Все сущности сохраняются в том состоянии, в котором они есть на текущий момент, т.е. сохранение происходит на уже рассчитанном заказе. Сохранение всегда происходит через метод заказа 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-2024, «1С-Битрикс», 2024