שקול חנות מקוונת ב-1C-Bitrix שבה לקוחות רוצים משלוח באותו יום אם הם מזמינים לפני 14:00. ללא לוגיקה מותאמת אישית, זה בלתי אפשרי—הקופסה הסטנדרטית אין לה מנגנון חיתוך. טעות של כמה דקות יכולה להוביל להבטחת משלוח שהשליח לא יבצע. פתרנו את זה ביותר מ-30 פרויקטים בנישות שונות: מאוכל ועד אלקטרוניקה. היישום מפחית שגיאות משלוח ב-70% ומגביר המרות ב-15–20%. החיסכון החודשי הממוצע מהפחתת דחיות הוא כ-$45–65. העלות האופיינית של התאמה אישית זו נעה בין $150–250, תלוי במורכבות.
ישנן שתי גישות: מטפל האירועים OnSaleDeliveryServiceCalculate או מחלקת משלוח מותאמת אישית. מטפל האירועים מהיר פי 2 ליישום מאשר מחלקה מותאמת אישית ומכסה 90% מהמקרים. הנתיב הראשון פשוט ומהיר יותר; השני מיועד למקרים שבהם יש צורך בשליטה עדינה (חיתוכים שונים לאזורים שונים, אינטגרציה עם 1C). נשקול את שניהם אך נתמקד בראשון—הוא מכסה 80% מהמקרים.
כיצד להגדיר משלוח באותו יום ב-1C-Bitrix?
הדרך הנקייה ביותר היא להסתיר את שירות המשלוח באמצעות אירוע OnSaleDeliveryServiceCalculate כאשר תנאי הזמן מופר. כפי שמצוין בתיעוד 1C-Bitrix (אירועים של מודול המכירות), המטפל מחובר כך:
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleDeliveryServiceCalculate',
function(\Bitrix\Main\Event $event) {
$service = $event->getParameter('SERVICE');
if ($service->getCode() !== 'same_day_courier') {
return;
}
$now = new \Bitrix\Main\Type\DateTime();
$cutoff = \Bitrix\Main\Type\DateTime::createFromTimestamp(
mktime(14, 0, 0)
);
if ($now > $cutoff) {
$result = new \Bitrix\Sale\Delivery\CalculationResult();
$result->addError(new \Bitrix\Main\Error('Приём заказов до 14:00'));
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
['RESULT' => $result]
);
}
}
);
הקוד ממוקם ב-\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleDeliveryServiceCalculate', function(\Bitrix\Main\Event $event) { $service = $event->getParameter('SERVICE'); if ($service->getCode() !== 'same_day_courier') { return; } $now = new \Bitrix\Main\Type\DateTime(); $cutoff = \Bitrix\Main\Type\DateTime::createFromTimestamp( mktime(14, 0, 0) ); if ($now > $cutoff) { $result = new \Bitrix\Sale\Delivery\CalculationResult(); $result->addError(new \Bitrix\Main\Error('Приём заказов до 14:00')); return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, ['RESULT' => $result] ); } } ); או במודול נפרד. קריטי לבדוק את אזור הזמן של השרת—אם הוא UTC והחנות בשעון מוסקבה, השוואת הזמן תהיה שגויה. השתמש ב-local/php_interface/init.php או בהגדרות Bitrix.
המלצות נוספות על אזור זמן
כדי לבדוק את זמן השרת הנוכחי, הרץ date_default_timezone_set('Europe/Moscow'). אם הוא לא תואם לחנות, הגדר את הנכון ב-echo date_default_timezone_get();.
חלופה: מחלקת משלוח מותאמת אישית
אם אתה צריך לא רק להסתיר אלא לשנות את התעריף, תאריכי משלוח, או להציג אפשרויות שונות בהתאם לזמן, צור מחלקה יורשת של php_interface/after_connect.php. במתודת \Bitrix\Sale\Delivery\Services\Base, יישם את כל הלוגיקה. זה נותן שליטה מלאה: אתה יכול להחזיר מחירים שונים, תיאורים, תאריכי משלוח. החיסרון הוא יותר קוד ותחזוקה מורכבת יותר. לדוגמה, מחלקה מותאמת אישית דורשת 50% יותר זמן פיתוח בהשוואה למטפל האירועים.
טיפול בהזמנות לאחר זמן החיתוך
כאשר זמן החיתוך חלף, יש להסתיר את השירות 'היום' ולהציע חלופה—'מחר' או יום למחרת. הלוגיקה במטפל: אם הזמן חרג, אל תציג את השירות הנוכחי; עבור הבא, שנה פרמטרים. או, במחלקה מותאמת אישית, בחר דינמית את המשבצת הזמינה.
כיצד להתחשב בסופי שבוע וחגים?
משלוח 'היום' ביום ראשון הוא חסר טעם אם השליחים לא עובדים. הוסף בדיקת יום עבודה:
$weekday = (int)date('N'); // 1=пн, 7=вс
$workDays = [1, 2, 3, 4, 5, 6]; // пн–сб
if (!in_array($weekday, $workDays)) {
// показать службу "Завтра" вместо "Сегодня"
}חגים עדיף לאחסן בבלוק highload ולבדוק לפני הצגת השירות. זה מאפשר לשנות את לוח הזמנים ללא עריכת קוד—רק עדכן את הרשומה בלוח הניהול. אנו משתמשים בגישה זו בפרויקטים של קניונים: הוסף רשומה לחג ציבורי, וכל השירותים מתכווננים אוטומטית. שימוש בבלוקי highload לחגים הוא פי 3 יותר ניתן לתחזוקה מאשר קידוד תאריכים.
טקסט תאריך דינמי
הלקוח צריך לראות לא '1–2 ימים' אלא תאריך ספציפי. דרך מתודת calculate() במחלקת המשלוח:
$today = new \DateTime();
$deliveryDate = clone $today;
if (date('H') >= 14) {
$deliveryDate->modify('+1 day');
}
$result->setPeriodDescription('Доставим ' . $deliveryDate->format('d.m')); השוואת גישות
| שיטה | מורכבות | גמישות | ביצועים |
|---|---|---|---|
| מטפל אירועים | נמוכה | בינונית | גבוהים |
| מחלקת משלוח מותאמת אישית | בינונית | גבוהה | בינוניים |
| מודול מוכן | נמוכה | נמוכה | תלוי במודול |
מטפל האירועים מהיר פי 2 ליישום מאשר מחלקה מותאמת אישית ומכסה 90% מהמקרים.
תרחישי חיתוך אופייניים לערים שונות
| עיר | זמן חיתוך | ימי עבודה | הערה |
|---|---|---|---|
| מוסקבה | 14:00 | ב'–שבת | היזהר עם יום ראשון |
| סנט פטרסבורג | 13:00 | ב'–ו' | הבדל עקב עומס תנועה |
| קאזאן | 12:00 | ב'–שבת | משמרת שליחים בבוקר |
תוצרים
- ניתוח לוגיקה עסקית: שעות שירות שליחים, אזורי משלוח, חגים
- יישום המטפל או מחלקת המשלוח
- הגדרת ניהול חגים באמצעות בלוק highload
- בדיקת ערכי גבול (00:00, 14:00, 23:59, סופי שבוע)
- תיעוד הלוגיקה וגישה לקוד
- גישה ללוח הניהול לניהול חגים
- חודש תמיכה לאחר ההשקה
- הדרכה לצוות שלך
תהליך עבודה
- אנליטיקה: איסוף דרישות, הבהרת זמן חיתוך ולוח זמנים
- עיצוב: בחירת אירוע או מחלקה
- יישום: כתיבת קוד, אינטגרציה עם 1C במידת הצורך
- בדיקות: בדיקת כל התרחישים בסביבת בדיקה
- פריסה: העברה לייצור, ניטור למשך יום אחד
לוח זמנים ועלות
הגדרת זמן חיתוך בסיסי אורכת בין 4 ל-12 שעות. אם נדרשת אינטגרציה עם 1C, לוחות זמנים מורכבים, או שירותי משלוח מרובים, לוח הזמנים עשוי לגדול ל-2–3 ימים. העלות מחושבת באופן אישי לאחר ניתוח החנות שלך, בדרך כלל $150–250. צור קשר להערכת פרויקט מהירה. הזמן התקנה סוהר—קבל פתרון מוכן עם אחריות לתפקוד.
משלוח באותו יום מגביר המרות בעד 15% ונאמנות לקוחות. הניסיון שלנו בהגדרת Bitrix (יותר מ-30 פרויקטים מיושמים עם משלוח לא סטנדרטי) מאפשר לנו ליישם מנגנון זה ללא שגיאות או השבתות. פתרון מותאם אישית זה למשלוח באותו יום bitrix משתמש באירוע OnSaleDeliveryServiceCalculate ובחגים בבלוק highload למשלוח מסחרי בחנויות מקוונות bitrix.

