Парсинг прайс-листів поставщиків для 1С-Bitrix
Прайс-лист поставщика — це файл Excel, таблиця CSV або PDF, який приходить раз на день, раз на тиждень, іноді кілька разів на день. У ньому можуть бути тисячі позицій з цінами, остатками та характеристиками. Вручну перенести це в каталог 1С-Bitrix неможливо — занадто довго й занадто багато помилок. Завдання парсингу — читати прайс-лист поставщика та автоматично оновлювати дані в каталозі.
Формати прайс-листів та стратегії парсингу
Прайс-листи поставщиків рідко бувають стандартними. Кожен має свою структуру, стовпці та кодування.
| Формат | Особливості парсингу |
|---|---|
| Excel (.xlsx, .xls) | PhpSpreadsheet для читання; потрібно знайти рядок заголовків, пропустити рекламні блоки |
| CSV | fgetcsv(), враховувати розділювач (; або ,) та кодування (Windows-1251 у російських поставщиків) |
| ODS (OpenDocument) | PhpSpreadsheet підтримує |
| Найскладніше: 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 позицій із наївного підходу (запит до БД на кожен рядок) буде обробляватися годинами. Правильна стратегія:
- Пакетне читання: читайте Excel блоками по 1000 рядків, не завантажуйте весь файл у пам'ять.
-
Кеш артикулів: перед імпортом завантажте всі існуючі артикули в масив
['ARTICLE' => 'BITRIX_ID']. Пошук у памяті замість запиту до БД на кожну позицію. - Масові оновлення: замість UPDATE на кожен рядок — використовуйте транзакцію або пакетний API.
Графік розробки
| Масштаб | Склад | Термін |
|---|---|---|
| Один поставщик, Excel/CSV | Парсер + імпорт цін та остатків | 2–3 дні |
| Декілька поставщиків | Налаштовувана система маппінгу | 4–6 днів |
| Повна система | Всі формати, UI управління поставщиками, журнали | 7–10 днів |







