Настройка самовывоза и пунктов выдачи на 1С-Битрикс
Самовывоз — стандартная опция для любого интернет-магазина с физическими точками присутствия. В Битрикс он реализуется через встроенный обработчик \Bitrix\Sale\Delivery\Services\Pickup, но стоит задача показать на сайте список точек самовывоза на карте — нужна кастомизация шаблона и логики.
Встроенный обработчик самовывоза
Битрикс включает базовый обработчик самовывоза: «Магазин → Настройки → Службы доставки → Добавить» → тип «Самовывоз». Базовые параметры:
- Название («Самовывоз из магазина»)
- Цена (0 руб. или фиксированная стоимость)
- Дополнительные поля с адресами точек (хранятся в настройках обработчика)
Этого достаточно для одной точки самовывоза.
Несколько точек самовывоза
Для нескольких точек рекомендуется инфоблок «Точки самовывоза» — каждый элемент это одна точка:
- Поля: название, адрес, режим работы, телефон, координаты (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;
}
}
Карта точек самовывоза в шаблоне
В шаблоне компонента оформления заказа при выборе метода «Самовывоз» показываем карту:
// Инициализация карты Яндекс с точками самовывоза
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 при переключении.
Сроки
| Состав | Срок |
|---|---|
| Обработчик самовывоза + инфоблок точек | 2–3 дня |
| + Карта с точками на оформлении | +1–2 дня |
| + Объединённый UI с ПВЗ курьерских служб | +3 дня |







