הטמעת ייבוא מוצרים מ-1C (CommerceML/XML)

כל ייצוא מ-1C הוא ייחודי, ופענוחים סטנדרטיים נכשלים לעיתים קרובות עם מבני XML לא סטנדרטיים. אנו מפתחים מנגנוני ייבוא אדפטיביים המתאימים את עצמם לתצורת ה-CommerceML שלך. הצוות שלנו מספק אינטגרציה מלאה, מניתוח הייצוא ועד לפריסה ותמיכה שוטפת, ומבטיח חילופי נתונים יציבים גם כאשר 1C משתנה.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הטמעת ייבוא מוצרים מ-1C (CommerceML/XML)
מורכב
~5 ימים

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

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

כל פרויקט חדש עם 1C מביא איתו הפתעה: מבנה ה-XML שונה מהתצורה הקודמת. השדה Наименование עשוי להיות חובה, בעוד Артикул עשוי להיעדר. קבוצות מוצרים מקוננות בצורה לא אחידה, ותמונות מאוחסנות בארכיון ZIP עם נתיבים בלתי צפויים. אין מפענח אוניברסלי — נדרש מנגנון שמתאים את עצמו לייצוא ספציפי. התמחותנו באינטגרציות 1C נמשכת למעלה מ-8 שנים, והשלמנו יותר מ-100 פרויקטים. הניסיון שלנו מאפשר לנו לצפות אזורים בעייתיים לפני תחילת הפיתוח ולהבטיח החלפה יציבה גם אם התצורה משתנה. אם אתם זקוקים לייבוא מוצרים אמין מ-1C, צרו קשר — ננתח את הייצוא שלכם תוך יום אחד.

CommerceML הוא תקן החלפת נתונים המומלץ על ידי 1C להעברת קטלוגים והזמנות בין מערכות. להלן נפרק מה זה.

מדוע ייבוא CommerceML דורש התאמה אישית?

אפילו עם ייצוא סטנדרטי, ייתכנו סטיות: GUID חסר, שמות מאפיינים לא תקניים, קינון קבוצות ביותר מ-3 רמות. ללא מיפוי שדות, האתר יאבד חלק מהנתונים או יקרוס עם שגיאה. אנו מגדירים את ההתאמה בין שדות ה-XML למודלים של האתר שלכם בשלב הניתוח.

תקן CommerceML

1C מייצאת נתונים בארכיוני ZIP עם מספר סוגים של קבצי XML:

import.zip
├── import.xml — каталог товаров, категории, свойства
├── offers.xml — склады, цены, остатки
└── import0.xml — продолжение каталога (при разбивке на файлы)

מבנה של import.zip ├── import.xml — каталог товаров, категории, свойства ├── offers.xml — склады, цены, остатки └── import0.xml — продолжение каталога (при разбивке на файлы) :

<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.10">
  <Каталог>
    <Группы>
      <Группа>
        <Ид>f47ac10b-58cc-4372-a567-0e02b2c3d479</Ид>
        <Наименование>Электроника</Наименование>
        <Группы>
          <Группа>
            <Ид>6ba7b810-9dad-11d1-80b4-00c04fd430c8</Ид>
            <Наименование>Смартфоны</Наименование>
          </Группа>
        </Группы>
      </Группа>
    </Группы>
    <Товары>
      <Товар>
        <Ид>550e8400-e29b-41d4-a716-446655440000</Ид>
        <Артикул>IPH-15-PRO-256</Артикул>
        <Наименование>iPhone 15 Pro 256GB Natural Titanium</Наименование>
        <ЗначенияСвойств>
          <ЗначениеСвойства>
            <Ид>color-property-id</Ид>
            <Значение>Natural Titanium</Значение>
          </ЗначениеСвойства>
        </ЗначенияСвойств>
        <Картинка>images/iphone15pro.jpg</Картинка>
      </Товар>
    </Товары>
  </Каталог>
</КоммерческаяИнформация>

כיצד מאורגן פרוטוקול ההחלפה?

1C יוזמת החלפה באמצעות בקשות HTTP לאתר. האתר מיישם handler בכתובות URL ספציפיות:

GET /1c-exchange/?type=catalog&mode=checkauth
GET /1c-exchange/?type=catalog&mode=init
POST /1c-exchange/?type=catalog&mode=file&filename=import.zip
GET /1c-exchange/?type=catalog&mode=import&filename=import.xml

