שפר את ביצועי קטלוג 1C-Bitrix עם עיבוד אצווה API

עריכת מוצרים המונית ב-1C-Bitrix יכולה להיות מותאמת עם עיבוד אצווה API. לעתים קרובות אנו מקבלים בקשה: בקטלוג יש 5000 מוצרים, מתוכם 800 זקוקים לעדכון שדה — למשל, הוספת דגל "Хит продаж". עריכה אחת-אחת לוקחת יום עבודה. הכלי הסטנדרטי לעריכה המונית בלוח הניהול של Bitrix מכסה את רוב התרחישים
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
שפר את ביצועי קטלוג 1C-Bitrix עם עיבוד אצווה API
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1164

עריכת מוצרים המונית ב-1C-Bitrix יכולה להיות מותאמת באמצעות עיבוד אצווה (API batching). לעיתים קרובות אנו מקבלים בקשה: בקטלוג יש 5000 מוצרים, מתוכם 800 זקוקים לעדכון שדה — למשל, הוספת דגל "Хит продаж". עריכה אחד-אחד לוקחת יום עבודה. כלי העריכה ההמונית הסטנדרטי בלוח הניהול של Bitrix מכסה את רוב התרחישים אך יש לו מגבלות שחשוב להכיר. עם ניסיון של למעלה מ-5 שנים בפיתוח Bitrix ו-50+ פרויקטים מוצלחים של עריכה המונית, אנו מספקים פתרונות חזקים המשלבים כלים סטנדרטיים וסקריפטים מותאמים אישית של API, ומאיצים עדכונים פי 5–10. עבור לקוח עם 10,000 מוצרים, עדכנו את כל שדות התמחור תוך פחות משעתיים, וחסכנו 20 שעות עבודה ידנית. הפתרונות שלנו מתחילים ב-$250 ויכולים לחסוך עד $1,000 בחודש בעריכה ידנית. אנו מבטיחים תוצאות יציבות ומספקים 14 ימי תמיכה לאחר ההשקה.

מצבים הדורשים עריכה המונית מותאמת אישית

הממשק הסטנדרטי מתמודד עם משימות כמו שינוי מחיר או פעילות עבור תריסר מוצרים. אך ברגע שצריך לעדכן 500+ רשומות, להגדיר ערך רק עבור שדות ריקים, או להשפיע על מספר מאפיינים — סקריפט מותאם אישית הוא בלתי נמנע. שיטת ה-updateMulti של D7 מהירה עד פי 30 מעדכונים רציפים. צרו קשר — אנו נבחר את הפתרון האופטימלי למשימה שלכם.

האצת עריכה המונית פי 10 עם עיבוד אצווה

המפתח למהירות הוא עיבוד אצווה באמצעות D7 API והשבתת אירועים מיותרים. לדוגמה, שיטת \Bitrix\Catalog\ProductTable::updateMulti מבצעת UPDATE אחד של SQL עם WHERE ID IN (...) במקום N שאילתות נפרדות. זה נותן שיפור ביצועים של עד 70% על מבחר של 500 פריטים. שאילתת ה-SQL מתבצעת בעסקה אחת, מה שמבטיח אטומיות ומפחית תחרות על נעילות. עם זאת, עבור אצוות גדולות מאוד, יש לשקול פיצול לחלקים קטנים יותר כדי להימנע מעסקאות ארוכות ומנעילות מתות (deadlocks). חשוב גם להשבית זמנית את האינדוקס מחדש של החיפוש (BX_SKIP_SEARCH_REINDEX) כך שכל קריאת Update לא תייצר אירוע.

מנגנון סטנדרטי: מתי הוא עובד, מתי לא

