הגדרת Click & Collect ב-1C-Bitrix: הזמנה ואיסוף עצמי

בעיה אופיינית: קונה בוחר איסוף עצמי מהחנות, מגיע לחנות, אבל הפריט לא על המדף. הסיבה — אין התאמה קפדנית למחסן ואין בדיקת מלאי אמיתית לפני ההזמנה. אנו מונעים מצבים כאלה באמצעות הגדרת Click & Collect נכונה. המומחיות שלנו: מעל 50 פרויקטים של Bitrix
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
הגדרת Click & Collect ב-1C-Bitrix: הזמנה ואיסוף עצמי
פשוט
~1 יום

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

שאלות נפוצות

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

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1458
  • 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

בעיה אופיינית: קונה בוחר איסוף מהחנות, מגיע לחנות, אבל הפריט לא על המדף. הסיבה — אין התקשרות קפדנית למחסן ואין בדיקת מלאי אמיתית לפני ההזמנה. אנו מבטלים מצבים כאלה באמצעות הגדרת Click & Collect נכונה. המומחיות שלנו: מעל 50 פרויקטים של Bitrix, מהנדסים מוסמכים עם תוצאות מובטחות.

Click & Collect (הזמנה מקוונת עם איסוף מהחנות) הוא אחד התרחישים הפופולריים ביותר בקמעונאות, במיוחד אחרי המגפה. אבל ללא טיפול נכון במלאי ובהזמנות, הוא מביא יותר צרות מתועלת. הקונה בוחר נקודה שבה הפריט לא זמין, או שני אנשים מזמינים את היחידה האחרונה בו-זמנית — ומישהו יוצא מאוכזב. יישום נכון על 1C-Bitrix פותר את הבעיות האלה ברמה הארכיטקטונית: התקשרות קפדנית של נקודות למחסנים, בדיקת מלאי בעגלה לפני ההזמנה, והזמנה בעת ביצוע ההזמנה. להלן איך זה עובד בפועל עם דוגמאות קוד.

למה חשוב לקשר נקודות איסוף למחסנים?

כל נקודת איסוף חייבת להיות מקושרת בקפדנות למחסן ספציפי דרך XML_ID. רק כך המערכת יודעת איזה מלאי להציג. ללא קישור זה, האיסוף הופך להגרלה. אנו משתמשים בטבלאות Bitrix סטנדרטיות: b_catalog_store ו-b_catalog_store_product. דוגמת שאילתה לבדיקת מלאי:

SELECT s.ID, s.TITLE, s.ADDRESS, sp.AMOUNT FROM b_catalog_store s JOIN b_catalog_store_product sp ON sp.STORE_ID = s.ID WHERE sp.PRODUCT_ID = ? AND s.ACTIVE = 'Y' AND sp.AMOUNT > 0 ORDER BY s.SORT ASC; 

תיעוד 1C-Bitrix: ניהול מחסנים

איך להוסיף את שירות המשלוחים "איסוף"

בפאנל הניהול: SELECT s.ID, s.TITLE, s.ADDRESS, sp.AMOUNT FROM b_catalog_store s JOIN b_catalog_store_product sp ON sp.STORE_ID = s.ID WHERE sp.PRODUCT_ID = ? AND s.ACTIVE = 'Y' AND sp.AMOUNT > 0 ORDER BY s.SORT ASC; . ציינו את השם, הפעילו אותו, הגדירו את העלות (בדרך כלל אפס). יצירה פרוגרמטית דרך API נותנת יותר גמישות — אפשר להוסיף חוקים מותנים ואינטגרציה עם 1C:

\Bitrix\Main\Loader::includeModule('sale'); $deliveryService = \Bitrix\Sale\Delivery\Services\Manager::getList([ 'filter' => ['CODE' => 'self_pickup'], ])->fetch(); if (!$deliveryService) { \Bitrix\Sale\Delivery\Services\Manager::add([ 'NAME' => 'Самовывоз из магазина', 'CODE' => 'self_pickup', 'ACTIVE' => 'Y', 'CLASS_NAME' => '\Bitrix\Sale\Delivery\Services\Base', 'CURRENCY' => 'RUB', 'PRICE' => 0, ]); } 

איך לבחור נקודת איסוף בעגלה?

בתבנית הרכיב Магазин → Доставка → Добавить службу доставки → Тип: Самовывоз, אנו מציגים רשימת נקודות עם בדיקת מלאי. דוגמה:

// Получаем активные склады с наличием товаров из корзины $basketItems = $order->getBasket(); $productIds = []; foreach ($basketItems as $item) { $productIds[] = $item->getProductId(); } $storesResult = \Bitrix\Catalog\StoreTable::getList([ 'filter' => ['ACTIVE' => 'Y'], 'select' => ['ID', 'TITLE', 'ADDRESS', 'GPS_N', 'GPS_S'], 'order' => ['SORT' => 'ASC'], ]); $availableStores = []; while ($store = $storesResult->fetch()) { $allAvailable = true; foreach ($productIds as $productId) { $stockResult = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['PRODUCT_ID' => $productId, 'STORE_ID' => $store['ID']], 'select' => ['AMOUNT'], ])->fetch(); if (!$stockResult || $stockResult['AMOUNT'] < $basketItems->getQuantityByProductId($productId)) { $allAvailable = false; break; } } if ($allAvailable) { $availableStores[] = $store; } } 

