Реализация импорта товаров из 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
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Каждый новый проект с 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С в пределах гарантийного срока.

Для точного расчёта сроков и бюджета свяжитесь с нашими инженерами. Получить консультацию можно через форму на сайте или по телефону. Мы бесплатно проанализируем вашу выгрузку и предложим оптимальное решение.