Custom Pickup Delivery for 1C-Bitrix: Multiple Points

Custom Pickup Delivery Handler for 1C-Bitrix: Multiple Points Imagine: your online store operates nationwide with 50 pickup points in different cities. A customer wants to select the nearest one on a map, know the hours, and pick up the order within an hour. But Bitrix's built-in delivery handler

Our competencies:

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    882
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1164

Custom Pickup Delivery Handler for 1C-Bitrix: Multiple Points

Imagine: your online store operates nationwide with 50 pickup points in different cities. A customer wants to select the nearest one on a map, know the hours, and pick up the order within an hour. But Bitrix's built-in delivery handler allows only one point. That's a disaster for a network, especially with items of varying readiness times. We solve this with a custom handler based on an information block: flexible data structure, city filtering with 0.1-second performance for 1000 records, front-end map. Our experience: 10+ years in 1C-Bitrix development, over 50 pickup point projects, including networks with 300+ points. Development time savings compared to buying a ready-made module — up to 40%.

The standard 'Self-Delivery' handler stores addresses in settings — only one point. For two or more, you'd need to multiply handlers, which is inconvenient and non-scalable. We offer an information block solution — cheaper and faster than ordering a module from the Marketplace. According to 1C-Bitrix documentation, the standard self-delivery handler does not support multiple points.

How to implement multiple pickup points?

For multiple points, create an information block 'Pickup Points'. Each element is one point:

  • Fields: name, address, working hours, phone, coordinates (lat/lon)
  • Properties: ACTIVE (working status), METRO (nearest metro station), CITY_CODE (for city filtering)
class MultiPickupDelivery extends \Bitrix\Sale\Delivery\Services\Base { public static function getClassTitle(): string { return 'Self-Delivery'; } protected function calculateConcrete( \Bitrix\Sale\Shipment $shipment ): \Bitrix\Sale\Delivery\CalculationResult { $result = new \Bitrix\Sale\Delivery\CalculationResult(); $result->setDeliveryPrice(0.0); $result->setPeriodDescription('Ready in 1–2 hours after payment'); return $result; } // Get active pickup points for the selected city 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; } } 

Let's compare approaches: the custom handler is 10x more flexible than the built-in — it supports unlimited points and is easily expandable.

Parameter Built-in handler Custom on info block
Number of points 1 Unlimited (1000+ tested)
Map No Yes, via map API
City filtering No Yes, with 0.1 s performance on 1000 points
Flexibility Minimal Full

Map of pickup points in the template

In the checkout component template, when the 'Self-Delivery' method is selected, show a map. It's initialized via JavaScript, and markers are added dynamically:

// Initialize Yandex map with pickup 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); }); }); }; 

When a point is clicked, the hidden field pickup_point_id is filled, which is saved in order properties. In the admin panel, the manager sees the selected pickup point with address, hours, and contact info.

What if you need to combine courier service pickup points with your own?

If you need to combine your own pickup points and third-party service points (SDEK, Boxberry) into a single UI — create a unified point selection component. Use tabs: 'Our Stores', 'SDEK Pickup Points', 'Parcel Lockers'. Data for each tab is loaded via AJAX on switch. This way, the customer sees all options in one place and can choose conveniently. Each tab loads in under 0.5 seconds even with 500 points. We also implement server-side caching to avoid duplicate requests.

Performance optimization

With a large number of points — 500 and above — it's important to organize caching correctly. We use Bitrix's tagged caching: a tag for each city, which is invalidated when points change. This allows tens of thousands of visitors to simultaneously select pickup without server load. In tests with 2000 points, API response time did not exceed 0.2 seconds.

Common mistakes

Typical mistakes: incorrect caching of point list — the client sees outdated data; lack of city filtering — points from another region are offered; wrong coordinates — marker ends up in the ocean. We account for all these scenarios and apply validation at the API level.

What's included in the work?

  • Requirements analysis and technical specifications
  • Designing the info block structure and handler
  • Developing the custom delivery handler
  • Integrating the map (Yandex.Maps or Google Maps)
  • Building a unified UI when combining with pickup points
  • Testing and debugging
  • Documentation and source code handover
  • Training managers on working with points
  • 1-year warranty support

Timeline

Work scope Timeline
Self-delivery handler + info block of points 2–3 days
+ Map with points at checkout +1–2 days
+ Unified UI with courier service points +3 days

Contact us for a consultation — we'll estimate your project in one day. Order development and get a 1-year guarantee. We work with any scale: from one store to a federal network.