כיצד להימנע מבעיות סימון עם 1C-Bitrix
חנות בגדים מקוונת עם 50,000 פריטים. כל הזמנה דורשת בדיקת קוד הסימון. ללא אוטומציה, מנהלים מבזבזים שעות, וכל קוד עשירי כבר נמכר — החזרות, קנסות של עד $2.7k–3.9k. מאז שהוכנסה חובת הסימון, רוב קבוצות המוצרים נופלות תחת מערכת Chestny Znak. ללא אוטומציה, אתה מסכן לא רק הכנסות אלא גם מוניטין. המהנדסים שלנו מגדירים סימון מוצרים על 1C-Bitrix כך שהקודים נשמרים בעת הוספה לעגלה, מועברים בקבלה לפי 54-FZ, ומוסרים מהמחזור כראוי. שגיאות סימון הן אחת הסיבות העיקריות לקנסות במהלך בדיקות, כשהקנס הממוצע מגיע ל-$2.7k–3.9k. אוטומציה מבטלת את הגורם האנושי ומבטיחה עמידה בחוק. אנחנו עובדים במתכונת מפתח-בשלב עם תוצאה מובטחת.
אילו קשיים מתעוררים בעת אינטגרציה עם Chestny Znak?
הבעיות העיקריות כוללות:
- אחסון שגוי של קודים. אם קודים מאוחסנים במאפיין אינפובלוק רגיל, עם נפחים גדולים (10,000+ קודים) האחזור מואט, ושלמות טרנזקציונלית אינה מובטחת. זה מוביל לכפילויות ולמכירה של קודים שכבר הוסרו מהמחזור.
- שגיאות בהעברה לקבלה. קוד הסימון חייב להיות מועבר בתג 1163 (DataMatrix). לא כל מודולי הקופה תומכים בזה כברירת מחדל — נדרשת התאמה אישית.
- חוסר בשמירה. ללא מנגנון שמירה, קוד בודד יכול להימכר פעמיים, מה שמסכן סירוב לפיסקליזציה וקנס.
- הסרה שגויה מהמחזור. לאחר מכירה, יש להסיר את הקוד מהמחזור ב-GIS MT. אם לא — פערי נתונים וחסימת מלאי.
כיצד לאחסן קודי סימון ב-Bitrix?
אנו משתמשים בשתי גישות — הבחירה תלויה בנפחים. השוו ביניהן:
| קריטריון | מאפיין אינפובלוק | טבלה נפרדת |
|---|---|---|
| מהירות אחזור | איטית יותר עם >10,000 קודים | מהירה עם אינדקסים |
| מורכבות יישום | פשוטה (הוספת מאפיין) | דורשת יצירת טבלה ומטפלים |
| שימוש בשטח | בטבלת מאפייני אינפובלוק | טבלה נפרדת |
| תמיכה בטרנזקציות | לא | כן (InnoDB) |
| מתאים ל | עד 10,000 קודים | כל נפח |
עבור רוב הפרויקטים עם מחזור שנתי של 20,000+ קודים, אנו ממליצים על טבלה נפרדת. היא עובדת פי 10 מהר יותר עבור נפחים גדולים. כך יוצרים אותה:
CREATE TABLE b_marking_codes ( ID INT AUTO_INCREMENT PRIMARY KEY, PRODUCT_ID INT NOT NULL, CODE VARCHAR(255) NOT NULL UNIQUE, STATUS ENUM('available', 'reserved', 'sold', 'returned') DEFAULT 'available', ORDER_ID INT NULL, DATE_SOLD DATETIME NULL, INDEX idx_product_status (PRODUCT_ID, STATUS), INDEX idx_code (CODE) ); דוגמה לשמירת קוד בעת הוספה לעגלה
השמירה מתבצעת באירוע `OnSaleBasketBeforeSaved`. אנו משתמשים בנעילת `SELECT ... FOR UPDATE` כדי למנוע מצבי מרוץ. לאחר נעילה מוצלחת, הסטטוס משתנה ל-'reserved', והקוד מקושר למזהה ההזמנה. אם הקוד כבר שמור, נבחר הקוד הפנוי הבא.כיצד להעביר את קוד הסימון לקבלה לפי 54-FZ?
לפי 54-FZ, קוד הסימון חייב להיות מועבר בקבלה. אנו מתאימים אישית את מטפל מודול הקופה כך שהקוד נשלף ממאפייני פריטי העגלה. דוגמה עבור ATOL Online:
AddEventHandler('sale', 'OnCashboxBuildCheck', function($checkData) { foreach ($checkData['ITEMS'] as &$item) { $basketItemId = $item['BASKET_ID'] ?? null; if ($basketItemId) { $res = \Bitrix\Sale\Internals\BasketPropertiesTable::getList([ 'filter' => ['BASKET_ID' => $basketItemId, 'CODE' => 'MARKING_CODE'], 'select' => ['VALUE'] ]); if ($prop = $res->fetch()) { $item['MARKING_CODE'] = $prop['VALUE']; } } } return $checkData; }); באופן דומה, אנו מטפלים בשמירת קוד בעת הוספה לעגלה (אירוע CREATE TABLE b_marking_codes ( ID INT AUTO_INCREMENT PRIMARY KEY, PRODUCT_ID INT NOT NULL, CODE VARCHAR(255) NOT NULL UNIQUE, STATUS ENUM('available', 'reserved', 'sold', 'returned') DEFAULT 'available', ORDER_ID INT NULL, DATE_SOLD DATETIME NULL, INDEX idx_product_status (PRODUCT_ID, STATUS), INDEX idx_code (CODE) ); ) ובהסרה מהמחזור לאחר תשלום (AddEventHandler('sale', 'OnCashboxBuildCheck', function($checkData) { foreach ($checkData['ITEMS'] as &$item) { $basketItemId = $item['BASKET_ID'] ?? null; if ($basketItemId) { $res = \Bitrix\Sale\Internals\BasketPropertiesTable::getList([ 'filter' => ['BASKET_ID' => $basketItemId, 'CODE' => 'MARKING_CODE'], 'select' => ['VALUE'] ]); if ($prop = $res->fetch()) { $item['MARKING_CODE'] = $prop['VALUE']; } } } return $checkData; }); ).
כיצד אנו פותרים משימות אלה: מקרה מבחן מהפרקטיקה שלנו
לאחרונה, הגדרנו סימון עבור לקוח — חנות בגדים מקוונת עם 50,000 מוצרים ו-300,000 קודים בשנה. בתחילה, קודים אוחסנו במאפיין אינפובלוק — האחזור ארך עד 2 שניות, וסכסוכי שמירה היו נפוצים. העברנו נתונים לטבלה נפרדת, הוספנו מנגנון נעילת OnSaleBasketBeforeSaved, ועיצבנו מחדש את מטפלי העגלה. תוצאה: מהירות עיבוד ההזמנות ירדה ב-40%, ומכירות ללא שגיאות קודים ירדו לאפס. הלקוח חסך יותר מ-$4.5k–6.5k בשנה מקנסות והחזרות שנמנעו.
תהליך העבודה
- ניתוח — לימוד מבנה הקטלוג, עומס, קופה נוכחית, וחילופי 1C.
- תכנון — בחירת ארכיטקטורת אחסון, תכנון שמירה והסרה מהמחזור.
- יישום — כתיבת קוד אחסון, מטפלים לעגלה ולקופה, ייבוא קודים.
- בדיקות — בדיקת כל התרחישים: שמירה, ביטול, החזרות, מכירות מרובות-תהליכים.
- פריסה — פריסה לשרת ייצור, הגדרת ניטור.
- הדרכה — מסירת תיעוד, הדרכת מנהלים ורואי חשבון.
לוחות זמנים ומה כלול
לוחות זמנים משוערים: הגדרה בסיסית (עד 10,000 קודים) — 5-7 ימי עבודה, מקיפה (מ-100,000 קודים) — עד 3 שבועות.
| שלב | משך |
|---|---|
| יישום אחסון קודים (מאפיין או טבלה) | 1-2 ימים |
| מטפלי שמירה והסרה מהמחזור | 2-3 ימים |
| התאמת מודול הקופה להעברת קוד בקבלה | 1-2 ימים |
| הגדרת ייבוא קודים מקבצי ספקים | יום אחד |
| אינטגרציה עם 1C (אם נדרש) | 2-5 ימים |
| תיעוד והדרכת עובדים | יום אחד |
| תמיכה באחריות למשך 3 חודשים | כלול |
המהנדסים שלנו מחזיקים בהסמכות 1C-Bitrix ויש להם ניסיון של 10+ שנים בפיתוח. השלמנו יותר מ-50 פרויקטי אינטגרציית סימון. צור קשר — נעריך את הפרויקט שלך בחינם. לייעוץ ובדיקת הקטלוג שלך, השאר בקשה — ננתח את המבנה ונציע פתרון אופטימלי.
טעויות אופייניות בהגדרת סימון
- אחסון קודים במאפיינים רגילים ללא אינדקסים — מוביל להאטות ככל שהקטלוג גדל.
- ללא שמירה לפני תשלום — סיכון למכירת קוד אחד פעמיים.
- מילוי שגוי של תג 1163 — הקופה מסרבת לפיסקליזציה של הקבלה.
- התעלמות מהחזרות — אם הקוד לא מוחזר למחזור, המלאי חורג מ-GIS MT.
אנו מבטיחים שלאחר ההגדרה שלנו, כל הבעיות הללו ייפתרו. קבל ייעוץ מהנדס בחינם.







