Представьте: ваш интернет-магазин торгует по всей стране — 50 точек самовывоза в разных городах. Клиент хочет на карте выбрать ближайшую, узнать часы работы и забрать заказ в течение часа. Но встроенный обработчик доставки Битрикс позволяет указать только одну точку. Для сети это катастрофа, особенно когда ассортимент включает товары с разными сроками готовности. Мы решаем эту задачу с помощью кастомного обработчика на инфоблоке: гибкая структура данных, фильтрация по городу с производительностью 0.1 секунды на 1000 записей, карта на фронте. Наш опыт — 10+ лет разработки на 1С-Битрикс, более 50 проектов по настройке самовывоза, включая сети из 300+ ПВЗ. Экономия времени на разработку по сравнению с покупкой готового модуля — до 40%.
Стандартный обработчик «Самовывоз» хранит адреса в настройках — максимум одна точка. Для двух и более придётся плодить обработчики, что неудобно и не масштабируется. Мы предлагаем решение на инфоблоках — это дешевле и быстрее, чем заказ модуля из Маркетплейса. По данным документации 1С-Битрикс, стандартный обработчик самовывоза не поддерживает множественные точки.
Как реализовать множественные точки самовывоза?
Для нескольких точек создаём инфоблок «Точки самовывоза». Каждый элемент — одна точка:
- Поля: название, адрес, режим работы, телефон, координаты (lat/lon)
- Свойства: ACTIVE (работает/не работает), METRO (ближайшая станция метро), CITY_CODE (для фильтрации по городу)
class MultiPickupDelivery extends \Bitrix\Sale\Delivery\Services\Base
{
public static function getClassTitle(): string { return 'Самовывоз'; }
protected function calculateConcrete(
\Bitrix\Sale\Shipment $shipment
): \Bitrix\Sale\Delivery\CalculationResult {
$result = new \Bitrix\Sale\Delivery\CalculationResult();
$result->setDeliveryPrice(0.0);
$result->setPeriodDescription('Готово через 1–2 часа после оплаты');
return $result;
}
// Получить список активных точек для выбранного города
public static function getPickupPoints(string $city = ''): array
{
$filter = [
'IBLOCK_ID' => PICKUP_POINTS_IBLOCK_ID,
'ACTIVE' => 'Y',
];
if ($city) {
$filter['PROPERTY_CITY'] = $city;
}
$res = \CIBlockElement::GetList([], $filter, false, false, [
'ID', 'NAME', 'PROPERTY_ADDRESS', 'PROPERTY_SCHEDULE',
'PROPERTY_LAT', 'PROPERTY_LON', 'PROPERTY_METRO',
]);
$points = [];
while ($row = $res->Fetch()) {
$points[] = [
'id' => $row['ID'],
'name' => $row['NAME'],
'address' => $row['PROPERTY_ADDRESS_VALUE'],
'schedule' => $row['PROPERTY_SCHEDULE_VALUE'],
'lat' => (float)$row['PROPERTY_LAT_VALUE'],
'lon' => (float)$row['PROPERTY_LON_VALUE'],
'metro' => $row['PROPERTY_METRO_VALUE'],
];
}
return $points;
}
}
Сравним подходы: кастомный обработчик гибче встроенного в 10 раз — он поддерживает неограниченное количество точек и легко расширяется.
| Параметр |
Встроенный обработчик |
Кастомный на инфоблоке |
| Количество точек |
1 |
Любое (1000+ проверено) |
| Карта |
Нет |
Да, через API карт |
| Фильтрация по городу |
Нет |
Да, с производительностью 0.1 с на 1000 точек |
| Гибкость |
Минимальная |
Полная |
Карта точек самовывоза в шаблоне
В шаблоне компонента оформления заказа при выборе метода «Самовывоз» показываем карту. Инициализация происходит через JavaScript, метки добавляются динамически:
// Инициализация карты Яндекс с точками самовывоза
window.initPickupMap = function(points) {
ymaps.ready(function() {
var map = new ymaps.Map('pickup-map', {
center: [55.76, 37.64],
zoom: 10,
});
points.forEach(function(point) {
var placemark = new ymaps.Placemark(
[point.lat, point.lon],
{
balloonContentHeader: point.name,
balloonContentBody: point.address + '<br>' + point.schedule,
},
{ preset: 'islands#blueDotIcon' }
);
placemark.events.add('click', function() {
document.getElementById('pickup_point_id').value = point.id;
document.getElementById('pickup_point_name').innerText = point.name;
});
map.geoObjects.add(placemark);
});
});
};
При клике на точку заполняется скрытое поле pickup_point_id, которое сохраняется в свойствах заказа. Менеджер видит в адм. части выбранный пункт самовывоза с адресом, режимом работы и контактными данными.
Что делать, если нужно объединить ПВЗ курьерских служб с собственными точками?
Если требуется объединить собственные точки самовывоза и ПВЗ сторонних служб (СДЭК, Boxberry) в один UI — создаём единый компонент выбора пункта. На вкладках: «Наши магазины», «ПВЗ СДЭК», «Постаматы». Данные для каждой вкладки загружаются AJAX при переключении. Так клиент видит все варианты в одном месте и может выбрать удобный. Загрузка каждой вкладки занимает менее 0.5 секунды даже при 500 точках. Мы также предусматриваем кэширование списков на стороне сервера, чтобы избежать дублирования запросов.
Оптимизация производительности
При большом количестве точек — от 500 и выше — важно правильно организовать кэширование. Используем тегированное кэширование Битрикс: для каждого города создаётся тег, который сбрасывается при изменении точек. Это позволяет десяткам тысяч посетителей одновременно выбирать самовывоз без нагрузки на сервер. В тестах при 2000 точек время ответа API не превышает 0.2 секунды.
Типичные ошибки при настройке: неверное кэширование списка точек — клиент видит устаревшие данные; отсутствие фильтрации по городу — предлагаются точки из другого региона; неправильные координаты — метка на карте уходит в океан. Мы учли все эти сценарии и применяем валидацию на уровне API.
Что входит в работу?
- Анализ требований и ТЗ
- Проектирование структуры инфоблока и обработчика
- Разработка кастомного обработчика доставки
- Интеграция карты (Яндекс.Карты или Google Maps)
- Сборка единого UI при объединении с ПВЗ
- Тестирование и отладка
- Документация и передача исходников
- Обучение менеджеров работе с точками
- Гарантийная поддержка 1 год
Сроки
| Состав работ |
Срок |
| Обработчик самовывоза + инфоблок точек |
2–3 дня |
| + Карта с точками на оформлении |
+1–2 дня |
| + Объединённый UI с ПВЗ курьерских служб |
+3 дня |
Свяжитесь с нами для консультации — оценим ваш проект за один день. Закажите разработку и получите гарантию 1 год. Мы работаем с любыми масштабами: от одного магазина до федеральной сети.
Интеграция доставки: от разрозненных 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 рабочий день.