Налаштування трансформації даних при парсингу для 1С-Бітрікс

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

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

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

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

  • 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С-Бітрікс

Дані з зовнішніх джерел ніколи не відповідають структурі вашого каталогу. Назви великими літерами, ціни з символом валюти в рядку, розміри в дюймах замість сантиметрів, категорії не співпадають з розділами інфоблоку. Без шару трансформації між парсером та імпортером дані потрапляють у каталог «як є» — і ламають фільтри, сортування, відображення карток.

Типові трансформації

Нормалізація тексту:

  • Приведення регістру: ШУРУПОВЕРТ BOSCH GSR 18VШуруповёрт Bosch GSR 18V. Функція mb_convert_case() з режимом MB_CASE_TITLE працює для більшості випадків, але ламає абревіатури. Потрібен whitelist слів, які не трансформуються (артикули, бренди).
  • Видалення лишніх пробілів, неразривних пробілів (\xC2\xA0), символів нульової ширини.
  • Заміна HTML-сутностей: &&, "".

Нормалізація цін:

  • Видобування числа з рядка: "1 299,00 руб."1299.00. Регулярне вираження: preg_replace('/[^\d,.]/', '', $price), затім заміна коми на крапку.
  • Конвертація валют за фіксованим курсом або через API Центробанку.
  • Округлення до копійок: round($price, 2).

Нормалізація характеристик:

  • Одиниці вимірювання: "120 мм" → значення 120, одиниця мм. Парсинг через regex: /^([\d.,]+)\s*([а-яА-Яa-zA-Z]+)$/u.
  • Булеві значення: "Да", "Yes", "+", "true", "1"Y для властивостей типу «прапорець» у Бітрікс.
  • Списочні значення: маппінг зовнішнього значення на XML_ID варіанту властивості. Таблиця відповідностей у БД або конфігураційному масиві.

Маппінг категорій

Структура категорій джерела не співпадає з розділами інфоблоку. Рішення — таблиця маппінгу:

$categoryMap = [
    'Электроинструмент/Дрели'          => 15,  // ID розділу інфоблоку
    'Электроинструмент/Шуруповёрты'     => 16,
    'Ручной инструмент/Отвёртки'        => 22,
];

$sectionId = $categoryMap[$externalCategory] ?? DEFAULT_SECTION_ID;

Для нових категорій, відсутніх у маппінгу, — складайте товари в розділ «Без категорії» та логуйте. Автоматичне створення розділів небезпечно: одна помилка у даних джерела — і у каталозі з'являються сміттєві розділи.

Обробка зображень

Зображення з зовнішніх джерел потребують обробки перед завантаженням у Бітрікс:

  • Зміна розміру — джерело відправляє зображення 4000×3000, а у каталозі потрібно не більше 1200×1200. Використовуйте \Bitrix\Main\File\Image\Imagick або GD для зміни розміру до завантаження.
  • Формат — конвертація WebP в JPEG, якщо Бітрікс налаштований без підтримки WebP.
  • Водяні знаки — видалення неможливе без втрати якості, але можна відсікти кропом, якщо знак у кутку.
  • Дубли — один товар з п'ятьма однаковими фото. Порівняння по md5 файлу перед завантаженням.

Валідація перед імпортом

Трансформовані дані потрібно валідувати перед записом в інфоблок:

Поле Правило Дія при порушенні
NAME Не пустое, 3–255 символів Пропустити елемент, записати в лог
XML_ID Унікальне, не пустое Пропустити (дубль)
PRICE Число > 0 Встановити 0, позначити для перевірки
SECTION_ID Існуючий розділ Помістити в «Без категорії»
PREVIEW_PICTURE Файл існує, розмір < 10 МБ Імпортувати без картинки

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

Конфігурація трансформацій

Правила трансформації повинні бути конфігурованими, а не зашитими в код. Формат конфігурації:

$transformRules = [
    'NAME' => [
        ['type' => 'trim'],
        ['type' => 'mb_title_case'],
        ['type' => 'max_length', 'value' => 255],
    ],
    'PRICE' => [
        ['type' => 'extract_number'],
        ['type' => 'multiply', 'value' => 1.2],  // Наценка 20%
        ['type' => 'round', 'value' => 2],
    ],
    'PROPERTY_WEIGHT' => [
        ['type' => 'extract_number'],
        ['type' => 'convert_unit', 'from' => 'kg', 'to' => 'g'],
    ],
];

Кожне правило — окрема функція-трансформер. Ланцюг правил застосовується послідовно. Такий підхід дозволяє змінювати логіку трансформації без правки коду парсера.