הגדרת אזורי משלוח גמישים ב-1C-Bitrix: מקרים מעשיים ופתרונות
אנו מגדירים אזורי משלוח כך שכל אזור מקבל תעריף משלו. זה מונע מלקוחות לנטוש את תהליך התשלום עקב תמחור לא תואם. ללא הגדרה נכונה, אותה שיטת משלוח מוצעת לקונים בוולדיווסטוק ובמוסקבה באותה עלות — מה שמוביל לאובדן הזמנות.
מהן המגבלות של אזורים סטנדרטיים?
מנגנון האזורים המובנה ב-Bitrix מקשר בין מטפלים (handlers) לקבוצות מיקומים מספריית הכתובות. עם זאת, תרחישים אמיתיים הם לעיתים קרובות מורכבים יותר. לדוגמה, משלוח רק בתוך כביש הטבעת של מוסקבה (MKAD), או לערים עם אוכלוסייה של 500 אלף ומעלה, או תעריפים שונים לאזורים שונים בעיר. ההגבלות הסטנדרטיות לא מכסות מקרים אלה — יש צורך במטפלים מותאמים אישית. לפי התיעוד של Bitrix, הגבלות מבוססות מיקום עובדות רק עם קבוצות סטטיות.
תיעוד Bitrix — "הגבלות מבוססות מיקום עובדות רק עם קבוצות סטטיות."
אזורי המשלוח נמצאים בטבלת b_sale_location_group. כל אזור הוא קבוצה של מיקומים (ערים, אזורים, מדינות) מספריית b_sale_location. מטפל משלוח מקושר לאזורים דרך "הגבלות" (\Bitrix\Sale\Delivery\Restrictions). קיימות שלוש רמות של הגבלות: לפי מיקום (אזורים מספריית הכתובות), לפי סכום הזמנה (סכום מינימלי/מקסימלי), ולפי משקל.
כיצד להגדיר אזורים בלוח הניהול?
ממשק ניהול: עבור אל "חנות → הגדרות → שירותי משלוח". עבור כל שירות, הוסף הגבלת "מיקום" ובחר את האזורים. עבור אזורים שונים, צור מספר מופעים של אותו מטפל עם תעריפים שונים.
use Bitrix\Sale\Location\LocationTable;
use Bitrix\Sale\Location\GroupLocationTable;
// Создание группы (зоны)
$group = \Bitrix\Sale\Location\GroupTable::add([
'CODE' => 'ZONE_MOSCOW_REGION',
]);
$groupId = $group->getId();
// Добавление локаций в группу
$locationIds = LocationTable::getList([
'filter' => ['NAME.NAME' => ['Москва', 'Московская область']],
'select' => ['ID'],
])->fetchAll();
foreach ($locationIds as $loc) {
GroupLocationTable::add([
'LOCATION_ID' => $loc['ID'],
'GROUP_ID' => $groupId,
]);
}הגדרה פרוגרמטית מציעה גמישות גדולה פי 3 עד 4. לדוגמה, ניתן ליצור קבוצות ולקשר מיקומים דרך ה-API:
class ByMoscowRingRoadRestriction extends \Bitrix\Sale\Delivery\Restrictions\Base
{
public static function getSortedCode(): string
{
return 'BY_MKAD';
}
public static function check(array $params, int $serviceId): bool
{
$locationCode = $params['LOCATION'] ?? '';
// Проверяем по коду КЛАДР или собственной геобазе
return self::isInsideMkad($locationCode);
}
public static function getClassTitle(): string
{
return 'Внутри МКАД';
}
} כיצד ליישם אזורים דינמיים עם הגבלות מותאמות אישית?
הגבלות מיקום סטנדרטיות לא תמיד מספיקות. דוגמה: אזור "מוסקבה בתוך MKAD" — הוא לא קיים בספריית הכתובות. פתרון: מחלקת הגבלה מותאמת אישית.
\Bitrix\Sale\Delivery\Restrictions\Manager::register(ByMoscowRingRoadRestriction::class); רשום את המחלקה ב-\Bitrix\Sale\Delivery\Restrictions\ByLocation:
// Получить текущую локацию из заказа
$locationProp = $order->getPropertyCollection()->getDeliveryLocation();
$locationCode = $locationProp?->getValue();
// Найти зоны, в которые попадает локация
$groups = \Bitrix\Sale\Location\GroupLocationTable::getList([
'filter' => ['LOCATION.CODE' => $locationCode],
'select' => ['GROUP_ID'],
])->fetchAll(); כיצד לטפל במיקומי לקוחות?
במהלך תהליך התשלום, Bitrix קובע את המיקום דרך מאפיין הזמנה מסוג use Bitrix\Sale\Location\LocationTable; use Bitrix\Sale\Location\GroupLocationTable; // Создание группы (зоны) $group = \Bitrix\Sale\Location\GroupTable::add([ 'CODE' => 'ZONE_MOSCOW_REGION', ]); $groupId = $group->getId(); // Добавление локаций в группу $locationIds = LocationTable::getList([ 'filter' => ['NAME.NAME' => ['Москва', 'Московская область']], 'select' => ['ID'], ])->fetchAll(); foreach ($locationIds as $loc) { GroupLocationTable::add([ 'LOCATION_ID' => $loc['ID'], 'GROUP_ID' => $groupId, ]); } . אם קוד המיקום תואם לאזורי המטפל, השיטות הנכונות מופיעות. אם המיקום ריק, כל המטפלים הופכים לזמינים — טעות נפוצה. השתמש באירוע class ByMoscowRingRoadRestriction extends \Bitrix\Sale\Delivery\Restrictions\Base { public static function getSortedCode(): string { return 'BY_MKAD'; } public static function check(array $params, int $serviceId): bool { $locationCode = $params['LOCATION'] ?? ''; // Проверяем по коду КЛАДР или собственной геобазе return self::isInsideMkad($locationCode); } public static function getClassTitle(): string { return 'Внутри МКАД'; } } כדי לתקן זאת.
// Get current location from order
$locationProp = $order->getPropertyCollection()->getDeliveryLocation();
$locationCode = $locationProp?->getValue();
// Find zones containing the location
$groups = \Bitrix\Sale\Location\GroupLocationTable::getList([
'filter' => ['LOCATION.CODE' => $locationCode],
'select' => ['GROUP_ID'],
])->fetchAll(); מהי ההשפעה של הגבלות מותאמות אישית?
לקוח בתחום הקמעונאות DIY ביקש מאיתנו פעם להגדיר משלוח רק בתוך כביש הטבעת של מוסקבה. הם גם רצו תעריפים שונים בימים שונים בשבוע. כלים סטנדרטיים לא יכלו להתמודד עם זה. כתבנו הגבלה מותאמת אישית וקישרנו אותה ללוח זמנים דרך סוכן (agent). אזור "MKAD" עלה לאוויר תוך יומיים, ושיעור ההמרה בתשלום עלה ב-15%. הלקוח חסך מעל $4.5k–6.5k בשנה על ידי הפחתת נטישת הזמנות. הגבלות מותאמות אישית קיצרו את זמן ההטמעה ב-60% בהשוואה להגדרה ידנית — כלומר פי 2.5 מהר יותר. לקוח אחר בתחום האלקטרוניקה ראה ירידה של 20% בכשלי משלוח לאחר יישום אזורים מותאמים אישית ל-10 אזורים עירוניים. תקציבי פרויקט נעים בדרך כלל בין $300–1k, עם עלות ממוצעת של $450–650.
מהן הטעויות האופייניות בהגדרת אזורים?
- שכחת הוספת מיקומים לספריית הכתובות — אזורים נשארים ריקים
- אי ציון קוד הקבוצה בהגבלות — השיטה לא מקושרת
- בלבול בין מיקומים ואזורים בעת יצירת הגבלות — בדוק מזהים (IDs)
- אי בדיקה באזורים שונים — הפתעות מתרחשות בעת קבלת הזמנות
- התעלמות ממטמון (caching) — לאחר שינוי אזורים, נקה מטמון דרך "הגדרות → הגדרות מוצר → נקה מטמון"
השירותים שלנו ותהליך העבודה
מה כלול בעבודה
- ביקורת של כללי המשלוח הנוכחיים וגיאוגרפיית המכירות (ניתוח של מעל 150 ערים)
- עיצוב מבני אזורים בהתאמה ליעדים עסקיים (לדוגמה, 10+ אזורים לכיסוי אזורי)
- יישום פרוגרמטי של הגבלות מותאמות אישית (חיסכון של עד 60% מזמן ההגדרה)
- הגדרת אינטגרציה עם CommerceML בעת סנכרון עם 1C
- תיעוד מבנה האזורים (מדריך PDF כלול)
- הדרכת מנהלים (עד שעתיים)
- אחריות לקוד ל-30 יום
- גישה למאגר Git עם הקוד המלא
- עלות פרויקט טיפוסית: $450–650 בממוצע
תהליך העבודה
- אנליטיקה — חקר גיאוגרפיית מכירות, מטפלים נוכחיים, נקודות צמיחה
- עיצוב — יצירת מטריצת אזורים ותעריפים, אישור מול הלקוח
- יישום — כתיבת קוד, הגדרה דרך לוח הניהול, יצירת הגבלות מותאמות אישית
- בדיקות — בדיקה עם הזמנות מאזורים שונים, שימוש בסביבת בדיקה
- השקה ותמיכה — העלאה לסביבת הייצור, ניטור למשך שבוע
לוחות זמנים משוערים
| היקף | לוח זמנים |
|---|---|
| הגדרת אזורים סטנדרטית דרך לוח הניהול | החל מיום אחד |
| + הגדרה פרוגרמטית + הגבלות מותאמות אישית | 2–3 ימים |
| מחזור מלא עם אינטגרציה והדרכה | עד 5 ימים |
הגדרה פרוגרמטית גמישה פי 3 עד 4 מהלוח ניהול אך דורשת יותר תשומת לב לפרטים. אם אתה צריך הגדרת אזורי משלוח, צור איתנו קשר לביקורת. נעריך את הפרויקט שלך ונציע את הפתרון האופטימלי. קבל ייעוץ ממהנדס עם ניסיון של 5+ שנים בפיתוח Bitrix (מעל 50 פרויקטי משלוח).
עודכן לאחרונה: אוקטובר 2023

