Как в программно удалить купон в уже оформленном заказе?

Для удаления купона в уже оформленном заказе в 1C-Bitrix необходимо выполнить следующие шаги:

1. Получить данные о заказе:

Перед удалением купона, нам необходимо получить информацию о заказе, в котором нужно удалить купон. Для этого используется функция CSaleOrder::GetByID, которая принимает в качестве аргумента идентификатор заказа и возвращает массив с данными о заказе. Например:

   $orderId = 123; // ID заказа
   $order = CSaleOrder::GetByID($orderId);

В массиве $order будут содержаться все данные о заказе, включая информацию о примененных купонах.

2. Удалить купон из заказа:

Для удаления купона из заказа необходимо обновить поле DISCOUNT_VALUE таблицы b_sale_order для соответствующего заказа. Значение данного поля должно быть установлено в null. Например:

   $orderId = 123; // ID заказа
   $orderFields = array(
       "DISCOUNT_VALUE" => null
   );
   
   CSaleOrder::Update($orderId, $orderFields);

После выполнения данного кода, примененный купон будет удален из заказа.

3. Опционально: обновить информацию о стоимости заказа:

Если вы хотите обновить информацию о стоимости заказа после удаления купона (например, для пересчета суммы к оплате), то необходимо вызвать метод CSaleOrder::Update с соответствующими значениями для полей PRICE, DISCOUNT_VALUE, PRICE_DELIVERY, SUM_PAID, SUM_UNPAID. Например:

   $orderId = 123; // ID заказа
   $orderFields = array(
       "PRICE" => 1000, // новая цена заказа
       "DISCOUNT_VALUE" => null, // удаление купона
       "PRICE_DELIVERY" => 100, // новая стоимость доставки
       "SUM_PAID" => 500, // сумма уже оплаченного
       "SUM_UNPAID" => 600 // сумма оставшегося к оплате
   );
   
   CSaleOrder::Update($orderId, $orderFields);

Эти шаги позволят вам удалить купон из уже оформленного заказа в 1C-Bitrix.