Парсинг прайс-листів постачальників для 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С-Bitrix

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

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

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

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

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

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

Зберігайте налаштування поставщиків у окремій структурі (інфоблок або користувацька таблиця):

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

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

Отримання прайс-листу

Способи отримання файлу:

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

Оновлення цін та остатків у 1С-Bitrix

Після парсингу файлу дані потрібно внести в каталог. Ключовий ідентифікатор — артикул (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 днів