Надо написать обработчик события модуля sale OnSaleOrderBeforeSaved.
Вот пример обработчика
<?
namespace Gricuk\Sale;
class OrderEvents
{
/**
* 1) Смена статуса для отмененного заказа
* 2) Комиссия за наложенный платёж
* @param \Bitrix\Main\Event $event
* @link https://dev.1c-bitrix.ru/api_d7/bitrix/sale/events/order_saved.php
*/
public static function OnSaleOrderBeforeSavedHandler(\Bitrix\Main\Event $event)
{
/** @var \Bitrix\Sale\Order $order */
$order = $event->getParameter("ENTITY");
global $USER;
if (!$order->isNew()) {
$orderStatus = $order->getField("STATUS_ID");
if ($order->isCanceled() && ($orderStatus != "CN")) {
$order->setField("STATUS_ID", "CN");
$event->addResult(new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
array(
"RESULT" => $order,
)
));
}
return;
}
}
}
Вот так надо подключить событие
<?
$bxEventManager = \Bitrix\Main\EventManager::getInstance();
$bxEventManager->addEventHandler(
"sale",
"OnSaleOrderBeforeSaved",
array(
\Gricuk\Sale\OrderEvents::class,
"OnSaleOrderBeforeSavedHandler"
)
);