Удаление заказа в Битркис (CSaleOrder::Delete: метод Битрикс)

Чтобы заказ успешно удалился из системы, у него не должно быть активных оплат и отгрузок. Поэтому перед удалением нужно проверить эти условия.

Ниже приведена функция которая делает проверку на активные оплаты и отгрузки. Если таковы есть, он отменяет их и после этого удаляет заказ

function Delete($ID)
    {
        global $APPLICATION;
        $ID = (int)$ID;
        if ($ID <= 0)
            return false;

        $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'Y');

        $arOrder = CSaleOrder::GetByID($ID);
        if ($arOrder)
        {

            if ($isOrderConverted != 'N')
            {

                $errorMessage = "";

                /** @var \Bitrix\Sale\Result $r */
                $r = \Bitrix\Sale\Compatible\OrderCompatibility::delete($ID);

                $orderDeleted = (bool)$r->isSuccess();

                if (!$r->isSuccess())
                {
                    foreach($r->getErrorMessages() as $error)
                    {
                        $errorMessage .= " ".$error;
                    }

                    $APPLICATION->ThrowException(Loc::getMessage("SKGO_DELETE_ERROR", array("#MESSAGE#" => $errorMessage)), "DELETE_ERROR");
                }

                return $orderDeleted;

            }
            else
            {

                if ($arOrder["CANCELED"] != "Y")
                    CSaleBasket::OrderCanceled($ID, "Y"); //used only for old catalog without reservation and deduction

                if ($arOrder["ALLOW_DELIVERY"] == "Y")
                    CSaleOrder::DeliverOrder($ID, "N");

                if ($arOrder["DEDUCTED"] == "Y")
                {
                    CSaleOrder::DeductOrder($ID, "N");
                }

                if ($arOrder["RESERVED"] == "Y")
                {
                    CSaleOrder::ReserveOrder($ID, "N");
                }


                if ($arOrder["PAYED"] != "Y")
                {
                    $arOrder["SUM_PAID"] = DoubleVal($arOrder["SUM_PAID"]);
                    if ($arOrder["SUM_PAID"] > 0)
                    {
                        if (!CSaleUserAccount::UpdateAccount($arOrder["USER_ID"], $arOrder["SUM_PAID"], $arOrder["CURRENCY"], "ORDER_CANCEL_PART", $ID))
                            return False;
                    }

                    printr(1111);
                    die();
                    return CSaleOrder::_Delete($ID);
                }
                else
                {
                    printr(2222);
                    die();
                    if (CSaleOrder::PayOrder($ID, "N", True, True))
                        return CSaleOrder::_Delete($ID);
                }
            }
        }

        return false;
}


Загрузка комментариев...