רצף:

  1. import.xml — 1C בודקת אימות
  2. <?xml version="1.0" encoding="UTF-8"?> <КоммерческаяИнформация ВерсияСхемы="2.10"> <Каталог> <Группы> <Группа> <Ид>f47ac10b-58cc-4372-a567-0e02b2c3d479</Ид> <Наименование>Электроника</Наименование> <Группы> <Группа> <Ид>6ba7b810-9dad-11d1-80b4-00c04fd430c8</Ид> <Наименование>Смартфоны</Наименование> </Группа> </Группы> </Группа> </Группы> <Товары> <Товар> <Ид>550e8400-e29b-41d4-a716-446655440000</Ид> <Артикул>IPH-15-PRO-256</Артикул> <Наименование>iPhone 15 Pro 256GB Natural Titanium</Наименование> <ЗначенияСвойств> <ЗначениеСвойства> <Ид>color-property-id</Ид> <Значение>Natural Titanium</Значение> </ЗначениеСвойства> </ЗначенияСвойств> <Картинка>images/iphone15pro.jpg</Картинка> </Товар> </Товары> </Каталог> </КоммерческаяИнформация> — מקבלת מגבלות (גודל קובץ מקסימלי, zip או לא)
  3. GET /1c-exchange/?type=catalog&mode=checkauth GET /1c-exchange/?type=catalog&mode=init POST /1c-exchange/?type=catalog&mode=file&filename=import.zip GET /1c-exchange/?type=catalog&mode=import&filename=import.xml — מעלה קבצי XML
  4. checkauth — מבקשת ייבוא של קובץ ספציפי

מימוש handler (PHP/Laravel)

class OnecExchangeController extends Controller
{
    public function handle(Request $request)
    {
        $mode = $request->query('mode');
        return match($mode) {
            'checkauth' => $this->checkAuth($request),
            'init' => $this->init(),
            'file' => $this->uploadFile($request),
            'import' => $this->importFile($request),
            default => response('failure', 400),
        };
    }

    private function checkAuth(Request $request): Response
    {
        // 1С отправляет логин/пароль в Basic Auth
        if (!$this->validateCredentials($request)) {
            return response("failure\nНеверный логин или пароль");
        }
        $cookie = Str::random(32);
        Cache::put("1c_session_{$cookie}", true, 600);
        return response("success\nCOOKIE\n1c_session={$cookie}");
    }

    private function init(): Response
    {
        return response(implode("\n", [
            'zip=yes',
            'file_limit=' . (32 * 1024 * 1024), // 32MB
        ]));
    }

    private function uploadFile(Request $request): Response
    {
        $filename = $request->query('filename');
        $request->file('file')->storeAs('1c-exchange', $filename);
        return response('success');
    }

    private function importFile(Request $request): Response
    {
        $filename = $request->query('filename');
        ImportFrom1cJob::dispatch($filename);
        return response('success');
    }
}

ניתוח XML

XML של 1C משתמש בתגיות קיריליות ב-namespace. ניתוח באמצעות SimpleXML/DOMDocument הוא פשוט:

class CommerceMLParser {
    public function parseImport(string $xmlPath): void
    {
        $xml = simplexml_load_file($xmlPath, 'SimpleXMLElement', LIBXML_NOCDATA);
        $catalog = $xml->Каталог;

        // Рекурсивно обрабатываем дерево категорий
        $this->processGroups($catalog->Группы->Группа);

        // Товары
        foreach ($catalog->Товары->Товар as $item) {
            $this->processProduct($item);
        }
    }

    private function processProduct(SimpleXMLElement $item): void
    {
        $guid = (string) $item->Ид;
        $sku = (string) $item->Артикул;
        $name = (string) $item->Наименование;

        // Свойства товара
        $attributes = [];
        foreach ($item->ЗначенияСвойств->ЗначениеСвойства as $prop) {
            $attributes[(string)$prop->Ид] = (string)$prop->Значение;
        }

        Product::updateOrCreate(
            ['onec_guid' => $guid],
            ['sku' => $sku, 'name' => $name, 'attributes' => $attributes]
        );
    }
}

עיבוד הקובץ init (מחירים, מלאי) דומה. לאחר ניתוח המאפיינים, רשומות מסד הנתונים מתעדכנות:

public function parseOffers(string $xmlPath): void
{
    $xml = simplexml_load_file($xmlPath);
    $packageOffers = $xml->ПакетПредложений;
    foreach ($packageOffers->Предложения->Предложение as $offer) {
        $guid = (string) $offer->Ид;
        $price = (float) $offer->Цены->Цена->ЦенаЗаЕдиницу;
        $stock = (int) $offer->Количество;
        Product::where('onec_guid', $guid)->update([
            'price' => $price,
            'stock' => $stock,
        ]);
    }
}

ייבוא אסינכרוני

