Парсинг остатков товаров с сайтов поставщиков для 1С-Битрикс
Ситуация: поставщик не даёт API, прайс-листы присылает раз в неделю по почте, а реальные остатки меняются ежедневно. Покупатель оформляет заказ — товара нет. Решение — парсинг витрины поставщика с обновлением поля CATALOG_QUANTITY в Битриксе.
Что именно парсим
На сайте поставщика остаток может быть представлен по-разному:
- Числовое значение («в наличии: 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 или в кастомной таблице и обновлять его при изменениях каталога.
Обновление остатков в Битриксе
Обновление через 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 часов |
| Логика обновления в Битриксе + обработка нулевых остатков | 4–8 часов |
| Настройка расписания и мониторинга | 2–4 часа |
Итого: 3–5 рабочих дней на одного поставщика. Каждый дополнительный поставщик — +1–2 дня (разная структура сайтов).







