Кожного ранку — новий прайс-лист від постачальника. Excel, CSV або PDF з тисячами позицій. Переносити вручну? Помилки неминучі, час іде. Нещодавно звернувся клієнт з 15 постачальниками — менеджери витрачали 4 години на день на ручне оновлення цін. Ми автоматизуємо цей процес: пишемо парсер, який читає прайс і оновлює каталог у 1С-Бітрікс. За 2-3 дні отримуєте готову систему імпорту під одного постачальника. Для кількох — настроювана конфігурація без переписування коду. Економія часу сягає 80%.
Чому парсинг прайс-листів — це не просто завантаження CSV?
Прайс-листи постачальників рідко бувають стандартними. Кожен — своя структура, свої стовпці, своє кодування. В одного артикул у колонці A, в іншого — у E. В одного три рядки шапки, в іншого — один. Парсер має бути настроюваним: для кожного постачальника задається мапінг стовпців.
| Формат | Особливості парсингу |
|---|---|
| Excel (.xlsx, .xls) | PhpSpreadsheet для читання; потрібно знайти рядок заголовків, пропустити рекламні блоки |
| CSV | fgetcsv(), враховувати роздільник (; або ,) та кодування (Windows-1251 у російських постачальників) |
| ODS (OpenDocument) | PhpSpreadsheet підтримує |
| Найскладніше: pdftotext або API сервісу OCR; структура втрачається |
Як налаштувати мапінг для кожного постачальника?
Зберігання налаштувань постачальників краще винести в окрему структуру (інфоблок або кастомна таблиця):
Постачальник: - Назва - Спосіб отримання прайса (FTP / email / HTTP / Telegram) - Формат файлу - Мапінг колонок: {артикул: A, назва: B, ціна: C, залишок: D} - Правила трансформації: {ціна: помножити на 1.3, назва: префікс "Бренд X"} - Розклад оновлення - Тип ціни в Бітрікс (ID прайс-листа) Мапінг колонок у коді представляється масивом, який передається в універсальний клас-парсер. Це дозволяє додавати нових постачальників без зміни коду.
$mapping = [ 'article' => 'A', 'name' => 'B', 'price' => 'C', 'stock' => 'D', 'transformations' => ['price' => 'multiply(1.3)'] ]; Отримання прайс-листа
Способи отримання файлу:
- 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 в інфоблоці). Офіційна документація: D7 API для цін
Оновлення ціни:
\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'], ]); Якщо артикул не знайдено — логувати як нерозпізнаний товар (не створювати автоматично, це ризик сміття в каталозі).
Як налаштувати систему імпорту: покроково
- Аналіз прайса постачальника. Визначаємо структуру, формат, роздільники. Збираємо зразки файлів.
- Налаштування мапінгу. Створюємо конфігурацію: колонка артикула, ціни, залишку. Вказуємо правила перетворення (множення, префікс).
- Інтеграція отримання файлу. Налаштовуємо FTP, email або HTTP. Тестуємо завантаження.
- Тестування імпорту. Запускаємо на тестовому каталозі. Перевіряємо точність оновлень (цільова — 99.5%).
- Деплой та моніторинг. Розгортаємо на бойовому сервері, налаштовуємо сповіщення про помилки.
Логування та контроль якості
Критично важлива частина, яку часто ігнорують. Кожен запуск імпорту має писати в лог:
- Кількість рядків у файлі.
- Кількість оновлених товарів.
- Кількість не знайдених артикулів (з переліком).
- Помилки читання файлу.
- Час виконання.
Лог зберігається в інфоблоці "Журнал імпорту" або в окремій таблиці. Сповіщення на email адміністратора при ненульовій кількості помилок. При обробці 50000 позицій ми забезпечуємо точність до 99.5%.
Продуктивність при великих прайсах
Прайс-лист на 50000 позицій при наївному підході (запит до БД на кожний рядок) оброблятиметься годинами. Правильна стратегія:
- Пакетне читання: читати Excel блоками по 1000 рядків, не завантажувати весь файл у пам'ять.
- Кеш артикулів: перед імпортом завантажити всі існуючі артикули в масив
['ARTICLE' => 'BITRIX_ID']. Пошук по масиву в пам'яті замість запиту до БД на кожну позицію. - Масові оновлення: замість
UPDATEна кожний рядок — використовувати транзакцію або пакетний API.
Завдяки цим методам імпорт 50000 позицій займає менше 5 хвилин — прискорення в 10 разів порівняно з порядковою обробкою.
Що входить в роботу
- Аналіз формату та структури прайс-листа постачальника.
- Розробка парсера з настроюваним мапінгом.
- Інтеграція з каталогом 1С-Бітрікс (оновлення цін, залишків, властивостей).
- Налаштування отримання файлу (FTP, email, HTTP).
- Система логування та сповіщень про помилки.
- Документація та інструкція з додавання нових постачальників.
- Навчання адміністратора та підтримка протягом місяця.
Терміни розробки
| Масштаб | Склад | Термін |
|---|---|---|
| Один постачальник, Excel/CSV | Парсер + імпорт цін та залишків | 2-3 дні |
| Декілька постачальників | Конфігурована система мапінгу | 4-6 днів |
| Повна система | Всі формати, UI управління постачальниками, логи | 7-10 днів |
За нашими плечима понад 100 проектів. Оцінимо ваш випадок — зв'яжіться з нами, і ми запропонуємо рішення під ключ з гарантією результату. Отримайте консультацію інженера вже сьогодні.







