Інтеграція парсера з модулем імпорту 1С-Бітрікс
Парсер зібрав 40 000 товарів з маркетплейсу, але імпорт у 1С-Бітрікс закінчився помилками? Стандартний модуль імпорту не вміє розбирати ієрархію категорій, тягнути зображення за URL та мапити динамічні атрибути. Ми стикалися з цим десятки разів — і виробили надійний алгоритм інтеграції. Розробляємо адаптер, який перетворює сирі дані в коректну структуру Бітрікса. Беремо інтеграцію під ключ: від маппінгу до налаштування розкладу оновлень. Ми реалізували понад 50 подібних інтеграцій для великих каталогів.
Типова ситуація: штатний імпорт CSV Бітрікса не підтримує черги елементів, що призводить до падіння продуктивності. Через це імпорт 40 000 товарів займає 2 години з 30% помилок. Адаптер для імпорту даних вирішує ці проблеми за один прогін — час скорочується до 20 хвилин, помилки — менше 1%.
Як працює модуль імпорту в Бітріксі
Нативний імпорт каталогу використовує модуль catalog і компонент bitrix:catalog.import.csv. Згідно з офіційною документацією 1С-Бітрікс, стандартний імпорт не розрахований на складні структури категорій. Таблиці, з якими працює імпорт:
-
b_iblock_element— елементи інфоблоку (товари) -
b_iblock_element_prop_s*/b_iblock_element_prop_m*— значення властивостей -
b_catalog_price— ціни -
b_catalog_product— параметри товару (вага, розміри, тип)
Стандартний CSV-імпорт через CIBlockElement::Add() і CIBlockElement::Update() — робочий, але не масштабується при обсягах від 10 000 товарів: кожен виклик робить окремий запит до БД.
Де ламається наївна інтеграція
Кейс. Парсер збирає 40 000 товарів з маркетплейсу, записує в CSV з колонками name, price, category_path, images[], attrs{}. Запускається стандартний імпорт — через 2 години завершується з 30% помилок:
- Категорії створюються як плоский список замість дерева, тому що парсер записує шлях рядком «Електроніка / Смартфони / Apple», а імпортер не розбирає ієрархію.
- Зображення не підтягуються — парсер передає URL, імпортер очікує локальний шлях або base64.
- Властивості (атрибути) ігноруються — CSV-імпорт не підтримує динамічні колонки.
Як адаптер вирішує проблему нормалізації категорій?
Адаптер розбирає рядок категорії, рекурсивно створює розділи через CIBlockSection::Add(). Маппінг шлях → ID розділу кешується в b_iblock_section, щоб не перестворювати вже існуючі. Для 40 000 товарів з глибиною категорій до 5 рівнів ця операція займає близько 10 хвилин — в 6 разів швидше поштучного створення.
Чому пакетний запис критичний?
Пакетний запис через транзакцію швидший за поштучне додавання в 10 разів. Замість CIBlockElement::Add() у циклі використовуємо подійну модель і черги:
// Відключаємо пошук і події на час імпорту CIBlock::DisableOptimization(); $GLOBALS['BX_DONT_WRITE_INDEX'] = true; // Пакет по 500 елементів через транзакцію $DB->StartTransaction(); foreach ($batch as $item) { $el = new CIBlockElement(); $el->Add($fields, false, false, false); } $DB->Commit(); Після імпорту перебудовуємо пошуковий індекс: CSearch::ReIndexAll() або агент bitrix:search.reindex.
Порівняння підходів: нативний імпорт vs адаптер
| Характеристика | Нативний імпорт | Адаптер |
|---|---|---|
| Час імпорту 40 000 товарів | ~2 години | ~20 хвилин |
| Помилки | до 30% | менше 1% |
| Категорії | плоский список | ієрархія |
| Зображення | не підтримує | завантаження за URL |
| Властивості | тільки статичні | динамічний маппінг |
Детальна схема роботи адаптера
Адаптер отримує дані від парсера, проходить наступні етапи:
- Прийом даних (CSV/JSON/XML) через файл або API.
- Розбір і валідація: відбраковка записів з некоректними полями.
- Нормалізація категорій: розбір шляху, створення розділів.
- Маппінг властивостей: зіставлення атрибутів парсера з інфоблоком.
- Пакетний запис в інфоблок з використанням транзакцій.
- Обробка зображень: завантаження за URL, прив'язка до товару.
- Відправка звіту і перебудова пошукового індексу.
Як налаштувати адаптер за 3 кроки?
- Створити маппінг полів. Вказуємо, яке поле парсера відповідає назві, ціні, категорії та властивостям. Якщо парсер додає нові атрибути, адаптер автоматично розширює інфоблок.
- Перевірити категорії. Запускаємо пробну нормалізацію: адаптер створює дерево розділів із рядка шляху. Результат можна відкотити, якщо категорії не збігаються.
- Запустити тестовий імпорт. Імпортуємо 100-200 товарів, перевіряємо коректність даних і відсутність дублів. Після цього запускаємо повний прогін.
Синхронізація при оновленнях
Зовнішній ID товару (артикул або URL джерела) зберігається у властивості EXTERNAL_ID або в XML_ID елемента. Перед створенням перевіряємо наявність через CIBlockElement::GetList(['=XML_ID' => $externalId]) — оновлюємо існуючий або створюємо новий. Дублі виключені.
Що входить в інтеграцію?
| Етап | Що робимо | Результат |
|---|---|---|
| Аналіз | Вивчаємо структуру парсера, маппінг полів | Схема маппінгу, документація |
| Розробка | Пишемо адаптер, обробку категорій і зображень | Код адаптера, код міграцій |
| Тестування | Прогін на реальних даних (1000+ позицій) | Звіт про помилки, виправлення |
| Деплой | Налаштування розкладу, моніторинг, навчання | Агенти, логи, інструкція |
Додатково надаємо пакет документації, доступ до репозиторію та підтримку протягом місяця після запуску. Ручний імпорт 40 000 товарів обходиться в 30 000 грн за один прогін, адаптер скорочує цю суму до 5 000 грн. Економія на адмініструванні становить до 50 000 грн на місяць.
Розклад і моніторинг
Повторюваний парсинг запускається через агенти Бітрікса (b_agent) або системний cron. Агент викликає адаптер, який логує результат у користувацький інфоблок: дата, кількість оброблених/помилкових записів. При помилці >5% надсилається повідомлення адміністратору через CEvent::Send(). Поріг помилки налаштовується індивідуально. Після імпорту ми вмикаємо теговане кешування для прискорення завантаження каталогу.
Типові терміни
Оцінка часу під кожен проект індивідуальна, але орієнтуйтеся на діапазон: від 1 до 3 робочих днів для стандартної інтеграції. Ми гарантуємо безпомилковий імпорт і надаємо тестовий прогін на ваших даних.
Отримайте консультацію — оцінимо проект за один день і запропонуємо дорожню карту. Замовте інтеграцію парсера з Бітріксом без головного болю.







