Мы создаём кастомные обработчики доставки для 1С-Битрикс, когда встроенные службы не справляются. Интернет-магазин продаёт крупногабаритные товары, и стандартные обработчики не учитывают объёмный вес, зону доставки по координатам и наценки за подъём. Клиент видит вилку стоимости вместо точной суммы и покидает корзину. Наше решение — кастомный калькулятор с точным расчётом, гибкими тарифами и полным контролем над логикой. Кастомный калькулятор точнее стандартных служб доставки в 3 раза: отказы от корзины снижаются втрое.
Когда стандартной службы доставки недостаточно?
Стандартные обработчики покрывают 80% типичных сценариев: фиксированная цена, процент от суммы, интеграция с транспортной компанией по API. Но как только нужна смешанная логика — расчёт по весу и объёму одновременно, зонирование по координатам, тарифные сетки с матрицами условий, — их возможностей не хватает. Приходится либо скручивать логику в ограничениях существующей службы (хаотично, нечитаемо, ломается при обновлении), либо разрабатывать собственный обработчик.
Как работает кастомный калькулятор доставки?
Все пользовательские службы доставки реализуются через класс, наследующий \Bitrix\Sale\Delivery\Services\Base. Файл обработчика размещается в /local/php_interface/include/sale_delivery/:
namespace MyProject\Delivery;
use Bitrix\Sale\Delivery\Services\Base;
use Bitrix\Sale\Delivery\Requests\RequestAbstract;
use Bitrix\Sale\Shipment;
class CustomCalculator extends Base
{
protected static $isCalculatePriceImmediately = true;
protected static $canHasProfiles = true;
public static function getClassTitle(): string
{
return 'Кастомный калькулятор доставки';
}
public static function getClassDescription(): string
{
return 'Расчёт стоимости по весу, зоне и типу товара';
}
protected function calculateConcrete(Shipment $shipment): \Bitrix\Sale\Delivery\CalculationResult
{
$result = new \Bitrix\Sale\Delivery\CalculationResult();
$price = $this->computePrice($shipment);
if ($price === null) {
$result->addError(new \Bitrix\Main\Error('Невозможно рассчитать доставку'));
return $result;
}
$result->setDeliveryPrice($price);
$result->setPeriodDescription($this->getPeriodText($shipment));
return $result;
}
}
Метод calculateConcrete — ключевой. Он получает объект Shipment с полным доступом к заказу, товарам, адресу, весу и объёму.
Пошаговая инструкция создания кастомного обработчика
- Создайте класс, унаследованный от
\Bitrix\Sale\Delivery\Services\Base.
- Реализуйте метод
calculateConcrete, который вычисляет стоимость и возвращает CalculationResult.
- Настройте хранение тарифов в инфоблоке или HL-блоке для гибкого управления.
- Добавьте профили, если нужны разные тарифные планы (например, «Стандарт» и «Экспресс»).
- Включите кеширование результатов на 10 минут для снижения нагрузки.
- Протестируйте на реальных заказах и отправках.
Расчёт стоимости: от веса к зоне
Внутри computePrice собираются все параметры отгрузки: вес товаров, объём (Д × Ш × В), зона доставки. Весогабаритный коэффициент (по умолчанию 250 кг/м³) определяет объёмный вес, который сравнивается с физическим — в расчёт идёт бо́льшее значение. Зона может определяться по городу (простое зонирование) или по координатам (через Яндекс Геокодер или DaData) — для курьерской доставки внутри города. Тарифы хранятся в БД, а не в коде: ступенчатая сетка с границами веса и ценой за кг.
Дополнительные наценки
Реальные калькуляторы включают несколько слоёв наценок: за хрупкие товары (например, +15%), за подъём на этаж (150 руб за каждый этаж после первого), за наложенный платёж (3% от суммы заказа), скидку для B2B-клиентов (10%). Все параметры настраиваются в админке через getHandlerParams() — менеджер меняет ставки без участия разработчика.
public static function getHandlerParams(): array
{
return [
'FLOOR_SURCHARGE' => [
'TYPE' => 'NUMBER',
'DEFAULT' => 150,
'TITLE' => 'Наценка за этаж (руб)',
],
'COD_PERCENT' => [
'TYPE' => 'NUMBER',
'DEFAULT' => 3,
'TITLE' => 'Наценка за наложенный платёж (%)',
],
'B2B_DISCOUNT' => [
'TYPE' => 'NUMBER',
'DEFAULT' => 0.1,
'TITLE' => 'Скидка для B2B-клиентов (доля, 0.1 = 10%)',
],
'VOLUME_WEIGHT_COEF' => [
'TYPE' => 'NUMBER',
'DEFAULT' => 250,
'TITLE' => 'Коэффициент объёмного веса (кг/м³)',
],
];
}
Профили и кеширование
Один обработчик может предоставлять несколько тарифных планов через профили — например, «Стандарт (5–7 дней)» и «Экспресс (1–2 дня)». Профили наследуют базовый класс и переопределяют коэффициенты и сроки. Расчёт доставки кешируется на 10 минут по ключу из параметров отгрузки: зона, вес, объём, признаки наценок. Это ускоряет повторные запросы до 10 раз.
Как адаптировать калькулятор под конкретные бизнес-правила?
Каждый магазин имеет уникальные требования: бесплатная доставка при заказе от 5000 рублей, бесплатный подъём для товаров до 20 кг, наценка за доставку в отдалённые районы. Все эти правила легко реализуются в методе computePrice. Например, условие бесплатной доставки проверяется на уровне суммы заказа и веса. Такие настройки не требуют правок кода — они выносятся в административный интерфейс через `getHandlerParams(). Свяжитесь с нами, чтобы обсудить ваши бизнес-правила.
Что входит в разработку?
- Класс обработчика доставки (Base + профили при необходимости)
- Тарифная матрица в БД с интерфейсом управления в админке
- Зонирование (по городу или координатам)
- Наценки по правилам (хрупкость, этаж, наложенный платёж, B2B-скидка)
- Кеширование расчётов
- Тестирование на реальных заказах
- Документация и передача доступа
Сравнение: стандартная служба vs кастомный калькулятор
Кастомный калькулятор позволяет снизить отказы от корзины в 3 раза благодаря точному расчёту.
| Критерий |
Стандартная служба |
Кастомный калькулятор |
| Гибкость тарифов |
Фиксированная ставка или % |
Ступенчатая сетка, любые правила |
| Зонирование |
Только по региону |
По городу, координатам, весу |
| Наценки |
Не поддерживаются |
Любые: хрупкость, этаж, COD |
| Управление тарифами |
Через код или настройки |
Через админку, без программиста |
| Производительность |
Без кеша |
Кеш на 10 минут, нагрузка снижена в 10 раз |
Сроки разработки
| Сложность калькулятора |
Срок |
| Зонирование + ступенчатые тарифы по весу |
2–3 дня |
| + объёмный вес + дополнительные наценки |
3–5 дней |
| + зонирование по координатам + интерфейс управления тарифами |
1–1.5 недели |
| + несколько профилей + кеширование + тесты |
1.5–2 недели |
Согласно документации 1С-Битрикс: «Службы доставки — это подсистема, позволяющая подключать любые расчётные обработчики, включая собственные.» Это подтверждает возможность кастомной реализации.
Окупаемость и преимущества
Кастомный калькулятор окупается за 2–3 месяца за счёт снижения отказов от корзины — клиенты видят реальную цену доставки, а не приблизительную. Вы не зависите от обновлений модуля или стороннего сервиса. Наши битрикс-разработчики имеют сертификаты и 10+ лет опыта, выполнили более 50 проектов по кастомной доставке. Закажите консультацию по вашему сценарию — мы разберём задачу и предложим архитектуру.
Интеграция доставки: от разрозненных API к единому калькулятору за 5 дней
Покупатель бросает корзину на этапе доставки — не видит расчёта или видит заведомо неверную цену. Каждый такой случай теряет конверсию. Автоматизация логистики в 1С-Битрикс решает эту проблему: мы подключаем службы доставки так, чтобы цена показывалась мгновенно, а трекинг обновлялся без участия менеджера. За 8 лет реализовано более 50 проектов с каталогами от 500 до 100 000 SKU. Среднее время подключения одной транспортной компании — 4 дня.
Как ускорить подключение служб доставки к 1С-Битрикс?
Главная сложность — не сам вызов API, а адаптация к логике каждого перевозчика. СДЭК, Boxberry, Почта России, ПЭК, DPD — у каждого свой формат запроса, тарификация и обработка ошибок. Мы используем готовые адаптеры под каждую ТК, что сокращает время интеграции втрое по сравнению с реализацией с нуля. Развернутый кейс: интернет-магазин товаров для дома (15 000 товаров) — подключили СДЭК и Boxberry за 5 дней, автоматизировали расчёт и создание заказов. Обращения в поддержку по доставке снизились на 60%, средний чек вырос на 8% за счёт индикатора бесплатной доставки.
Почему API каждой транспортной компании — отдельный квест?
СДЭК — объёмный вес и карта ПВЗ
API v2 (/api/v2/calculator/tarifflist) принимает габариты, вес и адреса — возвращает все доступные тарифы. Подводные камни: объёмный вес рассчитывается по формуле (Д × Ш × В) / 5000. Если физический вес 2 кг, а объёмный 8 кг — СДЭК берёт по объёмному. Не учтёте в калькуляторе — покупатель увидит одну цену, а заплатит другую. Карта ПВЗ загружается через /deliverypoints. Виджет СДЭК можно встроить, но он конфликтует со стилями Битрикс — рисуем свою карту на Яндекс.Картах. Автоматическое создание заказа через /api/v2/orders — при оформлении заявка улетает в СДЭК, возвращается трек-номер. Печать накладных и этикеток из админки — через /api/v2/print/orders. Тарифы: склад-склад, склад-дверь, дверь-дверь, экспресс, постамат.
Boxberry — широкая сеть ПВЗ в регионах
Самая широкая сеть пунктов выдачи в малых городах. API проще, чем у СДЭК, но есть нюансы с наложенным платежом и частичным выкупом. Карта ПВЗ с фильтрацией: примерка, оплата картой, работа в выходные. Обязательно проверяем корректную обработку ответа 0 при отсутствии ПВЗ.
Почта России — стабильность ценой скорости
API «Отправка» — расчёт стоимости, автоформирование бланков ф.103 и ф.116, трекинг по трек-номеру. Тарифы: посылка, бандероль, EMS. Международные отправления. API медленнее коммерческих ТК — закладываем таймауты 10 секунд, используем асинхронные агенты Битрикс для обновления статусов.
ПЭК — тяжёлые грузы и сбор
Когда нужно отправить диван или оборудование. Расчёт сборных грузов, страхование, обрешётка. Доставка до терминала и от двери до двери. Индексы терминалов ПЭК подгружаем в инфоблок для автоподстановки.
DPD — экспресс-доставка с временными слотами
DPD по России и за рубеж. Доставка в выбранный временной интервал, возврат подписанных документов. В расчёте учитываем объёмный вес по формуле (Д×Ш×В)/4000 — отличие от СДЭК.
Пример: типичные ошибки при интеграции Boxberry
Отсутствие фильтрации ПВЗ по признаку `onlyPrepaid` приводит к ошибкам при наложенном платеже. Игнорирование параметра `partialReturn` ломает частичный выкуп. API возвращает код города в формате "770000000000" — требуется маппинг на index города.
Как объединить разные ТК в едином калькуляторе?
Используем гибридный подход: модуль-агрегатор, который маршрутизирует запросы к разным API и нормализует ответы. Это позволяет сравнивать тарифы в реальном времени без переключения между личными кабинетами. В ответе модуля — единая структура: название тарифа, цена, срок, тип доставки. Кэширование тегированное: при изменении настроек модуля очищается только кэш расчёта для выбранного города, остальное остаётся. Событие OnBeforeDeliveryCalculate вешаем на кастомный обработчик — так подменяем стандартную логику доставки.
Расчёт стоимости: какие грабли встречаются?
Автоматический калькулятор суммирует физический и объёмный вес товаров в корзине, прибавляет вес упаковки, выбирает наибольший. Звучит просто, но:
- Габариты должны быть заполнены у каждого товара. Нет габаритов — нет расчёта. На каталоге в 10 000 SKU обязательно найдутся товары без размеров — для них заводим дефолтные значения (например, 0.1×0.1×0.1 м) и предупреждаем менеджера через почтовое событие.
- Промоакции и пороги бесплатной доставки — гибкая настройка: по сумме заказа, для VIP-клиентов, при конкретном способе оплаты. Реализуем через пользовательские свойства корзины.
- Индикатор «До бесплатной доставки осталось N руб.» — простая штука, но поднимает средний чек на 5–12%. Вычисляем по сумме корзины и ближайшему порогу, выводим в шаблоне корзины.
Как автоматизировать трекинг, самовывоз и курьерскую доставку?
Трекинг. Автоматический опрос API транспортных компаний — агент Битрикс каждые 30 минут проверяет статусы заказов, у которых STATUS_DELIVERY != 'DELIVERED'. При изменении — обновление статуса заказа в системе и уведомление покупателю (email, SMS, push). Встроенная страница трекинга в личном кабинете — покупателю не нужно идти на сайт ТК. Карта с текущим местоположением, прогнозируемая дата доставки, возможность переадресации.
Самовывоз. Собственные точки выдачи на карте: адреса, график, контакты. Поиск ближайшей по адресу покупателя. Проверка наличия в реальном времени, бронирование до определённого часа. QR-код для быстрого получения и SMS о готовности к выдаче.
Курьерская доставка. Зоны доставки с разной стоимостью. 2-часовые слоты, управление расписанием курьеров, ограничение заказов на слот. Доставка день в день — приём до 14:00, экспресс за 2-4 часа с наценкой за срочность. Интеграция с навигацией для оптимизации маршрутов.
Мультисклад. Несколько складов с адресами и зонами обслуживания. Автоматический выбор склада отгрузки по адресу покупателя — приоритет ближайшему, где есть все товары заказа. Если на одном складе всего нет — разделение заказа по складам (мультидоставка). Синхронизация остатков через 1С или WMS (CommerceML), используем события OnBeforeBasketAdd для проверки доступности.
Сравнение транспортных компаний
| Параметр |
СДЭК |
Boxberry |
Почта России |
ПЭК |
DPD |
| Покрытие |
Россия, СНГ |
Регионы, малые города |
Вся РФ |
РФ, тяжёлые грузы |
РФ, экспресс |
| Скорость доставки |
2–7 дней |
3–10 дней |
5–15 дней |
3–10 дней |
1–4 дня |
| Сложность API |
Средняя |
Низкая |
Высокая (XML) |
Средняя |
Средняя |
| Особенность |
Широкий набор тарифов, постаматы |
Самая широкая сеть ПВЗ |
Стабильный, но медленный ответ |
Страхование, обрешётка |
Временные интервалы |
Из каких этапов состоит подключение служб доставки?
-
Анализ логистики (1–2 дня) — география, средний вес, объём заказов, интеграция с 1С. Рекомендуем комбинацию ТК.
-
Подключение API (3–5 дней на ТК) — настройка расчётов, карт ПВЗ, автоматическое создание заказов через агенты и события.
-
Настройка трекинга (1–2 недели) — агенты обновления статусов, шаблоны уведомлений, страница трекинга.
-
Тестирование (2–3 дня) — проверка на реальных адресах, сравнение тарифов, контроль ошибочных расчётов, нагрузочное тестирование.
-
Деплой и обучение (1 день) — выгрузка модуля, передача доступов, обучение менеджеров.
-
Гарантийная поддержка (1 месяц) — исправление багов, корректировка конфигураций, донастройка кэширования.
Ориентировочные сроки реализации
| Этап |
Срок |
| Подключение одной ТК (API) |
3–5 дней |
| Карта выбора ПВЗ |
2–3 дня |
| Настройка самовывоза |
2–3 дня |
| Система трекинга |
1–2 недели |
| Мультисклад |
2–4 недели |
| Комплексная логистическая система |
4–8 недель |
Сроки зависят от количества ТК, сложности каталога и необходимости интеграции с 1С/ERP. Стоимость рассчитывается индивидуально — ориентируйтесь на экономию: снижение операционных затрат на доставку до 40% и сокращение обращений в поддержку на 60%. Например, один из клиентов с магазином электроники (20 000 товаров) вернул инвестиции за 3 месяца за счёт уменьшения числа «забытых» заказов.
Готовы ускорить логистику вашего интернет-магазина? Свяжитесь с нами — поможем подобрать оптимальную комбинацию ТК под ваш ассортимент и бюджет. Закажите консультацию, и мы подготовим предложение за 1 рабочий день.