מטפל משלוחים מותאם אישית לאיסוף עצמי עבור 1C-Bitrix: נקודות מרובות
תארו לעצמכם: החנות המקוונת שלכם פועלת בכל הארץ עם 50 נקודות איסוף בערים שונות. לקוח רוצה לבחור את הנקודה הקרובה ביותר על המפה, לדעת את שעות הפעילות, ולאסוף את ההזמנה תוך שעה. אבל מטפל המשלוחים המובנה של Bitrix מאפשר רק נקודה אחת. זה אסון לרשת, במיוחד עם פריטים בעלי זמני מוכנות משתנים. אנחנו פותרים זאת עם מטפל מותאם אישית המבוסס על בלוק מידע: מבנה נתונים גמיש, סינון לפי עיר עם ביצועים של 0.1 שניות עבור 1000 רשומות, מפה בצד הלקוח. הניסיון שלנו: 10+ שנים בפיתוח 1C-Bitrix, מעל 50 פרויקטים של נקודות איסוף, כולל רשתות עם 300+ נקודות. חיסכון בזמן פיתוח בהשוואה לקניית מודול מוכן — עד 40%.
מטפל 'האיסוף העצמי' הסטנדרטי מאחסן כתובות בהגדרות — רק נקודה אחת. עבור שתיים או יותר, תצטרכו להכפיל מטפלים, וזה לא נוח ולא ניתן להרחבה. אנחנו מציעים פתרון של בלוק מידע — זול ומהיר יותר מהזמנת מודול מה-Marketplace. לפי התיעוד של 1C-Bitrix, מטפל האיסוף העצמי הסטנדרטי אינו תומך במספר נקודות.
איך ליישם נקודות איסוף מרובות?
עבור נקודות מרובות, צרו בלוק מידע 'נקודות איסוף'. כל רכיב הוא נקודה אחת:
- שדות: שם, כתובת, שעות פעילות, טלפון, קואורדינטות (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); }); }); }; כאשר לוחצים על נקודה, השדה הנסתר 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; } } מתמלא, ונשמר במאפייני ההזמנה. בלוח הניהול, המנהל רואה את נקודת האיסוף שנבחרה עם כתובת, שעות ופרטי קשר.
מה אם צריך לשלב נקודות איסוף של שירות שליחים עם נקודות משלכם?
אם אתם צריכים לשלב נקודות איסוף משלכם ונקודות של שירותי צד שלישי (SDEK, Boxberry) בממשק אחיד אחד — צרו רכיב בחירת נקודות מאוחד. השתמשו בטאבים: 'החנויות שלנו', 'נקודות איסוף SDEK', 'ארוניות חבילות'. נתונים עבור כל טאב נטענים דרך AJAX בעת מעבר. כך, הלקוח רואה את כל האפשרויות במקום אחד ויכול לבחור בנוחות. כל טאב נטען תוך פחות מ-0.5 שניות גם עם 500 נקודות. אנחנו גם מיישמים מטמון בצד השרת כדי למנוע בקשות כפולות.
אופטימיזציית ביצועים
עם מספר גדול של נקודות — 500 ומעלה — חשוב לארגן מטמון נכון. אנחנו משתמשים במטמון מתויג של Bitrix: תג לכל עיר, שנפסל כאשר נקודות משתנות. זה מאפשר לעשרות אלפי מבקרים לבחור איסוף בו-זמנית ללא עומס על השרת. בבדיקות עם 2000 נקודות, זמן התגובה של ה-API לא עלה על 0.2 שניות.
טעויות נפוצות
טעויות אופייניות: מטמון שגוי של רשימת הנקודות — הלקוח רואה נתונים מיושנים; חוסר סינון לפי עיר — מציעים נקודות מאזור אחר; קואורדינטות שגויות — הסמן נופל לאוקיינוס. אנחנו מתחשבים בכל התרחישים הללו ומיישמים ולידציה ברמת ה-API.
מה כלול בעבודה?
- ניתוח דרישות ומפרט טכני
- עיצוב מבנה בלוק המידע והמטפל
- פיתוח מטפל המשלוחים המותאם אישית
- שילוב מפה (Yandex.Maps או Google Maps)
- בניית ממשק אחיד בעת שילוב עם נקודות איסוף
- בדיקות וניפוי שגיאות
- תיעוד והעברת קוד מקור
- הדרכת מנהלים על עבודה עם נקודות
- אחריות לשנה
לוח זמנים
| היקף עבודה | לוח זמנים |
|---|---|
| מטפל איסוף עצמי + בלוק מידע של נקודות | 2–3 ימים |
| + מפה עם נקודות בתשלום | +1–2 ימים |
| + ממשק אחיד עם נקודות שירות שליחים | +3 ימים |
צרו קשר לייעוץ — נעריך את הפרויקט שלכם תוך יום אחד. הזמינו פיתוח וקבלו אחריות לשנה. אנחנו עובדים עם כל היקף: מחנות אחת ועד רשת פדרלית.







