Інтеграція парсера з модулем імпорту 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція парсера з модулем імпорту 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

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

Етапи розробки

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція парсера з модулем імпорту 1С-Бітрікс

Стандартний парсер віддає дані в CSV або JSON, а модуль імпорту 1С-Бітрікс (bitrix.catalog) очікує конкретну структуру: поля товару, прив'язку до розділів, зображення, властивості. Без адаптера між ними дані або не імпортуються, або імпортуються з помилками — дублюються записи, втрачаються властивості, ламається дерево категорій.

Як працює модуль імпорту в Бітріксі

Нативний імпорт каталогу використовує модуль catalog і компонент bitrix:catalog.import.csv. Таблиці, з якими працює імпорт:

  • 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-імпорт не підтримує динамічні колонки.

Архітектура правильної інтеграції

Парсер → Адаптер (PHP/Python) → Проміжний формат → Бітрікс API

Адаптер виконує три завдання:

  1. Нормалізація категорій. Розбирає шлях категорії, рекурсивно створює розділи через CIBlockSection::Add(), кешує мепінг шлях → ID розділу в b_iblock_section.

  2. Завантаження зображень. Завантажує файли за URL у тимчасову директорію, передає шляхи в CFile::MakeFileArray(), після успішного імпорту очищає тимчасові файли.

  3. Мепінг властивостей. Динамічні атрибути з attrs{} зіставляються з властивостями інфоблоку через CIBlockProperty::GetList(). Відсутні властивості створюються автоматично з типом S (рядок) або N (число).

Пакетний запис для великих обсягів

Замість поштучного 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 через агент.

Синхронізація при оновленнях

Повторний запуск парсера не повинен створювати дублікати. Стратегія: зовнішній ID товару (артикул або URL джерела) зберігається у властивості інфоблоку EXTERNAL_ID або в b_iblock_element.XML_ID. Перед створенням перевіряємо наявність через CIBlockElement::GetList(['=XML_ID' => $externalId]) — оновлюємо наявний або створюємо новий.

Етап Трудовитрати
Аналіз структури парсера та мепінг полів 4–6 год
Розробка адаптера 8–16 год
Обробка зображень і категорій 4–8 год
Тестування на реальних даних (1000+ позицій) 4–6 год
Налаштування розкладу оновлень (агенти/cron) 2–3 год

Розклад та моніторинг

Повторюваний парсинг запускається через агенти Бітрікса (таблиця b_agent) або системний cron. Агент викликає метод адаптера, який логує результат в користувацький інфоблок або таблицю — дата запуску, кількість оброблених/помилкових записів. При помилці більше 5% — надсилає сповіщення адміністратору через CEvent::Send().