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

doFinalAction

\Bitrix\Sale\Result public
\Bitrix\Sale\OrderBase::doFinalAction(
	bool $hasMeaningfulField = false
);

Метод запускает отложенные действия для заказа. Если изменились значимые поля и заказ содержит корзину, метод пересчитывает скидки и налоги, обновляет стоимость заказа и налоговые суммы.

Перед пересчетом метод вызывает событие OnBeforeSaleOrderFinalAction. После успешной обработки метод вызывает событие OnAfterSaleOrderFinalAction. Нестатический метод.

Параметры

Параметр Описание
$hasMeaningfulField Признак изменения значимых полей заказа. Значение true запускает пересчет скидок и налогов после выполнения отложенных действий, если заказ содержит корзину. Значение false завершает обработку после отложенных действий. По умолчанию — false. Текущее значение признака возвращает метод hasMeaningfulField().

Возвращаемое значение

Метод возвращает объект Bitrix\Sale\Result. Объект содержит ошибки отложенных действий. При значении true параметра $hasMeaningfulField объект также содержит предупреждения отложенных действий и ошибки финального пересчета.

Исключения

Метод может выбросить исключения Bitrix\Main\ArgumentNullException и Bitrix\Main\ObjectNotFoundException во время пересчета заказа.

Пример

Пример запускает принудительный финальный пересчет существующего заказа. Результаты пересчета остаются в объекте заказа. Метод не сохраняет заказ.

<?php
use Bitrix\Main\Loader;
use Bitrix\Sale\Order;

if (!Loader::includeModule('sale'))
{
	throw new RuntimeException('Модуль sale не установлен');
}

// Идентификатор существующего заказа
$orderId = 123;
$order = Order::load($orderId);

if ($order === null)
{
	throw new RuntimeException('Заказ не найден');
}

try
{
	$result = $order->doFinalAction(true);

	if (!$result->isSuccess())
	{
		foreach ($result->getErrors() as $error)
		{
			echo $error->getMessage() . PHP_EOL;
		}
		return;
	}

	foreach ($result->getWarnings() as $warning)
	{
		echo $warning->getMessage() . PHP_EOL;
	}

	echo 'Стоимость заказа после пересчета: ' . $order->getPrice() . PHP_EOL;
}
catch (\Bitrix\Main\ArgumentNullException | \Bitrix\Main\ObjectNotFoundException $exception)
{
	echo $exception->getMessage() . PHP_EOL;
}


Была ли эта страница полезна?

Пользовательские комментарии

Помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2026, «1С-Битрикс», 2026
Наверх