ברשימת המוצרים בלוח הניהול (/bitrix/admin/iblock_list_admin.php?type=catalog), בחרו את הפריטים הרצויים, ואז בחרו "ערוך נבחרים". נפתח טופס שבו מציינים רק את השדות לשינוי — השאר נשארים ללא שינוי. טכנית זה עובד דרך CIBlockElement::Update(), הנקרא עבור כל מזהה נבחר. הפרמטר $bWorkFlow = false בקריאה — ללא יצירת טיוטה. בעת עדכון מאפיינים, Bitrix דורסת רק את המאפיינים שהועברו, ומשאירה אחרים ללא שינוי.

סיבות לכך שהכלי הסטנדרטי נכשל בקטלוגים גדולים

מגבלה ראשונה: הוא לא עובד עם מאפיינים מרובי-ערכים (סוג L עם ערכים מרובים). שנית: הוא לא תומך בעדכון מותנה ("הגדר ערך רק אם הנוכחי ריק"). שלישית: בעת עדכון 500+ פריטים, הדפדפן מאט עקב טעינת עמוד מחדש עם התקדמות. עבור קטלוגים גדולים (מ-10,000 מוצרים), המנגנון הסטנדרטי כמעט בלתי שמיש — זמן הביצוע גדל באופן לא ליניארי עקב שאילתות חוזרות וביטול מטמון.

האצת עריכה המונית: הגישה

לעדכון מספר גדול של מוצרים באמצעות סקריפט, עדיף להשתמש ב-D7 API עם עיבוד אצווה:

