Настройка трансформации данных при парсинге для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка трансформации данных при парсинге для 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка трансформации данных при парсинге для 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'],
    ],
];

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