Налаштування XML-обміну 1С-Бітрікс: уникнути таймаутів і дублів

Ми стикалися з цією ситуацією десятки разів: клієнт запускає обмін з 1С, а на виході — таймаути, дублі товарів або ціни, які не оновлюються. Стандартний модуль **Торговий каталог** (catalog) підтримує протокол [CommerceML](https://uk.wikipedia.org/wiki/CommerceML) 2.x, але на практиці він ламається
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування XML-обміну 1С-Бітрікс: уникнути таймаутів і дублів
Простий
~1 день

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

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1466
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    810
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1167

Ми стикалися з цією ситуацією десятки разів: клієнт запускає обмін з 1С, а на виході — таймаути, дублі товарів або ціни, які не оновлюються. Стандартний модуль Торговий каталог (catalog) підтримує протокол CommerceML 2.x, але на практиці він ламається в трьох сценаріях: кодування не UTF-8, нестандартна структура <Класифікатор> і перевищення ліміту часу при файлах більше 50 МБ. Ми налаштовуємо імпорт під ключ за 1–2 дні з гарантією стабільної роботи.

Чому виникають таймаути при імпорті великих XML-файлів

Основна причина — обмеження max_execution_time у PHP. При завантаженні файлу розміром 180 МБ, що містить 200 000 товарів, скрипт 1c_exchange.php не встигає обробити дані за стандартні 30 секунд. Навіть set_time_limit(0) не допомагає, якщо в PHP-FPM налаштований request_terminate_timeout. Рішення — ввімкнути покроковий імпорт. У налаштуваннях модуля 1С виставляємо «Розмір файлу для покрокової обробки» (параметр CATALOG_IMPORT_STEP_SIZE). Бітрікс за допомогою SAX-парсера ділить файл на чанки по 10 МБ і обробляє їх послідовно. Це не тільки запобігає таймаутам, але й знижує навантаження на БД: кожен крок фіксується, і при збої обмін відновлюється з останньої успішної порції. На одному з проєктів з каталогом обладнання (150 000 SKU) такий підхід скоротив час імпорту з 4 годин до 40 хвилин.

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

Дублі виникають, коли ідентифікатор GUID номенклатури (<Ид>) змінюється в 1С. Наприклад, після переходу на нову версію конфігурації або перенесення даних. Бітрікс не може зіставити новий GUID з існуючим XML_ID в b_iblock_element і створює новий елемент. Для виправлення дублів використовуємо прямий SQL-запит або CIBlockElement::Update(). Профілактика — налаштування в 1С: заборонити вивантаження елементів з пустим або неунікальним GUID. У складних випадках пишемо обробник події OnSuccessCatalogImport, який перевіряє унікальність і примусово оновлює XML_ID.

Що робити, якщо ціни не оновлюються?

Часта причина — неспівпадіння назв типів цін. У 1С тип ціни може називатися «Основна», а в Бітрікс — «Роздрібна». Маппінг задається в /bitrix/admin/cat_price_type.php. Переконайтеся, що <ТипЦены><Наименование> в XML збігається з NAME в b_catalog_price_type. Якщо потрібно зіставити кілька типів цін, пишемо кастомний обробник OnSuccessCatalogImport. У ньому парсимо XML засобами SimpleXMLElement і оновлюємо ціни через CPrice::Update().

Налаштування експорту з Бітрікс в 1С

Для зворотного потоку (замовлення → 1С) використовується endpoint з параметром type=sale. Бітрікс формує orders.xml зі структурою <Документ>, що включає позиції замовлення. Критично перевірити, що в налаштуваннях обміну увімкнено прапорець «Вивантажувати реалізації» та вказано потрібний статус замовлень. Параметри компонента bitrix:catalog.import.1c:

  • IBLOCK_ID — інфоблок каталогу
  • PRICE_TYPE — тип ціни за замовчуванням
  • STORE_ID — склад за замовчуванням
  • USE_CML2_DESCRIPTION — брати опис з XML

Процес налаштування

Етап Термін
Діагностика поточної схеми обміну (перевірка кодування, структури XML, помилок логу) 2–4 години
Налаштування маппінгу типів цін та складів 3–6 годин
Увімкнення та конфігурація покрокового імпорту 2–4 години
Тестовий прогін з бойовими даними + налагодження (виправлення дублів, помилок) 4–8 годин
Документування схеми та консультація 1–2 години

Підсумкове налаштування займає 1–2 робочих дні.

Порівняння підходів: штатний vs кастомний

Критерій Штатний обмін Кастомна обробка
Підтримка великих файлів Обмежений (скидання за часом) Покроковий SAX-парсер без таймаутів
Гнучкість маппінгу Тільки через адмінку Довільні події та SQL
Час налаштування 2 години Від 1 дня
Гарантія цілісності Середня (ризик дублів) Висока (автотести та журнал)

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

  • Діагностика поточної конфігурації обміну (кодування, структура <Класифікатор>, типи цін)
  • Налаштування покрокового імпорту для великих файлів (оптимальний розмір чанка)
  • Маппінг типів цін та складів (пряма відповідність або кастомні обробники)
  • Виправлення дублів та помилок GUID (SQL або API)
  • Тестовий прогін з реальним вивантаженням (засікаємо час, перевіряємо ціни та залишки)
  • Документація за схемою обміну (схема даних, опис полів)
  • Консультація щодо подальшого супроводу

У нас 10+ років досвіду розробки на Бітрікс, понад 200 проєктів з інтеграцією 1С. Сертифіковані спеціалісти гарантують коректну синхронізацію каталогу, цін та залишків. Для нетипових завдань (кастомні обробники, нестандартна структура 1С) додається день на розробку.

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

CommerceML — офіційна специфікація протоколу обміну.