אופטימיזציה של מסלולי משלוח שליחים ב-1C-Bitrix

תארו לעצמכם: שירות שליחים מטפל ב-20 הזמנות ביום. המתאם מבלה חצי שעה בתכנון המסלול, אבל חצי מהלקוחות עדיין לא מרוצים מהעיכובים. מה הבעיה? בדרך כלל זה תכנון ידני וחוסר בנתונים מדויקים על תנועה וזמני הגעה. שילוב של 1C-Bitrix עם rout
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
אופטימיזציה של מסלולי משלוח שליחים ב-1C-Bitrix
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1457
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    879
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1162

תארו לעצמכם: שירות שליחויות מטפל ב-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

כיצד אנו הופכים משלוחים לאוטומטיים במפתח מלא

אנו מבצעים את מחזור העבודה המלא:

  1. יצירת מאפייני משתמש להזמנה $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.
  2. יישום גיאוקידינג AJAX דרך Yandex או Google.
  3. הגדרת סוכן לאיסוף נקודות וקריאה ל-API של האופטימיזציה.
  4. יצירת טבלת LAT לאחסון מסלולים.
  5. יצירת קישורי מפה ושליחתם לשליחים.
  6. הדרכת מתאמים ושליחים.
  7. מתן קוד מקור ותיעוד לשינויים.

הלקוחות שלנו חוסכים בממוצע 270–390 דולר בחודש על דלק ומשכורות מתאמים. מומחים מוסמכים, קוד שקוף, תמיכה לאחר המסירה. צרו קשר לבדיקת מערכת המשלוחים—נעריך תקציב ולוחות זמנים תוך יום אחד. הזמינו הגדרה במפתח מלא וקבלו ייעוץ למשימה שלכם.