Імпорт товарів з 1С (CommerceML/XML) — кастомна інтеграція

Кожен новий проєкт з 1С приносить сюрприз: XML-структура відрізняється від попередньої конфігурації. Поле `Найменування` може бути обов'язковим, а `Артикул` — відсутнім. Групи товарів вкладені нерівномірно, а зображення лежать у ZIP-архіві з непередбачуваними шляхами. Універсального парсера не існує

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Імпорт товарів з 1С (CommerceML/XML) — кастомна інтеграція
Складний
~5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    997

Кожен новий проєкт з 1С приносить сюрприз: XML-структура відрізняється від попередньої конфігурації. Поле Найменування може бути обов'язковим, а Артикул — відсутнім. Групи товарів вкладені нерівномірно, а зображення лежать у ZIP-архіві з непередбачуваними шляхами. Універсального парсера не існує — потрібен механізм, що адаптується під конкретне вивантаження. Ми спеціалізуємося на інтеграціях 1С понад 8 років, виконали понад 100 проєктів. Досвід дозволяє передбачити проблемні місця до початку розробки та гарантувати стабільний обмін навіть при зміні конфігурації. Якщо вам потрібний надійний імпорт товарів з 1С, зверніться до нас — ми проаналізуємо ваше вивантаження за один день.

CommerceML — це стандарт обміну даними, рекомендований 1С для передачі каталогів та замовлень між системами. Далі розберемо, що він собою являє.

Чому CommerceML-імпорт потребує доопрацювання?

Навіть при стандартному вивантаженні можливі відхилення: відсутність GUID, нестандартні імена властивостей, вкладеність груп більше 3 рівнів. Без маппінгу полів сайт або втратить частину даних, або впаде з помилкою. Ми налаштовуємо відповідність між полями XML та моделями вашого сайту на етапі аналізу.

Стандарт CommerceML

1С вивантажує дані в ZIP-архівах з XML-файлами кількох типів:

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

Структура import.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</Картинка> </Товар> </Товары> </Каталог> </КоммерческаяИнформация> 

Як організований протокол обміну?

1С ініціює обмін через HTTP-запити до сайту. Сайт реалізує обробник на певних 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. checkauth — 1С перевіряє авторизацію
  2. init — отримує ліміти (максимальний розмір файлу, zip чи ні)
  3. file — завантажує XML-файли
  4. import — запитує імпорт конкретного файлу

Реалізація обробника (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 з 1С — це кириличні теги в просторі імен. Парсинг через 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] ); } } 

Обробка файлу offers.xml (ціни, залишки) виконується аналогічно. Після парсингу атрибутів оновлюються записи в БД:

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+ товарів) не можна обробляти синхронно — 1С очікує відповіді протягом кількох секунд. Рішення:

  • Файл зберігається одразу (uploadFile)
  • importFile повертає success негайно
  • Обробка запускається у фоні через Laravel Queue / Celery
  • Прогрес доступний через окремий endpoint або адміністративний інтерфейс

Як обробляються зображення під час імпорту?

1С вивантажує шляхи до картинок відносно архіву. Обробка:

  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 позицій?

Для великих каталогів використовуємо потоковий парсинг через XMLReader. Це дозволяє обробляти XML-файли розміром до 500 МБ без переповнення пам'яті. Фонові черги (RabbitMQ, Redis) гарантують, що імпорт не заблокує роботу сайту. Кастомна інтеграція в 3 рази знижує кількість помилок обміну порівняно з типовими модулями.

Строки та вартість

Імпорт товарів з однієї конфігурації 1С (каталог + ціни + залишки): 8–12 робочих днів. Включає тестування на реальних даних клієнта та налагодження edge-cases конкретної конфігурації 1С. Вартість розраховується індивідуально, економія на ручному заповненні каталогу окупає вкладення в перші місяці.

Що входить в роботу

Етап Результат
Аналіз вивантаження 1С Опис структури XML, маппінг полів
Розробка обробника Контролер з маршрутами, парсери
Налаштування черг Фоновий імпорт через Laravel Queue
Обробка зображень Ресайз, WebP, завантаження в S3
Тестування Імпорт реального каталогу, перевірка edge-cases
Документація Інструкція для адміністратора по запуску обміну
Навчання Демонстрація процесу імпорту, відповіді на питання
Підтримка після запуску 30 днів моніторингу та виправлення помилок

Порівняння підходів: готові модулі vs кастомна розробка

Критерій Готовий модуль (наприклад, «1С-Бітрікс: Обмін даними») Кастомна інтеграція
Адаптація до конфігурації 1С Обмежена стандартом, часті розбіжності Повний контроль над маппінгом
Продуктивність Залежить від реалізації модуля Оптимізується під ваш каталог
Підтримка нестандартних полів Тільки стандартні властивості Будь-які поля, додаткові перетворення
Вартість Безкоштовно або недорого Інвестиція, яка окупається стабільністю
Строк впровадження Від 1 дня 8–12 днів

Кастомна розробка часто виявляється дешевшою в довгостроковій перспективі — особливо для компаній зі складною номенклатурою (1000+ позицій, безліч характеристик). Ми гарантуємо стабільний обмін навіть при зміні конфігурації 1С в межах гарантійного терміну.

Для точного розрахунку строків і бюджету зв'яжіться з нашими інженерами. Отримати консультацію можна через форму на сайті або по телефону. Ми безкоштовно проаналізуємо ваше вивантаження та запропонуємо оптимальне рішення.