קטלוגים גדולים (10,000+ פריטים) לא ניתנים לעיבוד סינכרוני — 1C מצפה לתגובה תוך שניות. פתרון:

  • הקובץ נשמר מיד (file)
  • import מחזיר class OnecExchangeController extends Controller { public function handle(Request $request) { $mode = $request->query('mode'); return match($mode) { 'checkauth' => $this->checkAuth($request), 'init' => $this->init(), 'file' => $this->uploadFile($request), 'import' => $this->importFile($request), default => response('failure', 400), }; } private function checkAuth(Request $request): Response { // 1С отправляет логин/пароль в Basic Auth if (!$this->validateCredentials($request)) { return response("failure\nНеверный логин или пароль"); } $cookie = Str::random(32); Cache::put("1c_session_{$cookie}", true, 600); return response("success\nCOOKIE\n1c_session={$cookie}"); } private function init(): Response { return response(implode("\n", [ 'zip=yes', 'file_limit=' . (32 * 1024 * 1024), // 32MB ])); } private function uploadFile(Request $request): Response { $filename = $request->query('filename'); $request->file('file')->storeAs('1c-exchange', $filename); return response('success'); } private function importFile(Request $request): Response { $filename = $request->query('filename'); ImportFrom1cJob::dispatch($filename); return response('success'); } } מיד
  • העיבוד רץ ברקע באמצעות Laravel Queue / Celery
  • ההתקדמות זמינה דרך endpoint נפרד או ממשק ניהול

כיצד מטפלים בתמונות במהלך הייבוא?

1C מייצאת נתיבי תמונות יחסית לארכיון. עיבוד:

  1. פתיחת הארכיון לתיקייה זמנית
  2. עיבוד תמונות (שינוי גודל, המרה ל-WebP)
  3. העלאה ל-CDN/S3
  4. עדכון רשומות מסד הנתונים
דוגמה לעיבוד תמונות
$image = Image::make(storage_path("tmp/{$path}"));
$image->fit(800, 800);
$image->encode('webp', 80);
$s3->put("products/{$guid}.webp", $image->encoded);
Product::where('onec_guid', $guid)->update(['image' => "products/{$guid}.webp"]);

כיצד לטפל בקטלוגים >10,000 פריטים?

עבור קטלוגים גדולים, אנו משתמשים בניתוח streaming באמצעות class CommerceMLParser { public function parseImport(string $xmlPath): void { $xml = simplexml_load_file($xmlPath, 'SimpleXMLElement', LIBXML_NOCDATA); $catalog = $xml->Каталог; // Рекурсивно обрабатываем дерево категорий $this->processGroups($catalog->Группы->Группа); // Товары foreach ($catalog->Товары->Товар as $item) { $this->processProduct($item); } } private function processProduct(SimpleXMLElement $item): void { $guid = (string) $item->Ид; $sku = (string) $item->Артикул; $name = (string) $item->Наименование; // Свойства товара $attributes = []; foreach ($item->ЗначенияСвойств->ЗначениеСвойства as $prop) { $attributes[(string)$prop->Ид] = (string)$prop->Значение; } Product::updateOrCreate( ['onec_guid' => $guid], ['sku' => $sku, 'name' => $name, 'attributes' => $attributes] ); } } . זה מאפשר עיבוד קבצי XML עד 500 MB ללא גלישת זיכרון. תורי רקע (RabbitMQ, Redis) מבטיחים שהייבוא לא חוסם את האתר. אינטגרציה מותאמת אישית מפחיתה שגיאות החלפה פי 3 בהשוואה למודולים סטנדרטיים.

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

ייבוא מוצרים מתצורת 1C אחת (קטלוג + מחירים + מלאי): 8–12 ימי עסקים. כולל בדיקות על נתוני לקוח אמיתיים וניפוי מקרי קצה של תצורת 1C הספציפית. העלות מחושבת באופן אישי; החיסכון במילוי קטלוג ידני מקזז את ההשקעה בחודשים הראשונים.

מה כלול בעבודה

שלב תוצאה
ניתוח ייצוא 1C תיאור מבנה XML, מיפוי שדות
פיתוח handler Controller עם routes, מפענחים
הגדרת תורים ייבוא רקע באמצעות Laravel Queue
עיבוד תמונות שינוי גודל, WebP, העלאה ל-S3
בדיקות ייבוא קטלוג אמיתי, אימות מקרי קצה
תיעוד מדריך מנהל להפעלת החלפה
הדרכה הדגמת תהליך ייבוא, שאלות ותשובות
תמיכה לאחר השקה 30 ימי ניטור ותיקון באגים

השוואת גישות: מודולים מוכנים מול פיתוח מותאם אישית

קריטריון מודול מוכן (למשל, "1C-Bitrix: החלפת נתונים") אינטגרציה מותאמת אישית
התאמה לתצורת 1C מוגבל לתקן, אי-התאמות תכופות שליטה מלאה במיפוי
ביצועים תלוי במימוש המודול מותאם לקטלוג שלכם
תמיכה בשדות לא תקניים רק מאפיינים סטנדרטיים כל שדה, טרנספורמציות נוספות
עלות חינם או זול השקעה, מוחזרת ביציבות
זמן יישום מיום אחד 8–12 ימים

פיתוח מותאם אישית לרוב יוצא זול יותר בטווח הארוך — במיוחד לחברות עם נומנקלטורה מורכבת (1000+ פריטים, מאפיינים רבים). אנו מבטיחים החלפה יציבה גם אם תצורת 1C משתנה בתוך תקופת האחריות.

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