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

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