Парсинг залишків товарів із сайтів постачальників для 1С-Бітрікс
Ситуація: постачальник не дає API, прайс-листи надсилає раз на тиждень поштою, а реальні залишки змінюються щодня. Покупець оформляє замовлення — товару немає. Рішення — парсинг вітрини постачальника з оновленням поля CATALOG_QUANTITY у 1С-Бітрікс.
Що саме парсимо
На сайті постачальника залишок може бути представлений по-різному:
- Числове значення («в наявності: 47 шт») — парсимо число напряму
- Статус наявності («в наявності» / «під замовлення» / «немає») — маппимо на 0/1/999
- Кілька складів — підсумовуємо або беремо найближчий склад
Іноді залишки ховаються у JS-змінних на сторінці (window.__PRODUCT_DATA__ = {...}) — шукаємо через regex у тілі сторінки, це швидше headless-браузера.
Зв'язка товарів свого каталогу з позиціями постачальника
Ключовий етап. Без надійного маппінгу парсинг марний. Варіанти:
Артикул постачальника — додаємо властивість SUPPLIER_SKU в інфоблок. При парсингу шукаємо елемент з цим значенням через CIBlockElement::GetList() з фільтром за властивістю.
XML_ID — якщо раніше імпортували товари з прайсу постачальника, XML_ID може збігатись з його внутрішнім ID.
EAN/штрихкод — універсальний варіант для брендових товарів.
Для великих каталогів (10 000+ SKU) фільтрація за властивістю через ORM працює повільно. Краще побудувати зворотній маппінг supplier_sku → element_id в Redis або у кастомній таблиці та оновлювати його при змінах каталогу.
Оновлення залишків у 1С-Бітрікс
Оновлення через CCatalogProduct::Update():
CCatalogProduct::Update($elementId, [
'QUANTITY' => $parsedQty,
'QUANTITY_RESERVED' => 0,
]);
Якщо магазин використовує склади (b_catalog_store), оновлюємо через CCatalogStoreProduct::Update() з вказанням STORE_ID.
Важливо: при оновленні лише кількості не торкайтесь ACTIVE — інакше втратите ручні правки активності. Робіть окремий UPDATE лише потрібного поля.
Логіка обробки «немає в наявності»
Не варто автоматично приховувати товар при нульовому залишку — можливо, постачальник поповнить склад наступного дня. Правильна логіка:
- Кількість = 0 → товар залишається активним, але додається прапорець «під замовлення»
- Кількість = 0 більше N днів → сповіщення менеджеру, ручне рішення
- Товар не знайдено на сайті постачальника 3+ рази поспіль → прапорець
SUPPLIER_DISCONTINUED
Прапорці реалізуємо через властивості інфоблоку або поля Highload-блоку.
Часові рамки робіт
| Етап | Термін |
|---|---|
| Аналіз сайту постачальника, вибір методу парсингу | 2–4 години |
| Розробка парсера залишків | 1–2 дні |
| Налаштування маппінгу SKU | 4–8 годин |
| Логіка оновлення у 1С-Бітрікс + обробка нульових залишків | 4–8 годин |
| Налаштування розкладу та моніторингу | 2–4 години |
Разом: 3–5 робочих днів на одного постачальника. Кожен додатковий постачальник — +1–2 дні (різна структура сайтів).