איך להגדיר הזמנה: הוראות שלב-אחר-שלב

ההזמנה היא שלב קריטי שקובע את האמינות של Click & Collect. יישום שגוי מוביל לפריטים אבודים ולעימותים עם קונים.

  1. צרו מאפיין הזמנה מותאם אישית \Bitrix\Main\Loader::includeModule('sale'); $deliveryService = \Bitrix\Sale\Delivery\Services\Manager::getList([ 'filter' => ['CODE' => 'self_pickup'], ])->fetch(); if (!$deliveryService) { \Bitrix\Sale\Delivery\Services\Manager::add([ 'NAME' => 'Самовывоз из магазина', 'CODE' => 'self_pickup', 'ACTIVE' => 'Y', 'CLASS_NAME' => '\Bitrix\Sale\Delivery\Services\Base', 'CURRENCY' => 'RUB', 'PRICE' => 0, ]); } דרך sale.order.ajax. סוג — רשימה או מחרוזת עם קישור לטבלת המחסנים.
  2. הוסיפו מטפל באירועים עבור // Получаем активные склады с наличием товаров из корзины $basketItems = $order->getBasket(); $productIds = []; foreach ($basketItems as $item) { $productIds[] = $item->getProductId(); } $storesResult = \Bitrix\Catalog\StoreTable::getList([ 'filter' => ['ACTIVE' => 'Y'], 'select' => ['ID', 'TITLE', 'ADDRESS', 'GPS_N', 'GPS_S'], 'order' => ['SORT' => 'ASC'], ]); $availableStores = []; while ($store = $storesResult->fetch()) { $allAvailable = true; foreach ($productIds as $productId) { $stockResult = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['PRODUCT_ID' => $productId, 'STORE_ID' => $store['ID']], 'select' => ['AMOUNT'], ])->fetch(); if (!$stockResult || $stockResult['AMOUNT'] < $basketItems->getQuantityByProductId($productId)) { $allAvailable = false; break; } } if ($allAvailable) { $availableStores[] = $store; } } . בתוכו, קבלו את מזהה המחסן שנבחר ממאפיין ההזמנה ובדקו מלאי שוב לפני ההזמנה.
  3. קראו להזמנה עבור כל פריט בעגלה דרך PICKUP_STORE_ID. ודאו שהפונקציה מחזירה הצלחה לפני שמירת ההזמנה.

דוגמת מטפל:

\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderBeforeSaved', function (\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $pickupStoreId = $order->getPropertyCollection() ->getItemByOrderPropertyCode('PICKUP_STORE_ID') ?->getValue(); if (!$pickupStoreId) return; foreach ($order->getBasket() as $basketItem) { \Bitrix\Catalog\StoreProductTable::reserveProduct( $basketItem->getProductId(), (int)$pickupStoreId, $basketItem->getQuantity(), $order->getId() ); } } ); 
פרטי פעולת המטפל המטפל מופעל לפני שמירת ההזמנה — ההזמנה מתבצעת אטומית. אם ההזמנה נכשלת (לדוגמה, הפריט לא במלאי), ההזמנה לא נשמרת והמשתמש רואה שגיאה. זה מונע מכירות כפולות.

הודעות וסטטוסי הזמנה לאיסוף

לאחר בחירת הנקודה והזמנת הפריט, עלינו להגדיר הודעות לקונה. כשההזמנה עוברת לסטטוס "מוכן לאיסוף" (בדרך כלל אחרי עיבוד ב-1C), המערכת שולחת אימייל ו-SMS למספר מהפרופיל: כתובת החנות, שעות פעילות, מה להביא. ללקוחות קבועים, אנו ממליצים על חשבון אישי עם מעקב סטטוס בזמן אמת. יישום דרך אירוע Магазин → Настройки → Свойства заказа ותבניות אימייל. הניסיון שלנו מראה שהודעות נכונות מפחיתות אי-הגעה ב-20–30%.

מה כלול בעבודה?

שלב משך תוצאה
אנליטיקה 0.5 יום תוכנית מחסנים, רשימת נקודות
הגדרת שירות משלוחים יום אחד שירות איסוף מוכן
פיתוח בחירת נקודה 1–2 ימים הצגת נקודות עם מלאי בעגלה
הזמנה יום אחד מטפל OnSaleOrderBeforeSaved
הודעות וסטטוסים יום אחד אימייל ו-SMS כשמוכן לאיסוף
אינטגרציה עם 1C (אופציונלי) 2–3 ימים החלפת מלאי דרך CommerceML
בדיקות ותיעוד יום אחד הוראות למנהלים

מפתח מלא: מ-7 ימי עסקים. אחריות ל-6 חודשים על תיקונים. תעודת 1C-Bitrix.

השוואה: מנגנון מובנה מול פתרון מותאם אישית

פרמטר איסוף מובנה פתרון מותאם אישית עם HL-blocks
גמישות לוגיקה קבועה חופש מלא
מהירות יישום 1–2 ימים 3–5 ימים
סנכרון עם 1C דרך מחסנים כל ERP

פתרון מותאם אישית עולה על המובנה פי 2–3 בגמישות, אבל דורש יותר זמן ומשאבים.

כדי לקבל הערכת עלות וזמנים לפרויקט שלכם, צרו קשר. בקשו ייעוץ על הגדרת Click & Collect.

מידע נוסף: תיעוד שירותי משלוחים