אינטגרציה של 1C-Bitrix עם МойСклад: היכן מתקלקל החילוף
אינטגרציה של 1C-Bitrix עם МойСклад לרוב נכשלת לא בהתחלה, אלא אחרי כמה שבועות של עבודה, כשהפערים מצטברים. הקלאסיקה: באתר פריט נחשב במלאי, הקונה מבצע הזמנה, אבל במחסן הסחורה כבר אזלה — המנהל מתקשר להתנצל.
הסיבה בדרך כלל היא שהסנכרון של היתרות פועל לפי לוח זמנים פעם בשעה, ולא לפי אירוע, ובין שני מחזורי חילוף מספיקה לעבור מכירה דרך הקמעונאות או המרקטפלייס.
הכשל הטיפוסי השני — אי-התאמה של נומנקלטורה. אותו פריט נרשם במойСклад וב-Bitrix תחת שמות או מק"טים שונים, ההתאמה מתבצעת לפי שם, והחילוף של מוצרים יוצר כפילויות: באתר שני כרטיסים, במחסן אחד. לאחר מכן היתרות מתפזרות בין הכפילויות, ואף באחת מהן לא מתכנסת הכמות האמיתית.
השלישי והיקר ביותר — הזמנות אבודות. אם החילוף נופל באמצע (timeout, מגבלת בקשות, ניתוק החיבור), חלק מההזמנות לא מגיע למחסן, והן מתגלות רק בבדיקה ידנית של הזמנות בסוף החודש. כל בדיקה כזו היא שעות עבודה של המנהל וסיכון לשלוח לא נכון או לא לשלוח בכלל.
כאב נפרד — מחירים ומאפיינים. מחיר הרכישה משתנה במойСклад, אבל באתר נשאר הישן, כי החילוף מוגדר רק ליתרות. או שיחידות המידה לא תואמות: המחסן סופר באריזות, האתר מוכר ביחידות, והיתרה "10" הופכת ל-10 אריזות במקום 10 יחידות.
כל הכשלים האלה נרפאים לא ב"כיוונון נוסף" של מודול מוכן, אלא בסכימת חילוף תקינה: התאמה לפי מפתח יציב, חילוף לפי אירועים, יומן פעולות ובדיקה אוטומטית. מפרקים איך זה נסגר.
מה נותן החיבור בין האתר למחסן: האפקט במספרים
מצבי סנכרון: מה ובאיזו תדירות מסתנכרנים
האינטגרציה של 1C-Bitrix עם МойСклад בנויה סביב שלושה זרמים בלתי תלויים: פריטים ומחירים, יתרות לפי מחסנים, הזמנות והסטטוסים שלהן. אסור לערבב אותם לסנכרון אחד — לכל אחד השהיה מותרת משלו.
היתרות עוברות באופן אינקרמנטלי, רק עבור פריטים שהשתנו: ריצה מלאה של קטלוג של 20-30 אלף SKU אורכת דקות ומעמיסה על שתי המערכות, בעוד שדחיפה דלתא מסתיימת בשניות. ההזמנות עוברות בכיוון ההפוך ודורשות אישור כתיבה, אחרת בעת תקלה בצד המחסן המסמך יוכפל.
עדכניות היתרות ומחיר ההשבתה
המדד המרכזי כאן הוא שיעור ההזמנות שבוצעו לפי יתרה מיושנת. בסנכרון פעם בשעה בתנועה עמוסה הוא מגיע ל-3-5%, וכל הזמנה כזו הופכת לביטול, החזרה ובירור עם הלקוח. מעבר לסנכרון לפי אירוע (שינוי יתרה מפעיל דחיפה) מסיר את עיקר הפערים: היתרה בחלון הראווה מפגרת אחרי המחסן בעשרות שניות.
בנפרד מחושבת עלות ההשבתה — אם הסנכרון נפל, האתר ממשיך למכור לפי החיתוך האחרון, וכל עוד הערוץ שותק יותר, כך גדל מספר הפריטים ה"פנטומיים".
סוגי כשלים שנסגרים בשלב ההטמעה
| מצב סנכרון | מתי מתאים | מגבלות |
|---|---|---|
| לפי לוח זמנים (מנות) | קטלוג קטן, מכירות נדירות | השהיית יתרות, עומס שיא על שתי המערכות |
| לפי אירוע (שינוי ישות) | מכירות פעילות, מגוון רחב | נדרשת הגנה מפני מפולת אירועים בעת עריכה המונית |
| היברידי: אירועים + התאמה לפי לוח זמנים | קטלוג עם עריכות תכופות ועומס גבוה | מורכב יותר לתחזוקה, נדרש ניטור פערים |
ההיברידי סוגר את סוג הכשל המרכזי — פער "שקט", כאשר הסנכרון פורמלית עובד, אבל חלק מהפריטים הפסיקו להתעדכן. התאמת לילה מאתרת פריטים כאלה ובונה אותם מחדש בכוח.
МойСклад מוסר שינויים דרך API עם סמן לפי זמן השינוי — וזה מה שמאפשר לבנות דלתא במקום ריצה מלאה.
איך אנחנו מבצעים הטמעה: שלבי עבודה הנדסית
הטמעת סנכרון בין האתר לניהול המלאי היא לא "לחבר מודול", אלא לבנות זרימת נתונים צפויה: מלאי, מחירים, פריטים, הזמנות וסטטוסים צריכים להתאים לשני הכיוונים בלי תיקונים ידניים. לכן העבודה מתבצעת בשלבים קבועים — מביקורת הסנכרון הנוכחי ועד מסירת מערכת מוגדרת עם תיעוד. להלן הסדר שבו אנחנו מובילים את הפרויקט.
- ביקורת הסנכרון. אנחנו מתעדים את המצב הקיים: אילו ספרים ומסמכים כבר מסונכרנים, לפי אילו שדות מותאמים הפריטים, היכן המלאי והמחירים אינם תואמים, באיזו תדירות נופלות הפעלות הסנכרון. התוצר — מפת צווארי בקבוק ורשימת אי-התאמות שצריך לסגור.
- תכנון סכימת האינטגרציה. אנחנו מגדירים כיוון ועדיפות של הזרימות: פריטים ומחירים — מהמלאי לאתר, הזמנות וסטטוסים — מהאתר למלאי. קובעים כללי התאמה לפי מק"ט וברקוד, התנהגות במקרי כפילות ופריטים שנמחקו, ותקנון ההרצה.
- הגדרת התאמת נתונים. אנחנו מגדירים את ההתאמה בין ספרים, מחסנים, סוגי מחירים, לקוחות וסטטוסי הזמנות. בנפרד מטפלים בפריטים בלי מק"ט ובמוצרים עם וריאציות — דווקא כאן לרוב "נשחק" המלאי.
- סנכרון בדיקה. מריצים את הסנכרון על עותק של הנתונים: ריצה מלאה של הפריטים, ואחר כך הזמנות וסטטוסים. משווים מלאי ומחירים שורה-שורה, בודקים התנהגות בניתוק הקשר ובהרצה חוזרת — הסנכרון צריך להדביק את מה שהוחמץ, ולא לשכפל.
- טיפול בשגיאות וניטור. מגדירים תיעוד יומן של הסנכרון, התראות על תקלות וכללי שליחה חוזרת. האחראי רואה מה בדיוק לא עבר ולמה, בלי לנתח לוגים ידנית.
- מעבר למצב עבודה. מפעילים את הסנכרון לפי התקנון, ובתקופה הראשונה מלווים את הריצות ומשווים את התוצאות. מוודאים שאי-ההתאמות לא מצטברות.
- מסירת תיעוד. מוסרים את סכימת האינטגרציה, תקנון ההרצה, כללי ההתאמה והוראות לעובדים: איך לבדוק את הסנכרון ומה לעשות בתקלה.
כל שלב מסתיים בתוצאה ניתנת לבדיקה, ולא בדוח על העבודות. תארו את המשימה שלכם — נחזור עם הערכה ותוכנית לפי שלבים.
במה שונה החלפה דרך API מייצוא בקבצים?
החלפה דרך API היא סנכרון מבוסס אירועים: שינוי במלאי, במחיר או בסטטוס הזמנה במערכת אחת מפעיל מיד בקשה למערכת השנייה. ייצוא בקבצים פועל לפי לוח זמנים: המערכת יוצרת חבילה (XML, CSV), מניחה אותה בתיקיית ההחלפה, והצד השני לוקח ומפרסר אותה. ההבדל אינו בנוחות, אלא בהשהיית העדכון: API נותן שניות, החלפת קבצים — את המרווח בין הפעלות המשימה.
ההשהיה משפיעה ישירות על מה שהקונה רואה. אם המלאי מתעדכן פעם בשעה, חלק מההזמנות מגיעות על מוצר שכבר אינו במלאי — מתחילות ביטולים, שיחות ידניות, החזרות. בהחלפה דרך API המלאי המוקצה עובר לחנות כמעט באופן מיידי, ושיעור הסירובים האלה יורד למקרים בודדים.
גם האמינות של הסנכרון שונה: API מחזיר קוד תגובה לכל פעולה, ותקלה נראית נקודתית, בעוד שהחלפת קבצים מפספסת בשקט חבילה פגומה — אי-ההתאמה מתגלה רק בהשוואה.
החלפת קבצים לא התיישנה עם זאת. היא מנצחת במקומות שבהם למערכות אין גישה ישירה זו לזו, שבהם הערוץ אינו יציב, או שבהם הנפחים כאלה שעיבוד באצוות זול יותר מבקשות מתמידות. לעתים קרובות בוחרים בהיברידי: ספרי עזר ומחירים נמשכים באצוות בלילה, והזמנות ומלאי — דרך API בזמן אמת. מצב כזה מסיר עומס משתי המערכות ושומר על עדכניות במקום שבו היא קריטית.
הבחירה בשיטת ההחלפה נקבעת לא על ידי אופנה, אלא על ידי פרופיל הנתונים. מוצרים משתנים לעתים רחוקות — אפשר להעביר אותם בחבילות; הזמנות ותנועות מלאי משתנות כל הזמן — להן נדרש API.
אנחנו מתחילים בניתוח אילו ישויות ובאיזו תדירות צריכות להיות זהות, ורק לאחר מכן מתאימים את התעבורה, ולא להפך.
מקרה בוחן: כיצד הסרנו פערי מלאי וכפילויות
הלקוח — סחר סיטונאי עם זרוע קמעונאית: מספר מחסנים, מכירות דרך אתר על 1C-Bitrix וניהול חשבונות ב-МойСклад. לפני כן, ההחלפה בין המערכות התבצעה באמצעות ייצוא לפי לוח זמנים: מוצרים ומחירים הועברו בקבצים פעם ביום, והזמנות מהאתר הוזנו למערכת החשבונות ידנית על ידי מפעיל.
עד למועד הפנייה, פערי המלאי הגיעו ל-12–15% בפריטים פעילים, וההתאמה וההזנה הידנית גזלו 3–4 שעות ביום.
מה היה לפני האינטגרציה
המלאי באתר פיגר אחרי המלאי בפועל ביממה: המנהל מכר מוצר שכבר נשלח, ולהפך — פריטים "מאופסים" שכבו במחסן. הזמנות שוכפלו בשליחה חוזרת של הטופס ובשל עבודה מקבילה של מפעילים, מה שיצר ריזרבות מיותרות ומשלוחים "תלויים" בחשבונות. מחירים של חלק מהנומנקלטורה היו שונים בין האתר למחסן, ואיתור סיבת הפער ארך שעות.
מה שינינו
העברנו את ההחלפה לסנכרון מבוסס אירועים דרך API: שינוי במלאי, במחיר או בסטטוס הזמנה במערכת החשבונות עובר מיד לאתר, והזמנה חדשה מהאתר — למערכת החשבונות עם מזהה ייחודי. המזהה מבטל רישום כפול, ולכן כפילויות אינן נוצרות גם בעת תקלת רשת ושליחה חוזרת.
התאמת מלאי על פני כל הנומנקלטורה נשארה כרשת ביטחון — היא רצה בלילה ומתקנת רק פערים, ולא דורסת הכול מחדש. לוגים של ההחלפה נכתבים ליומן נפרד: ניתן לראות מה ומתי הסתנכרן, והפער מנותח לפי רשומה ולא בחיפוש עיוור.
מדדים לפני ואחרי
| מדד | לפני | אחרי |
|---|---|---|
| פער מלאי | 12–15% | פחות מ-1% |
| הזנת הזמנות ידנית | 3–4 שעות ביום | לא נדרשת |
| כפילויות הזמנות | באופן קבוע | בודדות, נחסמות אוטומטית |
| השהיית עדכון נתונים | עד 24 שעות | דקות |
| התאמת נומנקלטורה | ידנית | ריצה אוטומטית בלילה |
פעולות ידניות במחסן הצטמצמו לבקרת חריגים: המפעיל מטפל רק בפריטים שבהם האוטומציה זיהתה פער. הזמן שהתפנה הופנה לעבודה עם ספקים, ולא להתאמת טבלאות.
ההחלפה בנויה על מנגנון חילופי הנתונים הסטנדרטי של 1C-Bitrix עם מערכת חשבונות חיצונית — הדבר מאפשר לעדכן את לוגיקת הסנכרון בלי לכתוב מחדש את האתר.
ספקות לפני ההתחלה: תאימות, הגירה, חזרה לאחור
החלפת נתונים בין האתר לניהול המלאי מתבצעת דרך ממשק תוכנה מתועד, ולכן השאלה המרכזית אינה "האם זה נתמך", אלא "אילו ישויות ובאיזה כיוון מסונכרנות". אנו מגדירים זאת לפני ההתחלה: פריטי מלאי, יתרות לפי מחסנים, מחירים וסוגי מחירים, לקוחות וספקים, הזמנות והסטטוסים שלהן, הזמנות שמורות.
אם חלק ממאגרי הנתונים מנוהלים רק בצד המחסן, וחלק בקטלוג האתר, אנו קובעים את צד המקור לכל שדה, אחרת רשומות נגדיות יתחילו למחוק זו את זו.
מה אם המחסן כבר מלא, והאתר פעיל? ההגירה מתבצעת בשני שלבים: תחילה התאמה לפי מזהים חיצוניים ומק"טים, לאחר מכן השוואת אי-התאמות בדוח לפני הפעלת הכתיבה. כפילויות ופריטים ללא התאמה חד-חד-ערכית מטופלים בנפרד, ולא "נוספים" באופן אוטומטי.
מה אם משהו ישתבש לאחר ההפעלה? תוכנית החזרה לאחור נשענת על נקודת שחזור של מסד הנתונים ותמונת מצב של הגדרות ההחלפה: החזרה למתאר הקודם אורכת דקות, לא שעות. הרשאות ניתנות לפי עקרון המינימום ההכרחי: חשבון נפרד להחלפה, הרשאות מוגבלות, תיעוד ביומן של כל קריאה.
עד כמה מסובך לחבר החלפה אם הנהונהל מתבצע כבר ב-1С?
החלפה עם 1С והחלפה עם המחסן פותרות משימות שונות ואינן מתנגשות: הראשונה אחראית על המתאר החשבונאי והניהולי, השנייה על היתרות התפעוליות והרכבת ההזמנות. אנו מפרידים את הזרימות לפי מערכי שדות שונים ומגדירים את סדר הפעולות כך שהנתונים לא יגיעו פעמיים. תאימות עם 1С נבדקת על התצורה שלכם לפני תחילת העבודה.
עם המסירה אנו מעבירים:
- תרשים זרימות נתונים עם ציון צד המקור לכל מאגר נתונים;
- תצורות החלפה פעילות ולוח זמנים להרצות;
- טבלת התאמת שדות וכללי חישוב מחדש של מחירים ויחידות מידה;
- מדיניות הרשאות ורשימת חשבונות המעורבים בהחלפה;
- הוראות לתוכנית החזרה לאחור ושחזור מנקודת שמירה;
- יומן הרצות בדיקה עם תוצאות השוואה לפני ואחרי הפעלת הכתיבה.
תארו את התצורה שלכם ואת המתאר הנוכחי של הנהונהל — נחזור עם הערכה, תרשים החלפה ותוכנית הגירה.
לוחות זמנים ליישום האינטגרציה לפי שלבים
לוחות הזמנים אינם תלויים בהיקף הקוד, אלא במידת המהירות שבה מצליחים להסכים על כללי החלפת הנתונים: אילו מחסנים משתתפים, כיצד מותאמים פריטי המלאי והקבלנים, ומה עושים עם אי-התאמות ביתרות. לכן אנו קובעים תוכנית-לוח זמנים לפי שלבים — הלקוח רואה היכן נמצא הפרויקט ומה נדרש ממנו בכל צעד.
משך ההגדרה נקבע בראש ובראשונה על ידי איכות נתוני המקור: אם פריטי המלאי בשתי המערכות מנוהלים באופן כאוטי, שלב ההתאמה מתארך, ואנו מוציאים אותו כבלוק נפרד בתוכנית-לוח הזמנים.
לוחות הזמנים המשוערים לעיל — עבור מתאר טיפוסי; כאשר קיימים מספר ישויות משפטיות, סטטוסי הזמנות לא סטנדרטיים או החלפה עם פלטפורמות חיצוניות, השלבים מתווספים, ואנו מתאמים זאת לפני ההתחלה, ולא תוך כדי העבודה.
השלבים מתנהלים בחפיפה חלקית: התכנון מתחיל בעוד הסקר בעיצומו, וסביבת הבדיקה מוכנה במקביל להגדרה. הדבר מקצר את משך היישום הכולל, אך אינו מבטל נקודות בקרה — לאחר כל שלב הלקוח מקבל תוצאה שניתן לבדוק.

