כאשר חנות מקוונת צומחת מעבר למחסן יחיד — פותחת מרכזי הפצה או מחברת חנויות קמעונאיות — עולה האתגר: להציג ללקוח מלאי אמיתי ולבחור אוטומטית את מחסן המשלוח?
ניהול מלאי סטנדרטי ב-1C-Bitrix עם מחסן אחד אינו מכסה תרחישים אלה: אתה מסתכן במכירת מוצר שאינו במחסן הנדרש, או בשליחת הזמנה למרחק 500 ק"מ כאשר יש מחסן בקרבת מקום. מצב טיפוסי: חנות אלקטרוניקה עם 5 מחסנים בערים שונות. מנהלים בודקים מלאי ידנית ומודיעים ללקוח מאיזה מחסן נשלחת ההזמנה. התוצאה — 30% מההזמנות מבוטלות עקב אי-התאמה בין זמן המשלוח המובטח לזה בפועל. אוטומציה של ריבוי מחסנים פותרת זאת: הלקוח רואה מלאי מדויק לאזור שלו, והמערכת בוחרת אוטומטית את המחסן הקרוב ביותר.
אנחנו צוות עם ניסיון של 10+ שנים בניהול מלאי רב-מחסני, שהקים מערכות רב-מחסניות ל-200+ חנויות — מקטלוגים של 50,000 מוצרים ועד רשתות עם 15 מחסנים. המומחים המוסמכים שלנו מבטיחים אינטגרציה אמינה. המודול catalog כולל ריבוי מחסנים החל מגרסת 'Small Business'. להלן נסקור הגדרה, אתגרים טיפוסיים והתאמות אישיות עם מספרים אמיתיים ודוגמאות קוד. אם אתה נתקל בבעיות דומות, קבל ייעוץ — ננתח את התצורה שלך ונציע פתרון.
הפעלת ריבוי מחסנים
נתיב: Магазин → Каталог → Настройки → вкладка "Склад".
- שימוש במחסנים — הפעל
- צור לפחות שני מחסנים (
Магазин → Каталог → Склады)
לאחר ההפעלה, המלאי נשמר בטבלת b_catalog_store_product עם פילוח לפי STORE_ID. הטבלה מכילה שדות: PRODUCT_ID, STORE_ID, AMOUNT (מלאי), QUANTITY_RESERVED. עבור קטלוגים גדולים (50,000+ מוצרים), חשוב ליצור אינדקסים על STORE_ID ו-PRODUCT_ID — אינדקסים ברירת מחדל לא תמיד אופטימליים.
הגדרת מחסני משלוח בהזמנות
בהגדרות שירות המשלוח (Магазин → Настройки → Службы доставки → [редактировать]), ציין את המחסן שממנו מתבצע המשלוח. זה מאפשר לשירותי משלוח שונים לעבוד עם מחסנים שונים. לניהול גמיש יותר — כללי בחירת מחסן מוגדרים דרך מטפל האירועים OnSaleOrderBeforeSaved:
AddEventHandler('sale', 'OnSaleOrderBeforeSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
// логика выбора склада отгрузки на основе состава заказа, региона и т.д.
});בפרויקט אחד, יישמנו בחירת מחסן לפי האזור הקרוב ללקוח: המטפל ניתח את מיקוד המשלוח והציב את המחסן הנדרש. זה קיצר את זמני המשלוח ב-30%.
כיצד להציג מלאי מחסן בחנות המקוונת?
ברכיב AddEventHandler('sale', 'OnSaleOrderBeforeSaved', function(\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); // логика выбора склада отгрузки на основе состава заказа, региона и т.д. }); (catalog.element), הפרמטר bitrix:catalog.element — הפעל כדי להציג מלאי מחסן. תבנית הרכיב מקבלת את המשתנה USE_STORE_QUANTITY — מערך של מלאי לפי מחסן. לפלט מותאם אישית, השתמש ב:
$storeData = \Bitrix\Catalog\StoreProductTable::getList([
'filter' => ['=PRODUCT_ID' => $productId],
'select' => ['STORE_ID', 'AMOUNT', 'STORE_TITLE' => 'STORE.TITLE'],
'runtime' => [
new \Bitrix\Main\ORM\Fields\Relations\Reference(
'STORE',
\Bitrix\Catalog\StoreTable::class,
\Bitrix\Main\ORM\Query\Join::on('this.STORE_ID', 'ref.ID')
)
]
]);אם יש לך 10+ מחסנים, שקול להוסיף מטמון מתויג לשאילתה זו — אחרת כל צפייה במוצר תפגע במסד הנתונים. מידע נוסף על מטמון ניתן לקרוא בתיעוד 1C-Bitrix.
מגבלות של הזמנה סטנדרטית
הזמנות ב-$arResult['STORE_QUANTITY'] מכילות את השדה $storeData = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['=PRODUCT_ID' => $productId], 'select' => ['STORE_ID', 'AMOUNT', 'STORE_TITLE' => 'STORE.TITLE'], 'runtime' => [ new \Bitrix\Main\ORM\Fields\Relations\Reference( 'STORE', \Bitrix\Catalog\StoreTable::class, \Bitrix\Main\ORM\Query\Join::on('this.STORE_ID', 'ref.ID') ) ] ]); — ההזמנה מקושרת למחסן ספציפי. במהלך הזמנה אוטומטית, Bitrix בוחר מחסן לפי עדיפות (השדה b_sale_order_reserve ב-STORE_ID). אם במחסן הראשון אין כמות מספקת, ההזמנה כברירת מחדל אינה מפצלת את ההזמנה בין מספר מחסנים — זה דורש לוגיקה מותאמת אישית. הנה השוואה בין הגישות:
| קריטריון | מנגנון סטנדרטי | הזמנה מותאמת אישית |
|---|---|---|
| בחירת מחסן | לפי עדיפות יחידה | לפי מערכת כללים (אזור, מלאי) |
| פיצול בין מספר מחסנים | לא | כן, דרך סוכן או אירוע |
| מורכבות יישום | אפס | בינונית (2-4 שעות עבודה) |
| גמישות | נמוכה | גבוהה |
אנחנו משתמשים לרוב בגישה המותאמת אישית — היא חוסכת עד 40% בלוגיסטיקה על ידי הזמנה מהמחסן הקרוב. הזמנה מותאמת אישית יעילה בערך פי 2 מהסטנדרטית במהירות עיבוד ההזמנות.
דוגמה להזמנה מותאמת אישית:
AddEventHandler('sale', 'OnSaleReserveQuantity', function($orderId, $basketId, $reserveInfo) {
// Ваш код распределения по складам
});בפרויקט אחד, עיבדנו 500 הזמנות ביום דרך המטפל הזה — המערכת פעלה ללא תקלות במשך שנה.
סנכרון מלאי עם 1C
במהלך החלפה עם 1C דרך CommerceML 2, המלאי מועבר בקטע SORT של קובץ ההחלפה. דרישה קריטית: ה-XML_ID של המחסנים ב-Bitrix חייב להתאים למזהי המחסנים ב-1C. המיפוי מוגדר ב-b_catalog_store. אם המזהים שונים, ההחלפה תייצר שגיאות. מידע נוסף על הפורמט ניתן לקרוא בתיעוד CommerceML.
טעות טיפוסית: ב-1C המחסנים נקראים ברוסית, בעוד ב-Bitrix הם בלטינית, מה שגורם למלאי "לרדת לאפס". אנחנו תמיד בודקים את המיפוי בהחלפת ניסיון.
השוואת גרסאות לריבוי מחסנים
| גרסה | ריבוי מחסנים | הזמנה לפי מחסן | אינטגרציית 1C |
|---|---|---|---|
| Start | לא | לא | לא |
| Small Business | כן (בסיסי) | כן (מחסן יחיד) | כן |
| Business | כן (מורחב) | כן (עם התאמה אישית) | כן |
| Enterprise | כן (מלא) | כן (מותאם אישית) | כן |
מה כלול בעבודת הגדרת ריבוי המחסנים?
- ביקורת התצורה הנוכחית וזיהוי צווארי בקבוק
- הפעלה והגדרה של ריבוי מחסנים בלוח הניהול
- יצירת מחסנים וקישורם לשירותי משלוח
- כתיבת מטפל בחירת מחסן לתהליך העסקי שלך
- שינוי תבניות רכיב להצגת מלאי מחסן
- לוגיקת הזמנה מותאמת אישית (אם נדרש פיצול)
- אינטגרציה עם 1C: הגדרת מיפוי והחלפת ניסיון
- בדיקת כל התרחישים: הזמנות, החזרות, חישובי מלאי מחדש
- מתן תיעוד, פרטי גישה והדרכה לצוות שלך
- תמיכה לאחר ההגדרה למשך 30 יום
לוחות זמנים ועלויות
הגדרה בסיסית עם שניים או שלושה מחסנים, כללי משלוח ותצוגת חנות — 4–8 שעות, מ-$500. אם נדרשת לוגיקת בחירת מחסן מותאמת אישית ואינטגרציית 1C — 1–2 ימי עבודה, מ-$1,200. מקרים מורכבים (פיצול הזמנות, בחירה דינמית לפי אזור) עשויים לדרוש 3–4 ימים, מ-$2,500. העלות המדויקת מחושבת באופן אישי לאחר בחינת התצורה שלך. בקש ייעוץ להגדרת ריבוי מחסנים — ננתח את החנות שלך ונציע פתרון אופטימלי. צור קשר להערכת פרויקט.

