Настройка бесплатной доставки по условиям 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка бесплатной доставки по условиям 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка бесплатной доставки по условиям на 1С-Битрикс

Бесплатная доставка при заказе от N рублей — один из главных инструментов увеличения среднего чека. В Битрикс это настраивается через встроенные ограничения обработчиков, но как только условия становятся нестандартными (бесплатно только для определённых товаров, для новых покупателей, по промокоду), начинается кастомная разработка.

Стандартный способ: ограничение по сумме заказа

В административной части для каждого обработчика доставки: «Ограничения» → «По стоимости заказа» → установить «Минимальная сумма заказа» = 0, «Максимальная» = пусто. Это подключит метод для любой суммы.

Для бесплатной доставки создаётся отдельный экземпляр обработчика (например, «СДЭК бесплатно») с нулевой ценой и ограничением «сумма заказа от 5000 руб.»:

// Обработчик с фиксированной нулевой ценой
class FreeDeliveryWrapper extends \Bitrix\Sale\Delivery\Services\Base
{
    protected function calculateConcrete(
        \Bitrix\Sale\Shipment $shipment
    ): \Bitrix\Sale\Delivery\CalculationResult {
        $result = new \Bitrix\Sale\Delivery\CalculationResult();
        $result->setDeliveryPrice(0);
        $result->setPeriodDescription('2–5 дней');
        return $result;
    }
}

Ограничение по сумме настраивается через стандартный UI. Порог суммы для бесплатной доставки лучше вынести в настройки обработчика — чтобы менять без правки кода.

Бесплатная доставка только для определённых товаров

Задача: доставка бесплатна, если в корзине есть товар из раздела «Акционные» или товар с определённым свойством.

class ConditionalFreeDelivery extends \Bitrix\Sale\Delivery\Services\Base
{
    public static function isCompatible(\Bitrix\Sale\Shipment $shipment): bool
    {
        $basket = $shipment->getOrder()->getBasket();

        foreach ($basket as $item) {
            $productId = $item->getProductId();
            // Проверяем свойство товара FREE_DELIVERY = Y
            $props = \CIBlockElement::GetProperty(
                $item->getField('MODULE'),
                $productId,
                [],
                ['CODE' => 'FREE_DELIVERY']
            )->Fetch();

            if ($props && $props['VALUE'] === 'Y') {
                return true;
            }
        }

        return false;
    }

    protected function calculateConcrete(
        \Bitrix\Sale\Shipment $shipment
    ): \Bitrix\Sale\Delivery\CalculationResult {
        $result = new \Bitrix\Sale\Delivery\CalculationResult();
        $result->setDeliveryPrice(0);
        return $result;
    }
}

Отображение прогресса до бесплатной доставки

В корзине показываем: «До бесплатной доставки осталось 1 230 руб.». Это не фича Битрикс из коробки — реализуется на уровне шаблона компонента корзины.

// В шаблоне компонента
$threshold    = 5000; // порог бесплатной доставки
$basketTotal  = $APPLICATION->IncludeComponent('bitrix:sale.basket.basket', '', ['GET_BASKET_TOTAL' => 'Y'], false, ['HIDE_ICONS' => 'Y']);
$currentTotal = $GLOBALS['BASKET_TOTAL'] ?? 0;

$remaining = max($threshold - $currentTotal, 0);
if ($remaining > 0) {
    echo 'До бесплатной доставки: ' . \CCurrencyLang::CurrencyFormat($remaining, 'RUB');
} else {
    echo 'Доставка бесплатна!';
}

Значение $threshold лучше получать из настроек обработчика доставки, а не хардкодить в шаблоне — при изменении порога нужно обновить только одно место.

Кейс

Магазин спортивного питания: бесплатная доставка от 3000 руб. для Москвы и от 5000 руб. для регионов. Стандартными средствами Битрикс это не решается одним обработчиком — разные пороги для разных зон. Решение: два экземпляра FreeDeliveryWrapper с разными настройками порога и ограничениями по зонам.

Сроки

Состав Срок
Стандартное ограничение по сумме 0,5 дня
+ Прогресс-бар «до бесплатной доставки» +1 день
+ Условия по товарам или зонам +1–2 дня