פיתוח מודול ייבוא נתונים ל-1C-Bitrix

העברת מוצרים ידנית מ-Excel או מ-XML/JSON לא סטנדרטי ל-1C-Bitrix אורכת שבועות וכרוכה בסיכון לשגיאות. אנחנו בונים מודול ייבוא במפתח מלא שמבצע אוטומציה של טעינת כל נתון—מקטלוג ועד CRM. הצוות שלנו מטפל בכל המחזור: ביקורת, פיתוח, הטמעה ותמיכה, כך שאתם מקבלים פתרון אמין ללא החמצת מועדים.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
פיתוח מודול ייבוא נתונים ל-1C-Bitrix
בינוני
~1-2 שבועות

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

שאלות נפוצות

פיתוח מודול ייבוא נתונים מותאם אישית ל-1C-Bitrix

לקוח הביא קובץ Excel עם 15,000 שורות של מאפייני מוצר ייחודיים. ה-CommerceML המובנה לא יכול היה להתמודד עם הפורמט המותאם אישית — היינו צריכים לעדכן פריטים קיימים מבלי לגעת במחירים או במלאי. הזנה ידנית הייתה אורכת חודש. בנינו מודול ייבוא מותאם אישית ב-13 ימי עבודה. עם ניסיון של למעלה מ-10 שנים בפיתוח Bitrix ויותר מ-50 פרויקטי אינטגרציה שהושלמו, אנו מבטיחים ביצועים יציבים תחת עומס. אתה מקבל פתרון שחוסך פי 10 מהזמן בהשוואה להעלאה ידנית.

המודול הסטנדרטי catalog תומך בייבוא דרך CSaleImport ו-CDataExchangeXML עבור CommerceML 2.x. הוא עובד היטב עבור קטלוגים פשוטים. בעיות מתעוררות עם פורמטים שרירותיים (Excel, JSON, XML עם סכמות לא סטנדרטיות), ייבוא מרובה-אינפובלוקים, עדכון רשומות קיימות עם לוגיקת מיזוג, ייבוא משתמשים, הזמנות, ישויות CRM, וקבצים גדולים (10,000+ שורות) ללא פסקי זמן. מודול מותאם אישית פותר את אלה באמצעות עיבוד זורם ומיפוי ניתן להגדרה.

המודול vendor.importer בנוי על שלוש הפשטות: Reader (קורא מקור), Transformer (ממיר נתונים), ו-Writer (כותב לתוך Bitrix). ארכיטקטורה זו מאפשרת חיבור כל מקור ויעד ללא שינוי בליבה. מידע נוסף על הפלטפורמה ניתן למצוא בויקיפדיה.

איך המודול עובד

המודול vendor.importer סובב סביב Reader, Transformer ו-Writer.

SourceFile → Reader → RawRow[] → Transformer → MappedRow[] → Writer → Bitrix entities 

ReaderInterface:

interface ReaderInterface {
    public function open(string $filePath): void;
    public function readNext(): ?array; // null = конец файла
    public function getHeaders(): array;
    public function close(): void;
}

