Мы создаём кастомные обработчики доставки для 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%), за подъём на этаж ($1–2 за каждый этаж после первого), за наложенный платёж (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 раз.
Как адаптировать калькулятор под конкретные бизнес-правила?
Каждый магазин имеет уникальные требования: бесплатная доставка при заказе от $45–65, бесплатный подъём для товаров до 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 проектов по кастомной доставке. Закажите консультацию по вашему сценарию — мы разберём задачу и предложим архитектуру.







