Представьте: курьерская служба обрабатывает 20 заказов ежедневно. Диспетчер тратит полчаса на построение маршрута, но половина клиентов всё равно недовольна опозданиями. В чём проблема? Чаще всего в ручном планировании и отсутствии точных данных о пробках и временных окнах. Интеграция 1С-Битрикс с сервисами маршрутизации — Яндекс.Маршрутизация или OR-Tools — решает эту задачу за 5 секунд. Пробег сокращается на 33%, а доля своевременных доставок вырастает с 60% до 95%. Это не просто экономия топлива — это выполнение обязательств перед клиентами и снижение операционных затрат.
Как интеграция решает задачу коммивояжёра?
Суть проста: Битрикс собирает данные о заказах — адреса, временные окна, вес. Внешний сервис решает NP-трудную задачу коммивояжёра — строит оптимальный порядок объезда. Результат передаётся обратно в виде маршрутных листов. Мы делаем эту связь прозрачной и надёжной. Производительность: 20 точек обрабатываются за 5 секунд, а ручное планирование занимает 30 минут — разница в 360 раз.
Подробнее о задаче коммивояжёра
Задача коммивояжёра (TSP) — классическая NP-трудная проблема поиска кратчайшего маршрута, проходящего через все заданные точки ровно один раз. В контексте доставки она решается с учётом временных окон и вместимости транспорта, что делает её ещё более сложной (VRPTW). Современные алгоритмы, такие как муравьиные колонии или линейное программирование, позволяют находить субоптимальные решения за секунды.
Шаг 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 секунд |
Оптимизированная маршрутизация в 30 раз быстрее ручного планирования и на 33% сокращает пробег. Каждый сэкономленный километр снижает расход топлива на существенную величину, а вместе с экономией времени курьеров и диспетчеров бюджет на доставку может сократиться на 30–40%.
Типичные ошибки при настройке
| Ошибка |
Последствие |
Решение |
| Адрес без геокодинга |
Сервис не может построить маршрут |
Добавить AJAX-запрос к геокодеру |
| Не заданы временные окна |
Курьер едет в любое время |
Создать свойства DELIVERY_TIME_FROM/DELIVERY_TIME_TO |
| Игнорирование веса |
Перегрузка курьера |
Учесть вес в расчёте маршрута |
| Нет агента сборки |
Данные устаревают |
Настроить агент на Cron или Bitrix агенты |
Как мы автоматизируем доставку под ключ
Мы выполняем полный цикл работ:
- Создание пользовательских свойств заказа
LAT, LON, DELIVERY_TIME_FROM, DELIVERY_TIME_TO.
- Реализация геокодирования на AJAX через Яндекса или Google.
- Агент сборки точек и вызова API оптимизатора.
- Таблица
bl_courier_routes для хранения маршрутов.
- Генерация ссылок на карты и рассылка курьерам.
- Обучение диспетчеров и курьеров.
- Исходный код и документация по доработке.
Наши клиенты экономят в среднем 30 000 рублей в месяц на топливе и зарплате диспетчеров. Сертифицированные специалисты, прозрачный код, поддержка после сдачи. Свяжитесь с нами для аудита системы доставки — мы оценим бюджет и сроки в течение одного дня. Закажите настройку под ключ и получите консультацию по вашей задаче.
Интеграция доставки: от разрозненных API к единому калькулятору за 5 дней
Покупатель бросает корзину на этапе доставки — не видит расчёта или видит заведомо неверную цену. Каждый такой случай теряет конверсию. Автоматизация логистики в 1С-Битрикс решает эту проблему: мы подключаем службы доставки так, чтобы цена показывалась мгновенно, а трекинг обновлялся без участия менеджера. За 8 лет реализовано более 50 проектов с каталогами от 500 до 100 000 SKU. Среднее время подключения одной транспортной компании — 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 проще, чем у СДЭК, но есть нюансы с наложенным платежом и частичным выкупом. Карта ПВЗ с фильтрацией: примерка, оплата картой, работа в выходные. Обязательно проверяем корректную обработку ответа 0 при отсутствии ПВЗ.
Почта России — стабильность ценой скорости
API «Отправка» — расчёт стоимости, автоформирование бланков ф.103 и ф.116, трекинг по трек-номеру. Тарифы: посылка, бандероль, EMS. Международные отправления. API медленнее коммерческих ТК — закладываем таймауты 10 секунд, используем асинхронные агенты Битрикс для обновления статусов.
ПЭК — тяжёлые грузы и сбор
Когда нужно отправить диван или оборудование. Расчёт сборных грузов, страхование, обрешётка. Доставка до терминала и от двери до двери. Индексы терминалов ПЭК подгружаем в инфоблок для автоподстановки.
DPD — экспресс-доставка с временными слотами
DPD по России и за рубеж. Доставка в выбранный временной интервал, возврат подписанных документов. В расчёте учитываем объёмный вес по формуле (Д×Ш×В)/4000 — отличие от СДЭК.
Пример: типичные ошибки при интеграции Boxberry
Отсутствие фильтрации ПВЗ по признаку `onlyPrepaid` приводит к ошибкам при наложенном платеже. Игнорирование параметра `partialReturn` ломает частичный выкуп. API возвращает код города в формате "770000000000" — требуется маппинг на index города.
Как объединить разные ТК в едином калькуляторе?
Используем гибридный подход: модуль-агрегатор, который маршрутизирует запросы к разным API и нормализует ответы. Это позволяет сравнивать тарифы в реальном времени без переключения между личными кабинетами. В ответе модуля — единая структура: название тарифа, цена, срок, тип доставки. Кэширование тегированное: при изменении настроек модуля очищается только кэш расчёта для выбранного города, остальное остаётся. Событие 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 дней |
5–15 дней |
3–10 дней |
1–4 дня |
| Сложность API |
Средняя |
Низкая |
Высокая (XML) |
Средняя |
Средняя |
| Особенность |
Широкий набор тарифов, постаматы |
Самая широкая сеть ПВЗ |
Стабильный, но медленный ответ |
Страхование, обрешётка |
Временные интервалы |
Из каких этапов состоит подключение служб доставки?
-
Анализ логистики (1–2 дня) — география, средний вес, объём заказов, интеграция с 1С. Рекомендуем комбинацию ТК.
-
Подключение API (3–5 дней на ТК) — настройка расчётов, карт ПВЗ, автоматическое создание заказов через агенты и события.
-
Настройка трекинга (1–2 недели) — агенты обновления статусов, шаблоны уведомлений, страница трекинга.
-
Тестирование (2–3 дня) — проверка на реальных адресах, сравнение тарифов, контроль ошибочных расчётов, нагрузочное тестирование.
-
Деплой и обучение (1 день) — выгрузка модуля, передача доступов, обучение менеджеров.
-
Гарантийная поддержка (1 месяц) — исправление багов, корректировка конфигураций, донастройка кэширования.
Ориентировочные сроки реализации
| Этап |
Срок |
| Подключение одной ТК (API) |
3–5 дней |
| Карта выбора ПВЗ |
2–3 дня |
| Настройка самовывоза |
2–3 дня |
| Система трекинга |
1–2 недели |
| Мультисклад |
2–4 недели |
| Комплексная логистическая система |
4–8 недель |
Сроки зависят от количества ТК, сложности каталога и необходимости интеграции с 1С/ERP. Стоимость рассчитывается индивидуально — ориентируйтесь на экономию: снижение операционных затрат на доставку до 40% и сокращение обращений в поддержку на 60%. Например, один из клиентов с магазином электроники (20 000 товаров) вернул инвестиции за 3 месяца за счёт уменьшения числа «забытых» заказов.
Готовы ускорить логистику вашего интернет-магазина? Свяжитесь с нами — поможем подобрать оптимальную комбинацию ТК под ваш ассортимент и бюджет. Закажите консультацию, и мы подготовим предложение за 1 рабочий день.