Оптимізація маршрутів кур'єрської доставки в 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 гривень на місяць на пальному та зарплаті диспетчерів. Сертифіковані спеціалісти, прозорий код, підтримка після здачі. Зв'яжіться з нами для аудиту системи доставки — ми оцінимо бюджет і терміни протягом одного дня. Замовте налаштування під ключ і отримайте консультацію щодо вашого завдання.







