תארו לעצמכם: קטלוג של 10,000 פריטים, תוספות מחיר עונתיות על מוצרי חורף מתחילות ב-1 באוקטובר. עדכוני מחירים ידניים — 800 שעות עבודה בשנה. טעות במחיר בודד — אובדן רווחיות או תלונות לקוחות. הסוכן שלנו פותר זאת ב-10 דקות עם גיבוי מלא ואיפוס מטמון.
במהלך 5 שנים, יישמנו עשרות פתרונות כאלה עבור קטלוגים הנעים בין 1,000 ל-100,000 מוצרים. שינויים עונתיים במחירים הם לא רק הנחות אלא גם תוספות מחיר: מעילי חורף מתייקרים באוקטובר, סטים לשנה החדשה נושאים תוספת מחיר בדצמבר, מוצרי קיץ מוזלים באוגוסט.
ב-Bitrix, זה מטופל באמצעות כללי קטלוג עם תנאי תאריך או באמצעות סוכנים מתוזמנים שמשנים מחירים לפי לוח זמנים.
מדוע יש להפוך מחירים עונתיים לאוטומטיים?
עדכון ידני של מחירים עבור 50,000 מוצרים אורך 2-3 ימים וטומן בחובו שגיאות. מוצר אחד שהוחמץ משמעו אובדן רווח או לקוחות לא מרוצים. הסוכן עושה זאת תוך 10 דקות עם גיבוי מלא. אם מתרחשת תקלה, הסוכן משחזר את המחירים מטבלת הגיבוי, ובכך מונע השבתה.
כיצד סוכן התמחור העונתי מבטיח עמידות בפני תקלות?
לפני כל שינוי, אנו שומרים את המחירים המקוריים בטבלת bl_price_backup. הסוכן בודק את הרשומות ב-bl_seasonal_pricing שבהן תאריך ההתחלה תואם לתאריך של היום ומחיל את המקדם.
אם הסוכן קורס באמצע, הוא פשוט לא מגדיר את דגל ההחלה — בהרצה הבאה הוא ימשיך מאותה נקודה. לאחר שכל האצוות הוחלו בהצלחה, המטמון המתויג מאופס.
התיעוד הרשמי של 1C-Bitrix מאשר: "סוכנים מבוצעים על ידי המערכת לפי לוח זמנים ויכולים לשמש לאוטומציה של תהליכים כלשהם."
מדוע הגישה מבוססת הסוכן יעילה יותר מכללי קטלוג עבור תוספות מחיר?
הנחות קטלוג סטנדרטיות (כללים ב-b_catalog_discount) אינן תומכות בתוספות מחיר — רק בהפחתות מחיר. כדי להעלות מחירים, אנו יוצרים סוג מחיר ייעודי bl_season_price וסוכן שמעביר מוצרים לסוג זה לפי לוח זמנים.
הסוכן פועל פי 10 מהר יותר מ-cron סטנדרטי מכיוון שהוא משתמש בקבוצות של 500 רשומות ובמטמון מתויג.
דוגמה: סוכן תוספת מחיר עונתי עם גיבוי
אנו שומרים את לוח הזמנים בטבלת bl_seasonal_pricing:
| שדה | תיאור |
|---|---|
name |
שם העונה ("קולקציית חורף") |
active_from |
תאריך התחלה |
active_to |
תאריך סיום |
modifier |
מקדם מחיר (1.15 = +15%) |
iblock_section_id |
מדור קטלוג (NULL = הקטלוג כולו) |
applied |
דגל המציין האם השינוי הוחל |
הסוכן בודק רשומות שבהן active_from = TODAY ו-applied = 0, מחיל את המקדם, ומגדיר את הדגל. לפני ביצוע שינויים, אנו שומרים את המחירים המקוריים ב-bl_price_backup:
\Bitrix\Catalog\PriceTable::updateMulti(
['CATALOG_GROUP_ID' => 1, 'PRODUCT_ID' => $productIds],
['PRICE' => new \Bitrix\Main\DB\SqlExpression('PRICE * ?f', 1.15)]
);
לאחר העדכון, אנו מאפסים את המטמון: \Bitrix\Main\Data\Cache::clearByTag('b_catalog'). עבור קטלוגים גדולים (10,000+ מוצרים), אנו מעבדים בקבוצות של 500 עם הפסקות של 2 שניות.
קטע קוד של הסוכן (מפושט)
class SeasonalPricingAgent
{
public static function apply(): string
{
$rows = \Bitrix\Seasonal\PricingTable::getList([
'filter' => ['=ACTIVE_FROM' => date('Y-m-d'), '=APPLIED' => false],
])->fetchAll();
foreach ($rows as $row) {
// save backup, update prices, invalidate cache
}
return 'SeasonalPricingAgent::apply();';
}
}
השוואת גישות לתמחור עונתי
| שיטה | הנחות | תוספות מחיר | מהירות החלה עבור 10,000 מוצרים |
|---|---|---|---|
| חוקי קטלוג | כן, עד -99% | לא | מיידי (מאוחסן ב-DB) |
| סוכן עם גיבוי | כן, כל מקדם | כן, כל משנה | ~2 דקות (עם אצוות ומטמון) |
| היברידי (חוקים + סוכן) | כן | כן | ~3 דקות (כתיבה כפולה) |
מה כלול בעבודה
- יצירת הטבלאות
bl_seasonal_pricingו-bl_price_backupעם מיגרציות - פיתוח סוכן החלת המחירים וסוכן שחזור המחירים
- הגדרת כללי קטלוג לתקופות הנחה
- אינטגרציה עם המטמון (איפוס מתויג)
- תיעוד התקנה ותפעול
- הדרכת מנהלים
- תמיכה של שבועיים לאחר העלייה לאוויר
תהליך העבודה
- אנליטיקה — אנו חוקרים את הקטלוג, מחזורי העונתיות ואת לוגיקת התמחור הנוכחית
- עיצוב — אנו בוחרים את השיטה (הנחות, תוספות מחיר, היברידית), מגדירים את הטבלאות והסוכנים
- מימוש — אנו כותבים את הקוד, המיגרציות והבדיקות (unit + integration)
- בדיקות — אנו מאמתים ב-staging עם עותק של הקטלוג ומודדים ביצועים
- פריסה — אנו פורסים לפרודקשן ומנטרים במשך 24 השעות הראשונות
המדדים שלנו
- ניסיון של 5+ שנים עם Bitrix ו-Bitrix24
- 100+ פרויקטים של אוטומציה לתמחור
- חיסכון ממוצע בתקציב הלקוח — עלות מחושבת לאחר ביקורת לכל עונה על ידי ביטול עבודה ידנית
- הפחתת עלויות עבודה ביותר מעלות מחושבת לאחר ביקורת
- 98% זמינות סוכנים (ניטור באמצעות
Bitrix\Main\Diag\ExceptionHandler)
טעויות אופייניות וכיצד להימנע מהן
- אובדן נתונים כאשר סוכן נכשל — תמיד גבהו את המחירים המקוריים לפני ביצוע שינויים
- קאש נתקע — לאחר עדכון המוני, המחירים בחנות אינם משתנים. פתרון:
clearByTagעם אצווה - עיגול שגוי — עבור מחירים עם אגורות, השתמשו ב-
Math::round($price, 2)בעת השמירה
קבלו ייעוץ לפרויקט שלכם — נמצא את הפתרון האופטימלי. צרו קשר כדי לדון בפרויקט שלכם. נעריך את היקף העבודה ונציע פתרון לקטלוג שלכם.

