תארו לעצמכם: שירות שליחויות מטפל ב-20 הזמנות ביום. המתאם מבלה חצי שעה בתכנון המסלול, אבל חצי מהלקוחות עדיין לא מרוצים מהעיכובים. מה הבעיה? בדרך כלל מדובר בתכנון ידני וחוסר בנתונים מדויקים על תנועה וחלונות זמן. שילוב 1C-Bitrix עם שירותי ניתוב—Yandex.Routing או OR-Tools—פותר את זה ב-5 שניות. קילומטראז' מופחת ב-33%, ושיעור המשלוחים בזמן עולה מ-60% ל-95%. זה לא רק חיסכון בדלק—זה עמידה בהתחייבויות ללקוחות והפחתת עלויות תפעול.
כיצד האינטגרציה פותרת את בעיית הסוכן הנוסע
המהות פשוטה: Bitrix אוסף נתוני הזמנות—כתובות, חלונות זמן, משקל. השירות החיצוני פותר את בעיית הסוכן הנוסע (NP-hard)—בונה את סדר הביקור האופטימלי. התוצאה מועברת חזרה כגיליונות מסלול. אנחנו הופכים את החיבור הזה לשקוף ואמין. ביצועים: 20 נקודות מעובדות ב-5 שניות, בעוד שתכנון ידני לוקח 30 דקות—הפרש של פי 360.
מידע נוסף על בעיית הסוכן הנוסע
בעיית הסוכן הנוסע (TSP) היא בעיה קלאסית מסוג NP-hard של מציאת המסלול הקצר ביותר שעובר בכל הנקודות הנתונות בדיוק פעם אחת. בהקשר של משלוחים, היא נפתרת עם חלונות זמן ומגבלות קיבולת רכב, מה שהופך אותה למורכבת עוד יותר (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) במהלך ביצוע ההזמנה—באמצעות Yandex או Google geocoding API מהכתובת שהוזנה. שמרו אותן במאפייני המשתמש של ההזמנה.
מדוע גיאוקידינג מדויק חיוני למסלולים אופטימליים
ללא קואורדינטות, שירות האופטימיזציה לא יודע היכן בדיוק הנקודה. גיאוקידינג ממיר כתובת טקסטואלית לקווי רוחב/אורך. אנו מיישמים אותו ישירות בטופס ההזמנה—בקשת 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 של אופטימיזציית המסלולים. דוגמה עם Yandex.Routing:
$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); המסלולים המוחזרים מכילים רשימה מסודרת של נקודות עבור כל שליח. שמרו אותם בטבלת $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), ]; } והקצו אותם לשליחים דרך משימות CRM או אפליקציה ניידת.
שלב 3: הצגת המסלול לשליח
צרו דף נייד או שלחו לשליח קישור למסלול ב-Google Maps או Yandex.Maps עם נקודות ציון. פורמט עבור Google Maps:
https://www.google.com/maps/dir/DEPOT_LAT,DEPOT_LON/STOP1_LAT,STOP1_LON/STOP2_LAT,STOP2_LON/... צרו קישור זה מנתוני 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; } }); ושלחו אותו לשליח באמצעות SMS או דוא"ל.
מה אופטימיזציית מסלולים משיגה
| פרמטר | משלוח ידני | ניתוב אופטימלי |
|---|---|---|
| קילומטראז' ממוצע ל-20 נקודות | 180 ק"מ | 120 ק"מ (33% פחות) |
| משלוחים בזמן | 60% | 95% |
| עלויות דלק | 100% | 70% |
| זמן תכנון מסלול | 30 דקות | 5 שניות |
ניתוב אופטימלי מהיר פי 30 מתכנון ידני ומפחית קילומטראז' ב-33%. כל קילומטר שנחסך מפחית משמעותית את צריכת הדלק, וביחד עם חיסכון בזמן שליחים ומתאמים, תקציב המשלוחים יכול לרדת ב-30–40%.
טעויות הגדרה אופייניות
| טעות | תוצאה | פתרון |
|---|---|---|
| כתובת ללא גיאוקידינג | השירות לא יכול לבנות מסלול | הוספת בקשת AJAX לגיאוקודר |
| חלונות זמן לא מוגדרים | השליח נוסע בכל שעה | יצירת מאפיינים DELIVERY_TIME_FROM/DELIVERY_TIME_TO |
| התעלמות ממשקל | עומס יתר על השליח | כלילת משקל בחישוב המסלול |
| אין סוכן איסוף | הנתונים מתיישנים | הגדרת סוכן דרך Cron או Bitrix agents |
כיצד אנו הופכים משלוחים לאוטומטיים במפתח מלא
אנו מבצעים את מחזור העבודה המלא:
- יצירת מאפייני משתמש להזמנה
$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,https://www.google.com/maps/dir/DEPOT_LAT,DEPOT_LON/STOP1_LAT,STOP1_LON/STOP2_LAT,STOP2_LON/...,bl_courier_routes. - יישום גיאוקידינג AJAX דרך Yandex או Google.
- הגדרת סוכן לאיסוף נקודות וקריאה ל-API של האופטימיזציה.
- יצירת טבלת
LATלאחסון מסלולים. - יצירת קישורי מפה ושליחתם לשליחים.
- הדרכת מתאמים ושליחים.
- מתן קוד מקור ותיעוד לשינויים.
הלקוחות שלנו חוסכים בממוצע 270–390 דולר בחודש על דלק ומשכורות מתאמים. מומחים מוסמכים, קוד שקוף, תמיכה לאחר המסירה. צרו קשר לבדיקת מערכת המשלוחים—נעריך תקציב ולוחות זמנים תוך יום אחד. הזמינו הגדרה במפתח מלא וקבלו ייעוץ למשימה שלכם.







