Как создать одноразовую скидку и привязать её к заказу?

Для создания одноразовой скидки и ее привязки к заказу в CMS 1C-Bitrix, вам потребуется выполнить несколько шагов:

Шаг 1: Создание типа цены или скидки
В административной панели перейдите в раздел "e-Store" -> "Скидки и акции" и выберите "Типы цен". Нажмите кнопку "Добавить тип цены" и заполните необходимые поля, например, назовите его "Одноразовая скидка". Затем сохраните изменения.

Шаг 2: Создание скидки
В разделе "Скидки и акции" выберите "Скидки" и нажмите кнопку "Добавить скидку". Заполните необходимые поля, указав название скидки, сроки ее действия, размер скидки и выберите созданный ранее тип цены "Одноразовая скидка". Затем сохраните изменения.

Шаг 3: Привязка скидки к заказу
В файле обработки заказа, например, "/bitrix/components/bitrix/sale.order.ajax/ajax.php", найдите обработчик для создания заказа (обычно функция AddOrder).

После создания заказа, перед сохранением заказа в базу данных, вам необходимо просмотреть и проверить товары в заказе и определить, должна ли быть применена одноразовая скидка. Для этого вам понадобится использовать API 1C-Bitrix для работы со скидками.

Пример кода для применения одноразовой скидки к заказу:

// Получение информации о заказе
$order = BitrixSaleOrder::create(SITE_ID, $USER->GetID());
$order->setBasket($basket);
$order->doFinalAction(true);

// Применение одноразовой скидки
if ($order->isPaid()) {
    // Заказ оплачен, не применять скидку
} else {
    // Заказ не оплачен, применить скидку
    $discount = BitrixSaleDiscount::loadByOrder($order);
    $discount->setDiscountType(BitrixSaleDiscountBase::VALUE_TYPE_PERCENT);
    $discount->setDiscountValue(10); // 10% скидка
    $discount->calculate();

    // Получение информации о корзине
    $basket = $order->getBasket();

    // Применение скидки к товарам в корзине
    $basket->refreshData(array('PRICE', 'COUPONS'));

    // Обновление информации о заказе
    $order->setBasket($basket);
    $order->doFinalAction(true);
}

// Сохранение заказа в базу данных
$result = $order->save();

if ($result->isSuccess()) {
    // Заказ успешно создан
} else {
    // Обработка ошибок
    $errors = $result->getErrorMessages();
}

Вышеуказанный код применяет одноразовую скидку к заказу, если он не оплачен. Однако, вы можете настраивать условия применения скидки и работы с заказом в соответствии с вашими требованиями.

Не забудьте также проверить и обновить файлы шаблонов (например, /bitrix/templates/.default/sale.basket.basket.top.php) для отображения примененной скидки на странице корзины заказа.

Надеюсь, этот ответ будет полезен и поможет вам создать одноразовую скидку и привязать ее к заказу в CMS 1C-Bitrix.