לאחר החלפת נתונים בין 1C ל-Bitrix, המלאי באתר מציג את הכמות הכוללת, למרות שב-1C מתנהל רישום מלאי נפרד לפי מחסנים. קונה מרוסטוב-על-דון רואה פריט "במלאי" במחסן במוסקבה, מזמין אותו, ועלות המשלוח היא בין-עירונית — 5 ימים ו-7–10 דולר. נשמע מוכר? נתקלנו בזה עשרות פעמים. הגדרת החלפת מלאי רב-מחסני היא משימה שגרתית אך קריטית; בלעדיה, חנות מקוונת מפסידה כסף על לוגיסטיקה שגויה והחזרות.
אנחנו צוות של מהנדסים מוסמכים עם ניסיון של 10+ שנים ב-Bitrix. במהלך תקופה זו, יישמנו החלפת מלאי רב-מחסני ל-50+ פרויקטים — מרשתות אזוריות קטנות ועד קמעונאים פדרליים עם עשרות מחסנים. אנו מגדירים הכל: ממזהי XML ועד קישור אוטומטי של משלוח לפי אזור.
דרישות מוקדמות
לניהול מלאי רב-מחסני ב-Bitrix, נדרשת מהדורת "Small Business" ומעלה. ב-"Start," ניהול מחסנים אינו זמין — קיים רק מחסן וירטואלי אחד.
ב-1C, יש להפעיל רישום מלאי לפי מחסנים:
- UT 11:
Администрирование → Склад и доставка → Несколько складов: Да - UT 10:
Сервис → Настройка параметров учёта → Складской учёт → Вести учёт по складам
הגדרת מחסנים ומזהי XML
ב-1C, לכל מחסן יש מזהה ייחודי (GUID). ב-Bitrix, לכל מחסן יש שדה "קוד חיצוני (XML ID)." התאמת ערכים אלה מבטיחה חלוקת מלאי נכונה:
Каталог → Склады → [склад] → Внешний код (XML ID) = GUID של המחסן מ-1C
ניתן לקבל את ה-GUID של המחסן מ-1C בקונפיגורטור או באמצעות השאילתה ВЫБРАТЬ Ссылка.УникальныйИдентификатор ИЗ Справочник.Склады. ניתן גם לקחת אותו מקובץ ה-XML של ההחלפה בתג <ИдСклада>. לפי תקן CommerceML, המזהים חייבים להיות ייחודיים.
הצגת מלאי לפי מחסן בכרטיס המוצר
אם הקונה אמור לראות "במוסקבה: 5 יח', ביקטרינבורג: 12 יח'" — נדרש שינוי מותאם אישית של רכיב כרטיס המוצר. הנתונים נשלפים מ-\Bitrix\Catalog\StoreProductTable, המתואר בתיעוד הרשמי:
$storeRests = \Bitrix\Catalog\StoreProductTable::getList([
'filter' => ['=PRODUCT_ID' => $productId],
'select' => ['AMOUNT', 'STORE_ID', 'STORE.TITLE', 'STORE.ADDRESS'],
'order' => ['STORE.TITLE' => 'ASC'],
])->fetchAll();
foreach ($storeRests as $rest) {
if ($rest['AMOUNT'] > 0) {
echo $rest['STORE_TITLE'] . ': ' . $rest['AMOUNT'] . ' шт.';
}
} איך לקשר משלוח למחסן?
קישור "מחסן → אזור משלוח" פותר את השאלה מאיפה לשלוח. אם קונה מיקטרינבורג, הציעו משלוח מהמחסן ביקטרינבורג עם זמן קצר, לא ממוסקבה עם מעבר של 5 ימים.
יישום בשתי גרסאות:
- אוטומטית לפי אזור הקונה — כאשר האזור נקבע לפי IP או שהקונה בוחר עיר, המחסן המועדף נלקח מהספרייה "מחסן → אזורי שירות".
- דרך בחירת נקודת איסוף — כל נקודה = מחסן, הקונה בוחר במפורש היכן לאסוף.
האפשרות הראשונה נוחה יותר לחנויות מקוונות עם משלוח ארצי: הקונה לא צריך לחשוב, המערכת מקצה אוטומטית את המחסן הקרוב. השנייה מיועדת לרשתות עם איסוף עצמי, כאשר שקיפות חשובה. עם הגדרה נכונה, חברה חוסכת עד 4.5–6.5 אלף דולר בשנה על משלוחים שגויים.
למה יתרות המלאי לא מסונכרנות?
סיבה אופיינית היא מזהי XML לא תואמים. בדקו: ה-GUID ב-1C חייב להיות שווה בדיוק ל"קוד חיצוני (XML ID)" של המחסן ב-Bitrix. אפילו רווח נוסף או אותיות רישיות שוברות את הקישור. הסיבה השנייה בשכיחותה היא שרישום מלאי לפי מחסנים מושבת ב-1C (ראו דרישות מוקדמות). השלישית היא שגיאות בכללי החלפת CommerceML כאשר מלאי מיוצא ללא ציון מחסן.
איך להגדיר החלפת מלאי רב-מחסני: מדריך שלב-אחר-שלב
- בדקו את מהדורת Bitrix והפעילו רישום מלאי לפי מחסנים ב-1C.
- קבלו את מזהי ה-GUID של המחסנים מ-1C והגדירו אותם כ-XML ID של מחסני Bitrix.
- הגדירו קישור של מחסנים לאזורי משלוח (אוטומטית או דרך בחירת נקודת איסוף).
- בדקו את ההחלפה: צרו הזמנה עם אזורים שונים ובדקו יתרות מלאי.
דוחות מלאי רב-מחסניים
מנהלים זקוקים לעיתים קרובות לדוח סיכום: אילו פריטים זמינים רק במחסן אחד, אילו לא במלאי בשום מקום. שאילתה בסיסית:
SELECT e.ID, e.NAME, SUM(sp.AMOUNT) as total_amount, COUNT(DISTINCT sp.STORE_ID) as stores_count
FROM b_iblock_element e
LEFT JOIN b_catalog_store_product sp ON sp.PRODUCT_ID = e.ID
WHERE e.IBLOCK_ID = :iblock_id
GROUP BY e.ID, e.NAME
ORDER BY total_amount ASC;ניתן להשתמש בשאילתה זו בדוח "מלאי לפי מחסנים" על ידי יצירת HL-block או שילוב עם מערכות BI.
שגיאות אופייניות ופתרונותיהן
| שגיאה | פתרון |
|---|---|
| המלאי לא מופרד לפי מחסן | בדקו התאמה בין GUID ל-XML ID |
| המשלוח נקבע מהמחסן הלא נכון | הגדירו קישור מחסן-לאזור |
| המלאי לפי מחסן לא מוצג בכרטיס המוצר | התאימו אישית את הרכיב באמצעות StoreProductTable |
מה כלול בעבודה?
| שלב | תיאור | משך |
|---|---|---|
| ביקורת הגדרות 1C ו-Bitrix הנוכחיות | בדיקת מהדורה, רישום מלאי לפי מחסנים מופעל, תקינות מזהי XML | 0.5 יום |
| הגדרת מזהי XML | התאמת מזהי GUID של מחסני 1C עם שדות "קוד חיצוני" ב-Bitrix | 0.5 יום |
| קישור מחסנים למשלוח | יישום קביעת אזור אוטומטית או בחירת נקודת איסוף | 1–2 ימים |
| התאמת הצגת מלאי | שינוי רכיבי כרטיס המוצר ותשלום | 1–2 ימים |
| בדיקות ותיקון באגים | בדיקת החלפה בין מספר מחסנים, תיקון אי-התאמות | 0.5–1 יום |
| תיעוד והדרכה | מתן תיאור הגדרות, הדרכת מנהלים על דוחות | 0.5 יום |
משך כולל — מ-1 עד 4 ימים בהתאם למורכבות ההתאמות. המחיר מחושב באופן אישי לאחר ביקורת — צרו קשר לקבלת הצעת מחיר.
דוגמת קוד להצגת מלאי בכרטיס המוצר (פרטים)
$storeRests = \Bitrix\Catalog\StoreProductTable::getList([
'filter' => ['=PRODUCT_ID' => $productId],
'select' => ['AMOUNT', 'STORE_ID', 'STORE.TITLE', 'STORE.ADDRESS'],
'order' => ['STORE.TITLE' => 'ASC'],
])->fetchAll();
foreach ($storeRests as $rest) {
if ($rest['AMOUNT'] > 0) {
echo $rest['STORE_TITLE'] . ': ' . $rest['AMOUNT'] . ' шт.';
}
} הניסיון שלנו
אנחנו עובדים עם תצורות מלאי רב-מחסניות כבר למעלה מ-10 שנים. השתתפנו בהשקת החלפה לרשת של 30 מחסנים ברחבי רוסיה — באותה תקופה, הקצינו ידנית מזהי XML באמצעות שאילתות SQL. כעת התהליך אוטומטי, אך בדיקה ידנית נשארת חובה: שגיאה אחת ב-GUID והמלאי "זז." אנו מבטיחים דיוק בקישור ומספקים תיעוד לכל התצורה. קבלו ייעוץ — נעזור להגדיר החלפה ללא הפסדים.
לוח זמנים להגדרה
הגדרת החלפת מלאי רב-מחסני עם קישור מזהי XML — יום אחד. עם הצגת מלאי מותאמת אישית לפי מחסן וקישור לאזורי משלוח — 2–4 ימים. נטו לעבר הגבול העליון אם נדרשת אינטגרציה עם שירותי משלוח לא סטנדרטיים או לוגיסטיקה עצמית.
אם כבר יש לכם הגדרות אך המלאי לא מסונכרן, צרו קשר לביקורת. נעריך את הפרויקט תוך יום.

