Оптимізація маршрутів кур'єрської доставки в 1С-Бітрікс
Уявіть: кур'єрська служба обробляє 20 замовлень щодня. Диспетчер витрачає півгодини на побудову маршруту, але половина клієнтів все одно незадоволена запізненнями. У чому проблема? Найчастіше — у ручному плануванні та відсутності точних даних про затори та часові вікна. Інтеграція 1С-Бітрікс з сервісами маршрутизації — Яндекс.Маршрутизація або OR-Tools — вирішує це завдання за 5 секунд. Пробіг скорочується на 33%, а частка своєчасних доставок зростає з 60% до 95%. Це не просто економія пального — це виконання зобов'язань перед клієнтами та зниження операційних витрат. Наприклад, один з наших клієнтів заощаджує до 30 000 грн на місяць на пальному та зарплаті диспетчерів. Оптимізований алгоритм в 360 разів швидший за ручне планування.
Як інтеграція вирішує задачу комівояжера?
Суть проста: Бітрікс збирає дані про замовлення — адреси, часові вікна, вагу. Зовнішній сервіс вирішує NP-складну задачу комівояжера — будує оптимальний порядок об'їзду. Результат передається назад у вигляді маршрутних листів. Ми робимо цей зв'язок прозорим і надійним. Продуктивність: 20 точок обробляються за 5 секунд, а ручне планування займає 30 хвилин — оптимізований алгоритм працює в 360 разів швидше.
Задача комівояжера (TSP) — класична NP-складна проблема пошуку найкоротшого маршруту, що проходить через усі задані точки рівно один раз. У контексті доставки вона вирішується з урахуванням часових вікон та місткості транспорту, що робить її ще складнішою (VRPTW). Сучасні алгоритми, такі як мурашині колонії або лінійне програмування, дозволяють знаходити субоптимальні рішення за секунди. Детальніше — у Вікіпедії (https://ru.wikipedia.org/wiki/Задача_коммивояжёра).
Крок 1: Підготовка даних
Для побудови маршруту потрібен список адрес з координатами та часовими вікнами. Адреси беруться з властивостей замовлень:
$deliveries = \Bitrix\Sale\OrderTable::getList([
'filter' => [
'STATUS_ID' => 'TD', // статус "к доставке сегодня"
'>=DATE_STATUS' => new \Bitrix\Main\Type\Date(),
],
'select' => ['ID'],
])->fetchAll();
$points = [];
foreach ($deliveries as $row) {
$order = \Bitrix\Sale\Order::load($row['ID']);
$props = $order->getPropertyCollection();
$points[] = [
'order_id' => $row['ID'],
'address' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(),
'lat' => $props->getItemByOrderPropertyCode('LAT')?->getValue(),
'lon' => $props->getItemByOrderPropertyCode('LON')?->getValue(),
'time_from' => $props->getItemByOrderPropertyCode('DELIVERY_TIME_FROM')?->getValue(),
'time_to' => $props->getItemByOrderPropertyCode('DELIVERY_TIME_TO')?->getValue(),
'weight' => $this->getOrderWeight($order),
];
}
Координати (LAT/LON) потрібно отримати при оформленні замовлення — через геокодування API Яндекса або Google за введеною адресою. Збережіть їх у користувацьких властивостях замовлення.
Чому без геокодування не отримати точний маршрут?
Без координат сервіс оптимізації не знає, де конкретно знаходиться точка. Геокодування перетворює текстову адресу на широту/довготу. Ми реалізуємо його прямо у формі замовлення — AJAX-запит до геокодера при заповненні поля адреси. Ось як це виглядає:
fetch(`https://geocode-maps.yandex.ru/1.x/?apikey=KEY&format=json&geocode=${encodeURIComponent(address)}`)
.then(r => r.json())
.then(data => {
const pos = data.response.GeoObjectCollection.featureMember[0]?.GeoObject?.Point?.pos;
if (pos) {
const [lon, lat] = pos.split(' ');
document.getElementById('lat-field').value = lat;
document.getElementById('lon-field').value = lon;
}
});
Координати мовчки зберігаються в приховані поля форми і потрапляють у властивості замовлення. Водій про це навіть не знає — все автоматично.
Крок 2: Інтеграція з сервісом оптимізації
Після збору точок відправляємо їх в API оптимізатора маршрутів. Приклад з Яндекс.Маршрутизацією:
$httpClient = new \Bitrix\Main\Web\HttpClient();
$response = $httpClient->post(
'https://courier.yandex.ru/api/v1/companies/{company_id}/routes',
json_encode(['vehicles' => $vehicles, 'orders' => $points]),
['Authorization' => 'Bearer ' . YANDEX_COURIER_API_KEY]
);
$routes = json_decode($response, true);
Повернені маршрути містять упорядкований список точок для кожного кур'єра. Збережіть їх у таблицю bl_courier_routes і призначте кур'єрам через CRM-задачі або мобільний додаток.
Крок 3: Відображення маршруту кур'єру
Створіть мобільну сторінку або відправте кур'єру посилання на маршрут у Google Maps чи Яндекс.Картах з waypoints. Формат для Google Maps:
https://www.google.com/maps/dir/DEPOT_LAT,DEPOT_LON/STOP1_LAT,STOP1_LON/STOP2_LAT,STOP2_LON/...
Генеруйте це посилання з даних bl_courier_routes і надсилайте кур'єру через SMS або email.
Що дає оптимізація маршрутів?
| Параметр |
Ручна розвозка |
Оптимізована маршрутизація |
| Середній пробіг на 20 точок |
180 км |
120 км (на 33% менше) |
| Частка виконаних замовлень вчасно |
60% |
95% |
| Витрати на пальне |
100% |
70% |
| Час планування маршруту |
30 хвилин |
5 секунд (в 360 разів швидше) |
| Середня економія |
0 грн |
30 000 грн на місяць |
Оптимізована маршрутизація в 30 разів швидша за ручне планування і на 33% скорочує пробіг. Кожен зекономлений кілометр знижує витрати пального на суттєву величину, а разом з економією часу кур'єрів і диспетчерів бюджет на доставку може скоротитися на 30–40%.
Типові помилки при налаштуванні
| Помилка |
Наслідок |
Рішення |
| Адреса без геокодування |
Сервіс не може побудувати маршрут |
Додати AJAX-запит до геокодера |
| Не задані часові вікна |
Кур'єр їде в будь-який час |
Створити властивості DELIVERY_TIME_FROM/DELIVERY_TIME_TO |
| Ігнорування ваги |
Перевантаження кур'єра |
Врахувати вагу в розрахунку маршруту |
| Немає агента збору |
Дані застарівають |
Налаштувати агент на Cron або агенти Бітрікс |
Як ми автоматизуємо доставку під ключ
Ми маємо 5+ років досвіду у впровадженні систем маршрутизації, виконали понад 50 проектів для логістичних компаній. Виконуємо повний цикл робіт:
Що входить в роботу:
- Документація та аудит: аналіз поточної системи, фіксація вимог, технічне завдання.
- Доступи та інтеграція: налаштування доступу до API Бітрікс, створення властивостей, геокодування.
- Розробка: агент збору точок, таблиця маршрутів, виклик оптимізатора.
- Навчання: інструкції для диспетчерів та кур'єрів, демонстрація роботи.
- Підтримка: гарантійне обслуговування 3 місяці, консультації.
Наші клієнти економлять у середньому 30 000 гривень на місяць на пальному та зарплаті диспетчерів. Сертифіковані спеціалісти, прозорий код, підтримка після здачі. Зв'яжіться з нами для аудиту системи доставки — ми оцінимо бюджет і терміни протягом одного дня. Замовте налаштування під ключ і отримайте консультацію щодо вашого завдання.
Інтеграція доставки: від розрізнених API до єдиного калькулятора за 5 днів
Покупець кидає кошик на етапі доставки — не бачить розрахунку або бачить свідомо невірну ціну. Кожен такий випадок втрачає конверсію. Автоматизація логістики в 1С-Бітрікс вирішує цю проблему: ми підключаємо служби доставки так, щоб ціна показувалася миттєво, а трекінг оновлювався без участі менеджера. Більше 50 реалізованих проєктів з каталогами від 500 до 100 000 SKU, досвід понад 8 років. Середній час підключення однієї транспортної компанії — 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 простіше, ніж у СДЕК, але є нюанси з післяплатою та частковим викупом. Типові помилки при інтеграції: відсутність фільтрації ПВЗ за ознакою onlyPrepaid → помилки при післяплаті; ігнорування параметра partialReturn → ламає частковий викуп. API повертає код міста у форматі "770000000000" — потрібне маппінг на index міста.
Нова пошта — лідер українського ринку
Для України — обов'язкове підключення Нової пошти через API v2. Розрахунок вартості, створення ЕН, друк накладної, трекінг. Карта відділень з фільтрацією (поштомати, прийом платежів). Асинхронне оновлення статусів через агент Бітрікс кожні 15 хвилин.
ПЕК — важкі вантажі та збір
Коли потрібно відправити диван або обладнання. Розрахунок збірних вантажів, страхування, обрешітка. Доставка до терміналу та від дверей до дверей. Індекси терміналів ПЕК підвантажуємо в інфоблок для автопідстановки.
DPD — експрес-доставка з часовими слотами
DPD по Україні та за кордон. Доставка у вибраний часовий інтервал, повернення підписаних документів. У розрахунку враховуємо об'ємну вагу за формулою (Д×Ш×В)/4000 — відмінність від СДЕК. Документація DPD: volumetric weight factor 4000.
Як об'єднати різні ТК в єдиному калькуляторі?
Використовуємо гібридний підхід: модуль-агрегатор, який маршрутизує запити до різних API та нормалізує відповіді. Він обробляє запити в 5 разів швидше, ніж окремі інтеграції, завдяки паралельним викликам через curl_multi. У відповіді модуля — єдина структура: назва тарифу, ціна, термін, тип доставки. Кешування теговане: при зміні налаштувань модуля очищується лише кеш розрахунку для обраного міста, решта залишається. Подію 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 днів |
1–3 дні |
3–10 днів |
1–4 дні |
| Складність API |
Середня |
Низька |
Висока (XML) |
Середня |
Середня |
| Особливість |
Широкий набір тарифів, постамати |
Найширша мережа ПВЗ |
Стабільна, швидка відповідь |
Страхування, обрешітка |
Часові інтервали |
Етапи підключення служб доставки
-
Аналіз логістики (1–2 дні) — географія, середня вага, обсяг замовлень, інтеграція з 1С. Рекомендуємо комбінацію ТК.
-
Підключення API (3–5 днів на ТК) — налаштування розрахунків, карт ПВЗ, автоматичне створення замовлень через агенти та події.
-
Налаштування трекінгу (1–2 тижні) — агенти оновлення статусів, шаблони повідомлень, сторінка трекінгу.
-
Тестування (2–3 дні) — перевірка на реальних адресах, порівняння тарифів, контроль помилкових розрахунків, навантажувальне тестування.
-
Деплой та навчання (1 день) — вивантаження модуля, передача доступів, навчання менеджерів.
-
Гарантійна підтримка (1 місяць) — виправлення багів, коригування конфігурацій, доналаштування кешування.
Що входить у вартість інтеграції
- Документація зі схемою обміну (логістичні маршрути, тарифні зони).
- Налаштовані доступы до API кожної ТК, ключі, вебхуки.
- Шаблони повідомлень (email, SMS, push) для статусів доставки.
- Навчання менеджерів: робота з адмінкою, друк документів, обробка помилок.
- Півроку технічної підтримки після запуску.
Орієнтовні терміни реалізації
| Етап |
Термін |
| Підключення однієї ТК (API) |
3–5 днів |
| Карта вибору ПВЗ |
2–3 дні |
| Налаштування самовивозу |
2–3 дні |
| Система трекінгу |
1–2 тижні |
| Мультисклад |
2–4 тижні |
| Комплексна логістична система |
4–8 тижнів |
Терміни залежать від кількості ТК, складності каталогу та необхідності інтеграції з 1С/ERP. Вартість розраховується індивідуально — орієнтуйтеся на економію: зниження операційних витрат на доставку до 40% та скорочення звернень до підтримки на 60%. Наприклад, один із клієнтів з магазином електроніки (20 000 товарів) повернув інвестиції за 3 місяці за рахунок зменшення кількості «забутих» замовлень. Середня економія наших клієнтів — 15 000 грн на місяць на логістиці.
Готові прискорити логістику вашого інтернет-магазину? Зв'яжіться з нами — допоможемо підібрати оптимальну комбінацію ТК під ваш асортимент та бюджет. Замовте консультацію — і ми підготуємо пропозицію за 1 робочий день.