Налаштування оптимізації маршрутів кур'єрської доставки 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування оптимізації маршрутів кур'єрської доставки 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування оптимізації маршрутів кур'єрської доставки в 1С-Бітрікс

Оптимізація маршрутів — задача комівояжера: є N адрес доставки та кур'єр, потрібно відвідати всі з мінімальним пробігом. Бітрікс сам цю задачу не вирішує, але служить джерелом даних про замовлення. Оптимізовані маршрути будуються зовнішніми сервісами (Яндекс.Маршрутизація, Google OR-Tools, Routific) та передаються назад як завдання для кур'єрів.

Підготовка даних про доставки

Для побудови маршруту потрібен список адрес із координатами та часовими вікнами. Адреси беруться з властивостей замовлень:

$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;
        }
    });

Координати зберігаються у приховані поля форми та потрапляють у властивості замовлення.

Інтеграція з сервісом оптимізації маршрутів

Після збору точок відправляємо їх в 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-завдання або мобільний додаток.

Відображення маршруту кур'єру

Створіть мобільну сторінку або відправте кур'єру посилання на маршрут у 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.

Що налаштовуємо

  • Користувацькі властивості замовлення LAT, LON, DELIVERY_TIME_FROM, DELIVERY_TIME_TO
  • Геокодування адреси при оформленні замовлення через JavaScript + Яндекс/Google API
  • Агент збору точок доставки та відправки запиту до оптимізатора маршрутів
  • Таблицю bl_courier_routes для зберігання оптимізованих маршрутів
  • Генерацію посилань на маршрут та розповсюдження кур'єрам