מימושים: SourceFile → Reader → RawRow[] → Transformer → MappedRow[] → Writer → Bitrix entities , interface ReaderInterface { public function open(string $filePath): void; public function readNext(): ?array; // null = конец файла public function getHeaders(): array; public function close(): void; } (דרך CsvReader), XlsxReader (דרך PhpSpreadsheet לעיבוד זורם של קבצים גדולים), XmlReader.

מיפוי שדות — פיתוח מודול ייבוא

תצורת המיפוי מאוחסנת ב-XMLReader:

{
  "source": "csv",
  "target": "catalog_product",
  "iblock_id": 5,
  "fields": {
    "article": "PROPERTY_ARTICLE",
    "name": "NAME",
    "price": "CATALOG_PRICE_1",
    "stock": "CATALOG_STORE_PRODUCT_AMOUNT"
  },
  "key_field": "article",
  "update_strategy": "merge"
}

JsonReader מגדיר את השדה לזיהוי רשומות קיימות. b_vendor_importer_mapping:

  • { "source": "csv", "target": "catalog_product", "iblock_id": 5, "fields": { "article": "PROPERTY_ARTICLE", "name": "NAME", "price": "CATALOG_PRICE_1", "stock": "CATALOG_STORE_PRODUCT_AMOUNT" }, "key_field": "article", "update_strategy": "merge" } — מעדכן רק שדות ממופים;
  • key_field — החלפה מלאה;
  • update_strategy — דילוג על קיימות.

איך מטפלים בקבצים גדולים

ייבוא של 50,000 שורות בבקשה אחת של HTTP אינו אפשרי. אנו משתמשים בסוכנים:

// Шаг 1: загрузка файла, задание
$job = ImportJobTable::add([
    'FILE_PATH' => $uploadedPath,
    'MAPPING_ID' => $mappingId,
    'STATUS' => 'pending',
    'TOTAL' => 0,
    'PROCESSED' => 0,
]);

// Шаг 2: агент обрабатывает порциями
public static function processChunk(int $jobId, int $offset, int $limit = 100): string
{
    $job = ImportJobTable::getById($jobId)->fetch();
    $reader = ReaderFactory::create($job['FILE_PATH']);
    $reader->open($job['FILE_PATH']);
    // пропускаем offset строк, читаем limit строк
    // записываем, обновляем PROCESSED
    return "\\Bitrix\\Main\\Agent::executeImporter($jobId, $newOffset);";
}

הסוכן רץ כל דקה; ההתקדמות נראית בלוח הניהול בזמן אמת. עיבוד זורם מהיר פי 10 מייבוא בבקשה אחת.

Writer: כתיבה לאינפובלוק

class IblockElementWriter implements WriterInterface {
    public function write(MappedRow $row): WriteResult {
        $existing = $this->findByKey($row->getKeyValue());
        if ($existing) {
            $result = \CIBlockElement::Update($existing['ID'], $row->toIblockArray());
        } else {
            $element = new \CIBlockElement();
            $result = $element->Add($row->toIblockArray());
        }
        return new WriteResult($result !== false, $existing ? 'updated' : 'created');
    }
}

Writers דומים: merge, replace, skip.

אימות נתונים וטיפול בשגיאות

לפני הכתיבה, כל שורה מאומתת. הכללים מוגדרים בתצורה:

שדה כללים
// Шаг 1: загрузка файла, задание $job = ImportJobTable::add([ 'FILE_PATH' => $uploadedPath, 'MAPPING_ID' => $mappingId, 'STATUS' => 'pending', 'TOTAL' => 0, 'PROCESSED' => 0, ]); // Шаг 2: агент обрабатывает порциями public static function processChunk(int $jobId, int $offset, int $limit = 100): string { $job = ImportJobTable::getById($jobId)->fetch(); $reader = ReaderFactory::create($job['FILE_PATH']); $reader->open($job['FILE_PATH']); // пропускаем offset строк, читаем limit строк // записываем, обновляем PROCESSED return "\\Bitrix\\Main\\Agent::executeImporter($jobId, $newOffset);"; } חובה, אימייל
class IblockElementWriter implements WriterInterface { public function write(MappedRow $row): WriteResult { $existing = $this->findByKey($row->getKeyValue()); if ($existing) { $result = \CIBlockElement::Update($existing['ID'], $row->toIblockArray()); } else { $element = new \CIBlockElement(); $result = $element->Add($row->toIblockArray()); } return new WriteResult($result !== false, $existing ? 'updated' : 'created'); } } חובה, מספרי, מינימום:0
CrmLeadWriter חובה, מקסימום:255
SaleOrderWriter בין: פעיל, לא פעיל, ממתין

שורות עם שגיאות מתועדות ב-UserWriter. לאחר הייבוא, דוח ו-CSV עם שורות בעייתיות זמינים.

שגיאות ייבוא נפוצות
  • אי-התאמה בקידוד הקובץ ל-UTF-8 (נפתר על ידי תצורת Reader).
  • שדות מפתח כפולים (מטופל על ידי הגדרת אסטרטגיה).
  • חריגה ממגבלת זיכרון עם קריאות לא זורמות (אנו משתמשים ב-Readers זורמים).

התראות ורישום לוגים

לאחר השלמה, המודול שולח אימייל ליזם דרך EMAIL: סך השורות, נוצר/עודכן/שגיאות, קישור ללוג.

תהליך הפיתוח

  1. ניתוח פורמט ומיפוי — אנו לומדים את מקורות הנתונים שלך, מסכימים על שדות.
  2. עיצוב ארכיטקטורה — הגדרת Reader, Transformer, Writer.
  3. פיתוח Reader — מימוש מפענחים זורמים לפורמטים שלך.
  4. תצורת מיפוי — הגדרת התאמות שדות.
  5. מימוש Writer — כתיבה לאינפובלוקים, CRM, הזמנות.
  6. עיבוד זורם וסוכנים — הגדרת ייבוא ברקע.
  7. אימות ורישום לוגים — הגדרת כללי בדיקה ולוג שגיאות.
  8. ממשק ניהולי — יצירת דף להפעלה וניטור.
  9. בדיקות ובדיקות עומס — הרצה על נתונים אמיתיים.
  10. תיעוד והדרכה — העברה לצוות.

למה להזמין מודול מותאם אישית?

אנו מומחי 1C-Bitrix מוסמכים עם ניסיון של 10+ שנים. כל מודול עובר בדיקות עומס. אתה מקבל אחריות לפעולה יציבה ותמיכה לאחר ההטמעה. לפי התיעוד הרשמי של 1C-Bitrix, הכלים הסטנדרטיים אינם מכסים פורמטים מותאמים אישית ולוגיקת עדכון מורכבת. המודול שלנו מספק חיסכון משמעותי בהשוואה לעיבוד ידני. לייעוץ והערכה מקדימה, צור איתנו קשר — נכין הצעה מותאמת לצרכים שלך.

לוח זמנים לפיתוח

שלב זמן
ארכיטקטורה, ממשקים, מתקין יום אחד
Readers: CSV, XLSX, XML, JSON יומיים
מיפוי, ממיר, מגדיר יומיים
Writers עבור ישויות Bitrix ספציפיות 3 ימים
עיבוד זורם, סוכנים יומיים
אימות, רישום לוגים, דוח שגיאות יום אחד
ממשק ניהולי, בדיקות יומיים

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