Настройка оптимизации маршрутов курьерской доставки 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка оптимизации маршрутов курьерской доставки 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка оптимизации маршрутов курьерской доставки 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 для хранения оптимизированных маршрутов
  • Генерацию ссылок на маршрут и рассылку курьерам