נתקלנו במצב הזה עשרות פעמים: לקוח מתחיל סנכרון עם 1C, והתוצאה היא פסקי זמן (timeouts), מוצרים כפולים או מחירים שלא מתעדכנים. המודול הסטנדרטי קטלוג מסחרי (catalog) תומך בפרוטוקול CommerceML 2.x, אבל בפועל הוא נשבר בשלושה תרחישים: קידוד שאינו UTF-8, מבנה לא סטנדרטי של <Классификатор>, וחריגה ממגבלות זמן עם קבצים מעל 50 MB. אנו מגדירים ייבוא סוהר תוך 1-2 ימים עם אחריות לפעולה יציבה.
מדוע מתרחשים פסקי זמן בייבוא קבצי XML גדולים
הסיבה העיקרית היא מגבלת max_execution_time ב-PHP. בעת העלאת קובץ של 180 MB המכיל 200,000 מוצרים, הסקריפט של 1c_exchange.php אינו יכול לעבד את הנתונים בתוך 30 השניות הסטנדרטיות. אפילו set_time_limit(0) לא עוזר אם PHP-FPM מוגדר עם request_terminate_timeout. הפתרון הוא הפעלת ייבוא בשלבים. בהגדרות מודול 1C, אנו מגדירים את "גודל קובץ לעיבוד שלבי" (פרמטר CATALOG_IMPORT_STEP_SIZE). Bitrix משתמש במפענח SAX כדי לפצל את הקובץ לנתחים של 10 MB ומעבד אותם ברצף. זה לא רק מונע פסקי זמן אלא גם מפחית את העומס על מסד הנתונים: כל שלב נשמר, ואם מתרחש כשל, הסנכרון מתחדש מהנתח המוצלח האחרון. בפרויקט אחד עם קטלוג ציוד (150,000 פריטים), גישה זו צמצמה את זמן הייבוא מ-4 שעות ל-40 דקות.
כיצד להימנע ממוצרים כפולים במהלך סנכרון?
כפילויות מתרחשות כאשר ה-GUID של פריט (<Ид>) משתנה ב-1C. לדוגמה, לאחר מעבר לגרסת תצורה חדשה או העברת נתונים. Bitrix אינו יכול להתאים את ה-GUID החדש ל-XML_ID הקיים ב-b_iblock_element ויוצר אלמנט חדש. כדי לתקן כפילויות, אנו משתמשים בשאילתת SQL ישירה או ב-CIBlockElement::Update(). מניעה: הגדרה ב-1C לאיסור פריקת אלמנטים עם GUID ריק או לא ייחודי. במקרים מורכבים, אנו כותבים מטפל אירועים של OnSuccessCatalogImport שבודק ייחודיות ומעדכן בכוח את XML_ID.
מה לעשות אם מחירים אינם מתעדכנים?
סיבה נפוצה היא אי-התאמה בשמות סוגי המחירים. ב-1C, סוג המחיר עשוי להיקרא "Основная", בעוד שב-Bitrix הוא "Розничная". המיפוי מוגדר ב-/bitrix/admin/cat_price_type.php. ודאו ש-<ТипЦены><Наименование> ב-XML תואם ל-NAME ב-b_catalog_price_type. אם יש צורך למפות מספר סוגי מחירים, אנו כותבים מטפל מותאם אישית של OnSuccessCatalogImport. בתוכו, אנו מנתחים XML באמצעות SimpleXMLElement ומעדכנים מחירים דרך CPrice::Update().
הגדרת ייצוא מ-Bitrix ל-1C
עבור הזרימה ההפוכה (הזמנות → 1C), נעשה שימוש בנקודת הקצה עם הפרמטר type=sale. Bitrix יוצר orders.xml עם מבנה <Документ> המכיל פריטי הזמנה. קריטי לבדוק שבדגשי הסנכרון מופעלת הדגל "ייצוא משלוחים" וסטטוס ההזמנה הנדרש מוגדר. הפרמטרים של רכיב bitrix:catalog.import.1c:
-
IBLOCK_ID— בלוק מידע של הקטלוג -
PRICE_TYPE— סוג מחיר ברירת מחדל -
STORE_ID— מחסן ברירת מחדל -
USE_CML2_DESCRIPTION— לקיחת תיאור מ-XML
תהליך ההגדרה
| שלב | משך |
|---|---|
| אבחון תוכנית הסנכרון הנוכחית (בדיקת קידוד, מבנה XML, רישום שגיאות) | 2-4 שעות |
| הגדרת מיפוי סוגי מחירים ומחסנים | 3-6 שעות |
| הפעלה והגדרה של ייבוא שלבי | 2-4 שעות |
| ריצת ניסיון עם נתונים אמיתיים + ניפוי שגיאות (תיקון כפילויות, שגיאות) | 4-8 שעות |
| תיעוד התוכנית וייעוץ | 1-2 שעות |
סה"כ ההגדרה אורכת 1-2 ימי עבודה.
השוואת גישות: סטנדרטית מול מותאמת אישית
| קריטריון | סנכרון סטנדרטי | עיבוד מותאם אישית |
|---|---|---|
| תמיכה בקבצים גדולים | מוגבל (פסק זמן) | מפענח SAX שלבי ללא פסקי זמן |
| גמישות מיפוי | רק דרך לוח הניהול | אירועים ו-SQL חופשיים |
| זמן הגדרה | שעתיים | החל מיום אחד |
| אחריות לשלמות | בינונית (סיכון לכפילויות) | גבוהה (בדיקות אוטומטיות ורישום) |
מה כלול בעבודה
- אבחון תצורת הסנכרון הנוכחית (קידוד, מבנה
<Классификатор>, סוגי מחירים) - הגדרת ייבוא שלבי לקבצים גדולים (גודל נתח אופטימלי)
- מיפוי סוגי מחירים ומחסנים (מיפוי ישיר או מטפלים מותאמים אישית)
- תיקון כפילויות ושגיאות GUID (SQL או API)
- ריצת ניסיון עם ייצוא אמיתי (תזמון, בדיקת מחירים ומלאי)
- תיעוד תוכנית הסנכרון (מבנה נתונים, תיאורי שדות)
- ייעוץ בנושא תחזוקה שוטפת
יש לנו ניסיון של 10+ שנים בפיתוח Bitrix, מעל 200 פרויקטים עם אינטגרציית 1C. מהנדסים מוסמכים מבטיחים סנכרון נכון של קטלוג, מחירים ומלאי. עבור משימות לא סטנדרטיות (מטפלים מותאמים אישית, מבנה 1C לא סטנדרטי), מתווסף יום פיתוח נוסף.
נעריך את הפרויקט שלך תוך שעה — צור קשר. קבל ייעוץ מהנדס והצעה להגדרת ייבוא סוהר.
CommerceML — המפרט הרשמי של פרוטוקול הסנכרון.







