חיבור ישיר בין 1C ל-Bitrix הוא פשוט כל עוד יש רק שתי מערכות. הוסיפו מחסנים, CRM ושווקים מקוונים — כל חיבור חדש מכפיל את המורכבות. בפרויקט אחד, לקוח חיבר שלושה אתרי Bitrix ל-1C יחיד ישירות. מדי שבוע הסנכרון נשבר, הזמנות שוכפלו ורמות המלאי התפצלו. זמן התיקון הממוצע היה ארבע שעות. תכננו שירות ביניים (middleware) שהפך לשער יחיד לכל המערכות. התוצאה: השגיאות נעלמו, וזמן הסנכרון קוצץ בחצי.
אנו בונים middleware מותאם אישית כאשר מספר אתרי Bitrix מחוברים ל-1C אחד, כאשר נדרש סנכרון עם CRM או שווקים מקוונים, כאשר תצורת 1C אינה סטנדרטית, או כאשר דרישות עיבוד הנתונים חורגות ממיפוי CommerceML. ה-middleware מבודד את הלוגיקה העסקית של ההחלפה והופך אותה לניתנת לבדיקה עצמאית. בקשו אודיט — המהנדסים שלנו יעריכו את הפרויקט שלכם.
אתגרים שה-Middleware פותר
- מספר אתרי Bitrix המחוברים ל-1C יחיד
- 1C + Bitrix + CRM (AmoCRM, Bitrix24) — הנתונים חייבים להסתנכרן בין כולם
- תצורת 1C לא סטנדרטית ללא שירותי HTTP — נדרש מתאם (adapter)
- דרישות עיבוד נתונים מורכבות יותר ממה שמיפוי CommerceML יכול לספק
- הלוגיקה העסקית של ההחלפה חייבת להיות מבודדת וניתנת לבדיקה בנפרד מ-1C ו-Bitrix
מדוע Middleware עדיף על אינטגרציות ישירות
חיבורים ישירים הופכים את הארכיטקטורה לרשת קורים. כל מערכת חדשה דורשת שינויים בכל הקישורים הקיימים. ה-middleware מפחית שגיאות סנכרון פי שלושה בזכות תור משימות אחיד ויומן ריכוזי. כאשר מתרחש כשל, יש צורך להפעיל מחדש רק רכיב אחד במקום לתקן כל קישור בנפרד. המהנדסים שלנו, עם ניסיון של למעלה מעשר שנים ב-Bitrix ו-1C, מבטיחים יציבות גם בעומסי שיא. במהלך השנים השלמנו יותר מ-50 פרויקטי אינטגרציה.
טיפול בשגיאות ב-Middleware
תור המשימות משתמש במנגנון backoff: אם משימה נכשלת, היא מנוסה אוטומטית לאחר 5 דקות. מקסימום 3 ניסיונות, ולאחר מכן השגיאה נרשמת ב-SyncLog. משימות אחרות אינן חסומות — כל פריט מסתנכרן באופן עצמאי. כך הבעיות ממוקמות ללא אובדן נתונים.
כיצד פועל תור המשימות
התור בנוי על Redis ו-Horizon (Laravel) או פתרון מקביל. כל משימה היא מחלקה המיישמת את ממשק ShouldQueue. במקרה של כשל, המשימה מנוסה עם backoff אקספוננציאלי. כך מובטח שכשלים זמניים (למשל, חוסר זמינות API) לא יובילו לאובדן נתונים.
ארכיטקטורה וערימה טכנית
[1С] ←→ [Middleware] ←→ [Битрикс] ←→ [CRM] ←→ [Маркетплейс] ה-middleware הוא יישום נפרד (PHP, Node.js, Python, Go — בהתאם לערימה של הצוות). הליבה שלו:
- מתאמי חיבור: קריאה/כתיבה לכל מערכת דרך ה-API שלה
- מיפוי נתונים: המרת אובייקטים מפורמט של מערכת אחת לפורמט של אחרת
- תור משימות: אחסון משימות סנכרון והבטחת ניסיונות חוזרים במקרה של כשל
- יומן החלפה: היסטוריה של כל הפעולות עם תוצאות
- כללי תצורה: אילו שדות לסנכרן, כיוון, טרנספורמציות
מתאמים וממפים
דוגמה למתאם ל-Bitrix דרך REST API:
class BitrixAdapter { private string $webhookUrl; public function getOrders(array $filter = []): array { $response = $this->call('crm.deal.list', [ 'filter' => $filter, 'select' => ['ID', 'TITLE', 'STAGE_ID', 'OPPORTUNITY', 'UF_ORDER_ID'], ]); return $response['result'] ?? []; } public function updateProductStock(int $productId, int $quantity): bool { $response = $this->call('catalog.storeProduct.update', [ 'id' => $productId, 'fields' => ['AMOUNT' => $quantity], ]); return $response['result'] ?? false; } public function createOrder(array $fields): int { $response = $this->call('sale.order.add', ['fields' => $fields]); return $response['result']['order']['id'] ?? 0; } private function call(string $method, array $params = []): array { $response = file_get_contents( $this->webhookUrl . $method . '.json?' . http_build_query($params) ); return json_decode($response, true); } } רשימת השיטות המלאה מתוארת ב-Bitrix24 REST API. ממפה עם כללי טרנספורמציה:
class ProductMapper { private array $categoryMapping; private array $propertyMapping; public function oneCToBitrix(array $oneCProduct): array { return [ 'IBLOCK_ID' => config('bitrix.catalog_iblock_id'), 'XML_ID' => $oneCProduct['Ref_Key'], 'NAME' => $oneCProduct['Description'], 'ACTIVE' => $oneCProduct['DeletionMark'] ? 'N' : 'Y', 'DETAIL_TEXT' => $oneCProduct['КомментарийДляСайта'], 'IBLOCK_SECTION_ID' => $this->mapCategory($oneCProduct['ОсновнаяТоварнаяГруппа_Key']), 'PROPERTY_ARTICLE' => $oneCProduct['Артикул'], 'PROPERTY_WEIGHT' => $oneCProduct['Вес'] * 1000, 'PROPERTY_BRAND' => $this->resolveBrand($oneCProduct['Производитель_Key']), ]; } } תור ואמינות
class SyncProductsJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public int $tries = 3; public int $backoff = 300; public function handle(OneCAdapter $oneC, BitrixAdapter $bitrix, ProductMapper $mapper): void { $products = $oneC->getModifiedProducts($this->sinceDate); foreach ($products as $oneCProduct) { try { $bitrixFields = $mapper->oneCToBitrix($oneCProduct); $bitrix->upsertProduct($bitrixFields); SyncLog::create([...]); } catch (\Exception $e) { SyncLog::create([...]); } } } } ניטור
middleware ללא ממשק ניהול הוא קופסה שחורה. לוח מחוונים מינימלי:
- סטטוס סשנים אחרונים של החלפה (הצלחה / שגיאה / זמן)
- רשימת שגיאות עם אפשרות לניסיון חוזר
- סטטיסטיקות: מספר אובייקטים מסונכרנים ליום/שבוע
- הפעלת סנכרון ידנית עבור אובייקטים בודדים או סוגי נתונים
מיושם כממשק אינטרנט פשוט של Laravel/Symfony או דרך Laravel Horizon.
מה כלול בעבודה
| שלב | תוצר |
|---|---|
| אודיט מערכות | ניתוח החלפות קיימות, גרסאות, נפחים. דיאגרמת ארכיטקטורה. |
| עיצוב | תכנית middleware, בחירת ערימה, מפרט מתאמים וממפים. |
| יישום | קוד למתאמים, ממפים, תורים, רישום, לוח מחוונים. |
| בדיקות | בדיקות עומס, בדיקת מקרי קצה, התאמות. |
| תיעוד | מדריך תפעול, תיאור API, תכנית פריסה. |
| הדרכה | סשן למנהלי מערכת, העברת גישה. |
| תמיכה באחריות | חודשיים לאחר המסירה — תיקוני באגים, ייעוץ. |
תהליך הפיתוח
| שלב | תיאור |
|---|---|
| אודיט מערכות | ניתוח גרסאות 1C ו-Bitrix, החלפות קיימות, נפח נתונים. זיהוי צווארי בקבוק. |
| עיצוב ארכיטקטורה | פיתוח תכנית middleware, קביעת ערימה, מתאמים, מיפוי. |
| יישום מתאמים וממפים | כתיבת קוד חיבור לכל מערכת וכללי טרנספורמציה. |
| הגדרת תור ורישום | יישום תור משימות (Redis + Horizon) ויומן SyncLog. |
| פיתוח לוח מחוונים | יצירת ממשק לניטור וניהול ידני של החלפות. |
| בדיקות וניפוי באגים | ביצוע בדיקות עומס, תפיסת מקרי קצה. |
| תיעוד והדרכה | מסירת מסמכי ארכיטקטורה והוראות למנהלים. |
לוח זמנים לפיתוח
| היקף ה-Middleware | לוח זמנים |
|---|---|
| שני מתאמים (1C + Bitrix) + 2–3 ממפים + תור | 3–5 שבועות |
| + מערכת שלישית (CRM) + מיפוי מורחב | +2–3 שבועות |
| + ניטור לוח מחוונים + שליטה ידנית | +1–2 שבועות |
| מערכת מלאה ל-5+ מערכות | 3–6 חודשים |
צרו קשר לייעוץ. בקשו אודיט — המהנדסים שלנו יעריכו את הפרויקט שלכם ויציעו את הפתרון האופטימלי.







