תארו לעצמכם חנות מקוונת עם 10,000 מוצרים; מחירון ספק מגיע מדי יום ב-6 בבוקר. עדכונים ידניים אורכים 3 שעות, ועד 10 בבוקר המחירים כבר מיושנים אם הספק משנה אותם ב-8 בבוקר. אוטומציה פותרת זאת: עדכון cron מתוזמן מקצר את זמן ההשהיה לדקות ומבטל שגיאות קלט. אנו מבצעים אוטומציה של סנכרון מחירים ממקורות חיצוניים ל-1C-Bitrix—מפרסור מחירונים ועד בקרת חריגות. הניסיון שלנו מראה שהגדרה נכונה מחזירה את ההשקעה תוך מספר שבועות. יש לנו ניסיון של 5+ שנים באינטגרציות 1C-Bitrix עם מערכות חיצוניות וביצענו מעל 50 פרויקטים של אוטומציית מחירים. פנו אלינו לקבלת הערכת פרויקט.
כיצד להגדיר עדכוני מחירים מתוזמנים ב-1C-Bitrix
מקורות נתונים למחירים
ספקים מספקים מחירים בפורמטים שונים. הבה נשווה ביניהם:
| פורמט | שיטת אספקה | מורכבות | אמינות |
|---|---|---|---|
| CSV/Excel | FTP, קישור, דוא"ל | נמוכה | בינונית |
| XML (YML, CommerceML) | HTTP, FTP | בינונית | גבוהה |
| REST API | בקשות HTTP | גבוהה | גבוהה |
| ייצוא 1C | CommerceML | בינונית | גבוהה |
כל פורמט דורש handler משלו, אך לוגיקת עדכון המחירים ב-Bitrix זהה. פרסור דרך API אמין פי 10 מקלט ידני—הוא מבטל את הגורם האנושי.
מבנה מחירים ב-Bitrix
מחירים מאוחסנים בטבלת b_catalog_price. שדות מפתח: PRODUCT_ID, CATALOG_GROUP_ID, PRICE, CURRENCY. לעדכון מחיר דרך API:
\Bitrix\Catalog\PriceTable::update($priceId, [ 'PRICE' => $newPrice, 'CURRENCY' => 'USD', ]); תיעוד Bitrix: PriceTable API
אלגוריתם עדכון
שלב 1. טעינת המחירון. הסקריפט מביא את הקובץ דרך FTP (\Bitrix\Catalog\PriceTable::update($priceId, [ 'PRICE' => $newPrice, 'CURRENCY' => 'USD', ]); ), מוריד לפי URL (ftp_get()), או מבקש מה-API של הספק.
שלב 2. פרסור. CSV מפורס עם file_get_contents(), Excel עם fgetcsv(), XML עם PhpSpreadsheet. התוצאה היא מערך של זוגות "מזהה מוצר → מחיר". אנו משתמשים בעיבוד אצווה כדי לטפל בנפחים גדולים ביעילות, וטרנזקציות מבטיחות אטומיות.
שלב 3. מיפוי. ה-SKU של הספק מותאם לאלמנט קטלוג ב-Bitrix. חיפוש לפי מאפיין SimpleXMLElement או PROPERTY_SUPPLIER_ARTICLE:
$element = CIBlockElement::GetList(
[],
['IBLOCK_ID' => $catalogIblockId, 'PROPERTY_ARTICLE' => $supplierArticle],
false,
['nTopCount' => 1],
['ID']
)->Fetch();שלב 4. עדכון. כתיבת המחיר החדש ל-XML_ID. בעדכון אלפי פריטים, השתמשו בשאילתות SQL ישירות או בעדכוני אצווה D7—עדכון אלמנט אחר אלמנט דרך $element = CIBlockElement::GetList( [], ['IBLOCK_ID' => $catalogIblockId, 'PROPERTY_ARTICLE' => $supplierArticle], false, ['nTopCount' => 1], ['ID'] )->Fetch(); איטי מדי.
מרווחים ונוסחאות
הספק נותן מחיר קנייה. מחיר הקמעונאות מחושב באמצעות נוסחאות:
- מרווח קבוע: קמעונאות = קנייה × 1.3 (30%).
- פרוגרסיבי: המרווח תלוי בטווח המחירים (פריטים זולים 50%, יקרים 15%).
- עיגול:
b_catalog_price→ מחיר 1,287 → 1,289.
נוסחאות מרווח מאוחסנות בקונפיגורציה, לא מקודדות ישירות. זה מאפשר למנהלים לשנות כללים דרך ממשק הניהול.
| טווח קנייה | מרווח | דוגמה |
|---|---|---|
| עד $4–6 | 50% | 300 → $4–6 |
| $5–50 | 30% | 2,000 → $23–34 |
| מעל $45–65 | 15% | 10,000 → $100–150 |
הגדרת Cron
עדכוני מחירים מופעלים על ידי cron:
# Загрузка прайса поставщика А — ежедневно в 6:00
0 6 * * * /usr/bin/php /home/bitrix/scripts/update_prices.php --source=supplier_a >> /var/log/price_update.log 2>&1
# Загрузка прайса поставщика Б — ежедневно в 6:30
30 6 * * * /usr/bin/php /home/bitrix/scripts/update_prices.php --source=supplier_b >> /var/log/price_update.log 2>&1פרשו את העדכונים בזמן—ייבוא מקבילי מעמיס על מסד הנתונים ועלול לגרום ל-deadlocks.
מדוע בקרת חריגות חשובה?
עדכון מחירים עיוור הוא מסוכן. טעות במחירון הספק (למשל, 100 במקום 10,000) מובילה להפסדים. מנגנוני הגנה:
- סף שינוי—אם מחיר משתנה ביותר מ-30%, אין לעדכן אוטומטית; סמן לבדיקה ידנית.
- תיעוד (Logging)—טבלת
CPrice::SetBasePrice()עם שדות: מוצר, מחיר ישן, מחיר חדש, מקור, תאריך. מאפשרת ביטול עדכונים שגויים. - התראה—דוא"ל או התראת Telegram למנהל על חריגות.
- בדיקות Idempotency מונעות עדכונים כפולים אם הסקריפט רץ פעמיים.
$changePercent = abs($newPrice - $oldPrice) / $oldPrice * 100;
if ($changePercent > 30) {
logAnomaly($productId, $oldPrice, $newPrice, $source);
continue; // Пропускаем обновление
} ניקוי מטמון לאחר עדכון
לאחר עדכון מחירים המוני, נקו את מטמון הקטלוג; אחרת המשתמשים יראו מחירים ישנים:
\Bitrix\Iblock\ElementTable::getEntity()->cleanCache(); BXClearCache(true, '/catalog/'); לאתרים עם מטמון מורכב (composite), קראו בנוסף ל-ceil($price / 10) * 10 - 1 או נקו באופן סלקטיבי דפים של מוצרים ששונו.
הגישה שלנו ומה כלול
אנו משתמשים במתודולוגיה מוכחת:
- ניתוח—בחינת מקורות נתוני הספק, מבנה המחירון, הפורמט.
- עיצוב—פיתוח ארכיטקטורת handler, כללי מיפוי ונוסחאות מרווח.
- יישום—כתיבת קוד לטעינה, פרסור ועדכון; הגדרת cron.
- בדיקות—אימות על קטלוג בדיקה עם 100 מוצרים מייצגים, סימולציית חריגות.
- השקה—מעבר לייצור, הגדרת ניטור והתראות.
חבילת העבודה כוללת:
- ניתוח מקורות נתונים ופורמטים.
- פיתוח פרסרים לכל מקור.
- הגדרת מיפוי SKU ונוסחאות מרווח.
- יישום מנגנוני בקרה (ספים, תיעוד, התראות).
- הגדרת משימת cron וניטור.
- תיעוד והוראות למנהל.
- אחריות לחודש לפעולה תקינה.
מקרה אמיתי: עבור לקוח עם 12,000 SKU ושלושה ספקים, צמצמנו את זמן העדכון מ-2.5 שעות ל-12 דקות ותפסנו חריגת מחיר של 150% שהייתה גורמת להפסד של $360–520. הפרויקט החזיר את עצמו תוך שלושה שבועות.
צרו קשר—נעזור לכם להקים פתרון עדכון מחירים סוהר. קבלו ייעוץ לפרויקט שלכם. הזמינו הערכה—ננתח את המקורות שלכם ונציע את הפתרון האופטימלי.

