Ми створюємо кастомні обробники доставки для 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%), за підйом на поверх (вартість від 50 грн за поверх), за накладений платіж (3% від суми замовлення), знижку для B2B-клієнтів (10%). Економія на доставці для B2B може сягати 30%. Всі параметри налаштовуються в адмінці через 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С-Бітрікс: «Служби доставки — це підсистема, що дозволяє підключати будь-які розрахункові обробники, включаючи власні.» Це підтверджує можливість кастомної реалізації.
Технічні деталі кешування
Кеш будується за ключем, що включає ID зони, вагу, об'єм, ознаки націнок. Зберігається на 10 хвилин у стандартному кеші Бітрікса.Окупність та переваги
Кастомний калькулятор окупається за 2–3 місяці завдяки зниженню відмов від кошика — клієнти бачать реальну ціну доставки, а не приблизну. Наші бітрікс-розробники мають гарантію якості, сертифікати та 10+ років досвіду, виконали понад 50 проєктів з кастомної доставки. Замовте консультацію по вашому сценарію — ми розберемо задачу та запропонуємо архітектуру.







