הגדרת חיזוי ביקוש ב-1C-Bitrix
מחסן מזמין סחורה על סמך אינטואיציה של המנהל: אם בחודש שעבר נמכרו 100 יחידות, הם מזמינים 120. התוצאה: פריטים עונתיים נגמרים בשיא, בעוד פריטים לא עונתיים קופאים בהון חוזר. מחסור במלאי מוביל לאובדן הכנסות של עד 30%, ועודף מלאי גורם לעלויות אחסון נוספות. הפסדים מתכנון רכישה לקוי יכולים להגיע ל-30% מהמחזור. אנו פותרים זאת על ידי הגדרת חיזוי ביקוש המבוסס על נתוני מכירות היסטוריים שכבר מאוחסנים ב-b_sale_order_basket. אין קסם של ML — רק סטטיסטיקה מוכחת על עשרות פרויקטים. באמצעות אלגוריתמים של ממוצע נע ומקדמים עונתיים, אנו מפחיתים מחסור במלאי ב-30% ומקטינים את רמות המלאי הממוצעות ב-15%. הטמעת חיזוי מחזירה את ההשקעה תוך 2–3 חודשים על ידי הפחתת עודפי מלאי והאצת מחזור הסחורה.
מקור נתונים: היסטוריית מכירות ב-Bitrix
כל המכירות מאוחסנות ב-b_sale_order_basket (פריטי הזמנה) וב-b_sale_order (כותרות הזמנה). לצורך חיזוי, אנו זקוקים להזמנות שהושלמו שבהן b_sale_order.STATUS_ID תואם לסטטוסים סופיים (בדרך כלל F — בוצע, D — נמסר).
שאילתה בסיסית לקבלת היסטוריית מכירות לפי מוצר:
SELECT DATE_TRUNC('month', o.DATE_INSERT) AS sale_month, ob.PRODUCT_ID, SUM(ob.QUANTITY) AS qty_sold FROM b_sale_order_basket ob JOIN b_sale_order o ON o.ID = ob.ORDER_ID WHERE o.STATUS_ID IN ('F', 'D') -- завершённые и доставленные AND o.CANCELED = 'N' AND ob.PRODUCT_ID = :product_id AND o.DATE_INSERT >= NOW() - INTERVAL '24 months' GROUP BY 1, 2 ORDER BY 1; 24 חודשים הם אופק המינימום לזיהוי עונתיות שנתית. יש לנקות את הנתונים מחריגות: החזרות, הזמנות בדיקה, מכירות המוניות. אנו משתמשים במסנן נוסף לפי סוג הזמנה ומחריגים פריטים עם כמות > 3 סטיות תקן.
איך להכין היסטוריית מכירות לחיזוי?
- אסוף את כל ההזמנות שהושלמו מ-24 החודשים האחרונים מ-
SELECT DATE_TRUNC('month', o.DATE_INSERT) AS sale_month, ob.PRODUCT_ID, SUM(ob.QUANTITY) AS qty_sold FROM b_sale_order_basket ob JOIN b_sale_order o ON o.ID = ob.ORDER_ID WHERE o.STATUS_ID IN ('F', 'D') -- завершённые и доставленные AND o.CANCELED = 'N' AND ob.PRODUCT_ID = :product_id AND o.DATE_INSERT >= NOW() - INTERVAL '24 months' GROUP BY 1, 2 ORDER BY 1;ו-b_sale_order_basket. - סנן החוצה הזמנות שבוטלו, הוחזרו ובדיקה (
b_sale_order, סטטוסיםCANCELED = 'N',F). - צבור נתונים לפי מוצר וחודש — קבל מכירות חודשיות.
- הסר חריגות (מכירות ביותר מ-3 סיגמא מהממוצע) — הן מעוותות את החיזוי.
- שמור את התוצאה בטבלה נפרדת או ב-Highload-block לניתוח נוסף.
שיטות חיזוי פשוטות
עבור רוב חנויות המקוונות, שלוש שיטות ללא ML מספיקות:
| שיטה | מתי ליישם | דיוק | מורכבות הטמעה |
|---|---|---|---|
| ממוצע נע פשוט (SMA) | ביקוש יציב, ללא עונתיות | בינוני | נמוכה |
| ממוצע נע משוקלל (WMA) | קיים טרנד, תגובה מהירה | גבוה מ-SMA | נמוכה |
| הולט-ווינטרס | עונתיות בולטת | גבוה | בינונית |
SMA — חיזוי לחודש הבא = ממוצע של N החודשים האחרונים. N = 3–6 לביקוש יציב, N = 2 לביקוש תנודתי. לדוגמה, מוצרים עם ביקוש אחיד (כימיקלים ביתיים) עם SMA בתקופה של 6 נותן שגיאה של כ-10%.
WMA — משקל החודש האחרון 3, החודש הקודם 2, החודש השלישי 1. מגיב מהר יותר לטרנדים. מתאים למוצרים עם ביקוש גדל או יורד, למשל חידושים עונתיים.
הולט-ווינטרס מתחשב בטרנד ובעונתיות. מורכב יותר אך משמעותית מדויק יותר למוצרים עם עונתיות בולטת: קישוטי חג המולד, נדנדות גן, ילקוטים לבית ספר. שגיאת החיזוי יורדת ל-5–7%. בשילוב עם מקדמים עונתיים, SMA יכול להיות מדויק פי 2 מ-SMA עצמאי למוצרים עונתיים.
function forecastSimpleMA(array $monthlySales, int $periods = 3): float { $recent = array_slice($monthlySales, -$periods); return array_sum($recent) / count($recent); } function forecastWMA(array $monthlySales, int $periods = 3): float { $recent = array_slice($monthlySales, -$periods); $weights = range(1, $periods); $total = array_sum($weights); $sum = 0; foreach ($recent as $i => $qty) { $sum += $qty * $weights[$i]; } return $sum / $total; } מקדם עונתיות
עבור מוצרים עם עונתיות (ביגוד חורף, ציוד גינון, ציוד לבית ספר), ממוצע נע ישגה באופן שיטתי. מקדם העונתיות מחושב על סמך נתונים של שנתיים ומעלה:
// Среднемесячный объём продаж за 2 года $annualAvg = array_sum($monthlySales) / count($monthlySales); // Коэффициент сезонности для каждого месяца $seasonalIndex = []; for ($month = 1; $month <= 12; $month++) { $monthData = array_filter( $monthlySales, fn($m) => (int)date('m', strtotime($m['date'])) === $month ); $monthAvg = array_sum(array_column($monthData, 'qty')) / max(count($monthData), 1); $seasonalIndex[$month] = $annualAvg > 0 ? $monthAvg / $annualAvg : 1.0; } // Прогноз с учётом сезонности $baseForecast = forecastSimpleMA($rawSales, 3); $targetMonth = (int)date('m', strtotime('+1 month')); $adjustedForecast = $baseForecast * $seasonalIndex[$targetMonth]; אחסון חיזויים ונקודת הזמנה מחדש
תוצאות החיזוי מאוחסנות בטבלה מותאמת אישית או ב-Highload-block ב-Bitrix:
CREATE TABLE bl_demand_forecast ( id SERIAL PRIMARY KEY, product_id INT NOT NULL, forecast_month DATE NOT NULL, forecast_qty NUMERIC(10,2), method VARCHAR(50), created_at TIMESTAMP DEFAULT NOW(), UNIQUE (product_id, forecast_month) ); בהתבסס על החיזוי, אנו מחשבים את כמות הרכישה המומלצת: D. function forecastSimpleMA(array $monthlySales, int $periods = 3): float { $recent = array_slice($monthlySales, -$periods); return array_sum($recent) / count($recent); } function forecastWMA(array $monthlySales, int $periods = 3): float { $recent = array_slice($monthlySales, -$periods); $weights = range(1, $periods); $total = array_sum($weights); $sum = 0; foreach ($recent as $i => $qty) { $sum += $qty * $weights[$i]; } return $sum / $total; } = 1.2–1.5 (חיץ לאי-דיוק בחיזוי וזמן אספקה). עבור מוצרים עם זמני אספקה ארוכים (30+ ימים), המקדם עולה ל-1.8.
סוכן Bitrix מחשב מחדש חיזויים פעם בשבוע וכותב ל-// Среднемесячный объём продаж за 2 года $annualAvg = array_sum($monthlySales) / count($monthlySales); // Коэффициент сезонности для каждого месяца $seasonalIndex = []; for ($month = 1; $month <= 12; $month++) { $monthData = array_filter( $monthlySales, fn($m) => (int)date('m', strtotime($m['date'])) === $month ); $monthAvg = array_sum(array_column($monthData, 'qty')) / max(count($monthData), 1); $seasonalIndex[$month] = $annualAvg > 0 ? $monthAvg / $annualAvg : 1.0; } // Прогноз с учётом сезонности $baseForecast = forecastSimpleMA($rawSales, 3); $targetMonth = (int)date('m', strtotime('+1 month')); $adjustedForecast = $baseForecast * $seasonalIndex[$targetMonth]; . ממשק הניהול מציג מוצרים שמלאי נוכחי שלהם נמוך מרמת ההזמנה המומלצת.
מה אנו מגדירים
- חילוץ היסטוריית מכירות מ-
CREATE TABLE bl_demand_forecast ( id SERIAL PRIMARY KEY, product_id INT NOT NULL, forecast_month DATE NOT NULL, forecast_qty NUMERIC(10,2), method VARCHAR(50), created_at TIMESTAMP DEFAULT NOW(), UNIQUE (product_id, forecast_month) );עם מסנן לפי סטטוסים סופיים - אלגוריתם SMA/WMA למוצרים עם ביקוש יציב
- חישוב מקדמי עונתיות על פני היסטוריה של 24 חודשים
-
forecast_qty * safety_factor - current_stockטבלה (או HL-block) וסוכן חישוב שבועי - דוח ניהולי: מוצרים מתחת לסף ההזמנה
- ייצוא המלצות ל-Excel או העברה ל-1C דרך CommerceML ליצירת הזמנות אוטומטית
איך לבחור את שיטת החיזוי האופטימלית?
בחירת השיטה תלויה באופי הביקוש. למוצרים עם ביקוש אחיד — SMA. אם יש טרנד — WMA. לעונתיות — הולט-ווינטרס או מקדם עונתי. אנו מבצעים ניתוח מקדים: משרטטים מכירות על פני 24 חודשים, מעריכים שונות ורכיב עונתי. על סמך זה, אנו בוחרים אלגוריתם עם שגיאת MAPE מינימלית. ב-70% מהמקרים, שילוב של SMA + מקדמים עונתיים מספיק.
למה להפקיד את ההגדרה בידי אנשי מקצוע?
אנו עובדים עם Bitrix למעלה מ-5 שנים (שותפים מוסמכים) והטמענו למעלה מ-30 פרויקטים של חיזוי ביקוש לחנויות מקוונות. הניסיון שלנו מבטיח שהאלגוריתמים מתחשבים נכון במאפייני הקטלוג שלך, והאינטגרציה עם 1C ו-OFD פועלת בצורה חלקה. אנו מבטיחים דיוק חיזוי בתוך 90% MAPE לאחר החודש הראשון. אנו מספקים תיעוד, מאמנים מנהלים ומציעים תמיכה לאחר הפרויקט. קבל ייעוץ — ננתח את מבנה ההזמנות שלך בחינם ונציע פתרון אופטימלי.
מה כלול בעבודה
| שלב | מה אנו עושים | תוצאה |
|---|---|---|
| אנליטיקה | לימוד מבנה הזמנות, בדיקת נתונים ל-24 חודשים | תוכנית הגדרה עם בחירת שיטה |
| פיתוח | כתיבת שאילתות SQL, קוד סוכן, דוח ניהולי | חיזוי עובד עם MAPE < 15% |
| בדיקות | השוואת חיזוי למכירות היסטוריות | דוח דיוק והמלצות התאמה |
| הטמעה | הגדרת סוכן, ייצוא ל-1C דרך CommerceML | פונקציונליות מוכנה ללא השבתה |
| הדרכה | קיום סמינר מקוון למנהלים | שימוש בטוח בדוח ופרשנות נתונים |
תוצרים: סקריפטים של SQL לחילוץ נתונים, קוד סוכן, מבנה HL-block, תבנית דוח ניהולי, מודול ייצוא ל-1C, מדריך משתמש.
הפרויקטים שלנו מדגימים הפחתה של 30% במחסור במלאי ורמות מלאי נמוכות ב-15% בממוצע. עם ניסיון של 5+ שנים בפיתוח Bitrix ו-30+ הטמעות חיזוי שהושלמו, אנו מספקים תוצאות אמינות.
לוח זמנים משוער: מ-5 עד 10 ימי עסקים. הגדרה סוהר מתחילה ב-$1,500 (עד 1,000 SKU) ומחזירה את עצמה תוך 2–3 חודשים. העלות מחושבת באופן אישי לאחר ביקורת. צור קשר לקבלת ייעוץ והערכה — נכין הצעה מסחרית תוך יום.
מקור: תיעוד API הרשמי של 1C-Bitrix — <https://dev.1c-bitrix.ru/api_help/sale/classes/ csalebasket/>







