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

העברה ידנית של מוצרים מ-Excel, XML או JSON ל-1C-Bitrix אורכת ימים ומועדת לשגיאות, בעוד שכלים סטנדרטיים נכשלים עם פורמטים לא סטנדרטיים ונפחים גדולים. אנחנו בונים מודול ייבוא במפתח מלא שמבצע אוטומציה של טעינת נתונים ועדכונים ללא אובדן שדות חשובים. הצוות שלנו מוביל את הפרויקט משלב הבדיקה ועד ההטמעה ומבטיח פעילות יציבה עם תמיכה מתמשכת.
השירותים שאנו מציעים
מציג 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 בין:active,inactive,pending

שורות עם שגיאות מתועדות ב-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 יומיים
מיפוי, Transformer, מגדיר יומיים
Writers לישויות Bitrix ספציפיות 3 ימים
עיבוד זורם, סוכנים יומיים
אימות, רישום לוגים, דוח שגיאות יום אחד
ממשק ניהולי, בדיקות יומיים

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