Парсинг прайс-листов поставщиков для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Парсинг прайс-листов поставщиков для 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • 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С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Парсинг прайс-листов поставщиков для 1С-Битрикс

Прайс-лист поставщика — это Excel-файл, CSV-таблица или PDF, который приходит раз в день, раз в неделю, иногда несколько раз в день. В нём могут быть тысячи позиций с ценами, остатками, характеристиками. Вручную переносить это в каталог 1С-Битрикс невозможно — слишком долго и слишком много ошибок. Задача парсинга — читать прайс поставщика и обновлять данные в каталоге автоматически.

Форматы прайс-листов и стратегии парсинга

Прайс-листы поставщиков редко бывают стандартными. Каждый — своя структура, свои столбцы, своя кодировка.

Формат Особенности парсинга
Excel (.xlsx, .xls) PhpSpreadsheet для чтения; нужно найти строку заголовков, пропустить рекламные блоки
CSV fgetcsv(), учитывать разделитель (; или ,) и кодировку (Windows-1251 у российских поставщиков)
ODS (OpenDocument) PhpSpreadsheet поддерживает
PDF Сложнее всего: pdftotext или API сервиса OCR; структура теряется

Главная проблема Excel-прайсов: каждый поставщик делает свой формат. У одного артикул в колонке A, у другого — в E. У одного три строки шапки, у другого — одна. Парсер должен быть настраиваемым: для каждого поставщика задаётся маппинг столбцов.

Архитектура системы импорта

Хранение настроек поставщиков лучше вынести в отдельную структуру (инфоблок или кастомная таблица):

Поставщик:
  - Название
  - Способ получения прайса (FTP / email / HTTP / Telegram)
  - Формат файла
  - Маппинг колонок: {артикул: A, название: B, цена: C, остаток: D}
  - Правила трансформации: {цена: умножить на 1.3, название: префикс "Бренд X"}
  - Расписание обновления
  - Тип цены в Битрикс (ID прайс-листа)

Маппинг колонок в коде представляется массивом, который передаётся в универсальный класс-парсер. Это позволяет добавлять новых поставщиков без изменения кода.

Получение прайс-листа

Способы получения файла:

  • FTP/SFTP — поставщик выкладывает файл на сервер, скрипт скачивает по расписанию. Используется ftp_connect() или библиотека phpseclib.
  • HTTP ссылкаfile_get_contents() или curl. Некоторые поставщики требуют авторизацию — HTTP Basic или cookie-сессию.
  • Email — письмо с вложением. Парсер подключается к IMAP-ящику (imap_open()), ищет письма от поставщика, скачивает вложение.
  • Telegram-бот поставщика — редко, но встречается: забирать файл через Telegram Bot API.

Обновление цен и остатков в 1С-Битрикс

После парсинга файла данные нужно внести в каталог. Ключевой идентификатор — артикул (ARTICLE или XML_ID в инфоблоке).

Обновление цены:

\Bitrix\Catalog\PriceTable::update($priceId, [
    'PRICE' => $newPrice,
    'CURRENCY' => 'RUB',
]);
// или массовое через CCatalogProduct::SetOptimalPrice()

Обновление остатков:

\Bitrix\Catalog\StoreProductTable::update($storeProductId, [
    'AMOUNT' => $newAmount,
]);
// или если работаете без складов:
CCatalogProduct::Update($productId, ['QUANTITY' => $newQty]);

Поиск товара по артикулу:

$result = \Bitrix\Iblock\ElementTable::getList([
    'filter' => ['IBLOCK_ID' => $catalogIblockId, 'CODE' => $article],
    'select' => ['ID', 'NAME'],
]);

Если артикул не найден — логировать как «неопознанный товар» (не создавать автоматически, это риск мусора в каталоге).

Логирование и контроль качества

Критически важная часть, которую часто игнорируют. Каждый запуск импорта должен писать в лог:

  • Количество строк в файле.
  • Количество обновлённых товаров.
  • Количество не найденных артикулов (с перечнем).
  • Ошибки чтения файла.
  • Время выполнения.

Лог хранится в инфоблоке «Журнал импорта» или в отдельной таблице. Уведомление на email администратора при ненулевом количестве ошибок.

Производительность при больших прайсах

Прайс-лист на 50 000 позиций при наивном подходе (запрос к БД на каждую строку) будет обрабатываться часами. Правильная стратегия:

  1. Пакетное чтение: читать Excel блоками по 1000 строк, не загружать весь файл в память.
  2. Кэш артикулов: перед импортом загрузить все существующие артикулы в массив ['ARTICLE' => 'BITRIX_ID']. Поиск по массиву в памяти вместо запроса к БД на каждую позицию.
  3. Массовые обновления: вместо UPDATE на каждую строку — использовать транзакцию или пакетный API.

Сроки разработки

Масштаб Состав Срок
Один поставщик, Excel/CSV Парсер + импорт цен и остатков 2-3 дня
Несколько поставщиков Конфигурируемая система маппинга 4-6 дней
Полная система Все форматы, UI управления поставщиками, логи 7-10 дней