В 1С-Битрикс есть несколько способов отменить возврат по событию. Возможно, вам понадобится отменить возврат при определенных условиях или же выполнить дополнительные действия перед отменой возврата.
Первый способ - использование событийной модели 1С-Битрикс. В этом случае вы можете зарегистрировать свой обработчик на событие "OnBeforeOrderCancel". В этом обработчике можно проверить необходимые условия и, в случае необходимости, отменить возврат:
AddEventHandler("sale", "OnBeforeOrderCancel", "CancelOrderReturn"); function CancelOrderReturn($orderId, &$cancel) { // здесь можно проверить условия, при которых нужно отменить возврат // например, если заказ еще не оплачен, отмена возврата не будет произведена $order = BitrixSaleOrder::load($orderId); if (!$order->isPaid()) { $cancel = false; } }
Второй способ - использование обработчика события в модуле обработки событий. В этом случае необходимо создать модуль, зарегистрировать обработчик события и выполнить необходимые действия для отмены возврата:
1. Создайте файл bitrix/modules/your_module_name/lib/EventManager.php
:
<?php namespace YourModuleName; use BitrixMainEventManager as BaseEventManager; class EventManager extends BaseEventManager { public static function onBeforeOrderCancel(&$cancel) { // здесь можно выполнить необходимые действия перед отменой возврата // например, выполнить проверки или обновить какие-то данные // если требуется отменить возврат, установите $cancel в false // если необходимо разрешить возврат, оставьте $cancel равным true } }
2. Зарегистрируйте обработчик события в файле bitrix/modules/your_module_name/lib/eventhandlers.php
:
<?php use BitrixMainEventManager; EventManager::getInstance()->addEventHandler( "sale", "OnBeforeOrderCancel", array("YourModuleNameEventManager", "onBeforeOrderCancel") );
Третий способ - использование расширения класса CSaleOrder
. Создайте файл bitrix/php_interface/init.php
и добавьте следующий код:
<?php require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/general/order_list.php"; class MySaleOrder extends CSaleOrder { function CancelOrder($ID, $bCallback = false, $reason = "") { // здесь можно выполнить необходимые действия перед отменой возврата // например, выполнить проверки или обновить какие-то данные // если требуется отменить возврат, просто верните функцию без выполнения // parent::CancelOrder($ID, $bCallback, $reason); } } // заменяем старый класс на новый BitrixMainEventManager::getInstance()->addEventHandler( "sale", "OnGetBusinessValue", function ($arOrder, $arAdditionalValues) { return new MySaleOrder(); } );
В данном случае мы создаем новый класс MySaleOrder
, который наследуется от класса CSaleOrder
. Затем переопределяем метод CancelOrder
, в котором мы можем выполнить необходимые действия перед отменой возврата. Если требуется отменить возврат, просто возвращаем функцию без ее выполнения. Затем мы заменяем старый класс на новый с помощью события "OnGetBusinessValue".
Независимо от выбранного способа, следует помнить о правилах работы с обработчиками событий и соблюдать соответствующие правила разработки в 1С-Битрикс.