Настройка бесплатной доставки по условиям на 1С-Битрикс
Бесплатная доставка при заказе от N рублей — классический приём для повышения среднего чека. Но как только бизнес требует более гибких условий: бесплатно только для акционных товаров, для новых клиентов, по промокоду, с разными порогами по городам — стандартные ограничения 1С-Битрикс перестают закрывать задачу. Мы — команда разработчиков с 10+ летним стажем в Битрикс — реализовали более 50 проектов с кастомной логистикой. На примерах покажем, как настроить бесплатную доставку по нестандартным правилам и что важно учесть, чтобы не сломать корзину.
Почему стандартных ограничений доставки в Битрикс не хватает?
Стандартный механизм Битрикс позволяет установить только одно ограничение: минимальная сумма заказа для всех клиентов. Если нужно дифференцировать по группам пользователей, типам товаров или промокодам — приходится писать кастомные обработчики. В реальных проектах мы сталкивались с 20+ вариантами условий, которые не покрываются коробкой.
Как настроить бесплатную доставку по стандартному ограничению суммы?
В административной части для каждого обработчика доставки: «Ограничения» → «По стоимости заказа» → установить «Минимальная сумма заказа» = 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;
}
}
Как настроить бесплатную доставку для новых клиентов?
Если нужно предоставить бесплатную доставку только тем, кто оформляет заказ впервые, используйте событие OnSaleOrderSaved и флаг в заказе. В обработчике ограничения проверяйте этот флаг. Алгоритм: при создании заказа проверяем историю заказов пользователя; если заказов не было — устанавливаем пользовательский флаг. В обработчике доставки проверяем флаг и при его наличии делаем цену нулевой.
Как настроить бесплатную доставку по промокоду?
В корзине Битрикс можно применить промокод, который влияет на стоимость доставки. Реализуется через кастомный обработчик скидок на доставку или через свойство корзины. Обработчик доставки должен проверять наличие купона с определённым типом и обнулять цену.
Отображение прогресса до бесплатной доставки
В корзине показываем: «До бесплатной доставки осталось 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 с разными настройками порога и ограничениями по зонам. Дополнительно настроили прогресс-бар, который показывает остаток до бесплатной доставки с учётом зоны клиента.
Что входит в настройку бесплатной доставки?
| Этап | Состав работ |
|---|---|
| 1. Анализ | Аудит текущей схемы доставки, выявление нестандартных условий |
| 2. Проектирование | Разработка архитектуры обработчиков, ограничений, интеграций |
| 3. Разработка | Написание кастомных классов, настройка свойств и ограничений |
| 4. Тестирование | Проверка всех сценариев: сумма, товары, зоны, промокоды |
| 5. Документирование | Передача документации и обучение менеджеров работе с доставкой |
Типичные ошибки при настройке
| Ошибка | Последствие | Как избежать |
|---|---|---|
| Хардкод порога в шаблоне | Нужно править код при изменении | Выносить в настройки обработчика |
| Не учтены несколько зон | Клиенты из одного региона видят неверные условия | Создавать отдельные обработчики с ограничениями по зонам |
| Отсутствие тестирования с купонами | Промокоды не сбрасывают доставку | Проверять интеграцию с корзиной и скидками |
Мы гарантируем стабильную работу схемы доставки на всех этапах. Свяжитесь с нами для консультации по вашему проекту. Закажите настройку доставки под ваши условия — мы предложим оптимальное решение с учётом специфики бизнеса. Получите индивидуальный расчёт сроков и стоимости, заполнив форму на сайте.
Сроки
| Состав | Срок |
|---|---|
| Стандартное ограничение по сумме | 0,5 дня |
| + Прогресс-бар «до бесплатной доставки» | +1 день |
| + Условия по товарам или зонам | +1–2 дня |