$productIds = [1001, 1002, 1003, /* ... */]; $batchSize = 50; $chunks = array_chunk($productIds, $batchSize); foreach ($chunks as $chunk) { foreach ($chunk as $id) { \CIBlockElement::Update($id, false, [ 'PROPERTY_VALUES' => [ 'IS_HIT' => 'Y', ], ]); } // Небольшая задержка между батчами чтобы не перегружать MySQL usleep(100000); // 100ms } 

עבור נתונים טבלאיים בלבד (שדות של $productIds = [1001, 1002, 1003, /* ... */]; $batchSize = 50; $chunks = array_chunk($productIds, $batchSize); foreach ($chunks as $chunk) { foreach ($chunk as $id) { \CIBlockElement::Update($id, false, [ 'PROPERTY_VALUES' => [ 'IS_HIT' => 'Y', ], ]); } // Небольшая задержка между батчами чтобы не перегружать MySQL usleep(100000); // 100ms } , לא מאפייני אינפובלוק) עדכון ישיר דרך D7 מהיר יותר:

\Bitrix\Catalog\ProductTable::updateMulti($productIds, [ 'VAT_ID' => 3, 'VAT_INCLUDED' => 'Y', ]); 

שיטת b_catalog_product מבצעת UPDATE אחד של SQL עם \Bitrix\Catalog\ProductTable::updateMulti($productIds, [ 'VAT_ID' => 3, 'VAT_INCLUDED' => 'Y', ]); במקום N שאילתות נפרדות, ומפחיתה מאוד את זמן ביצוע השאילתות.

השוואת ביצועים

שיטה זמן עבור 1000 מוצרים (שדה אחד) תמיכה במאפיינים מרובי-ערכים עדכון מותנה סיכון למסד נתונים
ממשק סטנדרטי 15–30 דקות לא לא נמוך (פריט-אחר-פריט)
CIBlockElement::Update (לולאה) 3–5 דקות כן כן (עם סינון מקדים) בינוני (שאילתות רבות)
D7 updateMulti 1–3 דקות לא (רק שדות טבלאיים) לא נמוך (שאילתה אחת)

ביצועים עם גדלי אצווה שונים

גודל אצווה זמן עבור 5000 מוצרים (מאפיין אינפובלוק) זמן עבור 5000 מוצרים (שדה טבלאי)
1 (פריט-אחר-פריט) ~80 דקות ~30 דקות
50 ~15 דקות ~5 דקות
200 ~12 דקות ~4 דקות

מה כלול בעבודה

  • בדיקת מבנה האינפובלוק הנוכחי וזיהוי צווארי בקבוק.
  • כתיבת סקריפט עדכון המוני תוך התחשבות בתנאים שלכם.
  • בדיקות על עותק של מסד הנתונים (גיבוי חובה).
  • פריסה על השרת היצרני בשעות עומס נמוך.
  • תיעוד הסקריפט והדרכת עובדים.
  • תמיכה לאחר ההשקה: 14 ימים במקרה של שגיאות.

הוראות התקנה שלב-אחר-שלב

  1. קבעו אילו שדות ומאפיינים דורשים עדכון.
  2. כתבו סקריפט באמצעות D7 API או לולאת updateMulti.
  3. השביתו אינדוקס מחדש של חיפוש דרך WHERE ID IN (...).
  4. בדקו על עותק של מסד הנתונים.
  5. הריצו את הסקריפט בשעות עומס נמוך.
  6. לאחר הסיום, הפעילו מחדש את אינדוקס החיפוש.

ניטור התקדמות

בעת עדכון המוני דרך ממשק האינטרנט, Bitrix משתמש במנגנון "המשך" דרך CIBlockElement::Update ושדות נסתרים — כל N פריטים העמוד נטען מחדש עם התקדמות. עבור עיבוד סקריפט, נוח יותר לכתוב התקדמות לקובץ ולקרוא אותו דרך AJAX:

file_put_contents('/tmp/update_progress.json', json_encode([ 'processed' => $processed, 'total' => $total, 'percent' => round($processed / $total * 100), ])); 

בעת עדכון המוני של מאפיינים מסוג "רשימה" (define('BX_SKIP_SEARCH_REINDEX', true)), יש לקבל תחילה את sessid של ערך הרשימה מ-file_put_contents('/tmp/update_progress.json', json_encode([ 'processed' => $processed, 'total' => $total, 'percent' => round($processed / $total * 100), ])); — יש להעביר את L, לא את ערך הטקסט.

שגיאות נפוצות בעדכון המוני

  • שכחת השבתת אינדוקס מחדש של חיפוש — כל קריאת Update מפעילה ID, ומגדילה את הזמן פי 2-3. השתמשו ב-b_iblock_property_enum.
  • עדכון שדה אחד עם מספר קריאות Update רצופות במקום אחת. כל קריאה מפעילה אירועים ומעדכנת מטמון — תוספת של 100ms לפריט.
  • אי בדיקת הרשאות גישה לסקריפט — אם הסקריפט רץ כמנהל אך משתמש עורך מאוחר יותר את הפריט, עלולים להיווצר קונפליקטים עם תהליכים עסקיים.

לוח זמנים וכיצד להתחיל

זמן הפיתוח המשוער לסקריפט עדכון המוני הוא בין 2 ל-5 ימי עבודה, תלוי במורכבות. אם אתם צריכים לעדכן מוצרים מהר יותר וללא סיכון למסד הנתונים היצרני — כתבו לנו. קבלו ייעוץ חינם: נעריך את המשימה ונציע את האפשרות הטובה ביותר. אנו מבטיחים איכות ויעילות. צרו קשר עוד היום כדי להאיץ את הקטלוג שלכם.

טעות נפוצה: שכחת השבתת אינדוקס מחדש של חיפושכל קריאה ל-CIBlockElement::Update מפעילה אינדוקס מחדש של חיפוש, ומאטה את התהליך. השתמשו ב-define('BX_SKIP_SEARCH_REINDEX', true) כדי להימנע מכך.

ראו את התיעוד הרשמי של 1C-Bitrix API לפרטים נוספים.

הכלי הסטנדרטי אינו תומך בעדכון מאפיינים מרובי-ערכים (סוג L עם ערכים מרובים) ובעדכונים מותנים. בנוסף, הוא אינו מותאם למערכי נתונים גדולים.

כדי לעדכן מאפיינים מרובי-ערכים באמצעות עריכה המונית, יש לכתוב סקריפט מותאם אישית באמצעות ה-API, ולהעביר את מערך PROPERTY_VALUES שבו כל מאפיין מרובה הוא מערך של מזהי ערכי רשימה.