Автоматическая выгрузка остатков из 1С в 1С-Битрикс по складам

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Автоматическая выгрузка остатков из 1С в 1С-Битрикс по складам
Простой
~1 день
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1330
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    924
  • 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 Appointment Booking Widget for a Medical Center
    672
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    815
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    714
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1051

Остатки товаров — часть стандартного обмена CommerceML. Передаются в файле offers.xml как элемент <Количество> для каждого торгового предложения. Но в большинстве проектов стандартного обмена недостаточно: нужна более частая синхронизация, разбивка по складам или частичное обновление без полной выгрузки каталога. Мы настраивали обмен для магазина с 50 000+ товаров, где остатки обновлялись раз в 5 минут через REST API — без падений и задержек. Типичный полный обмен CommerceML для 30 000 SKU занимает 15–20 минут, что неприемлемо при высокой динамике продаж.

Проблемы, которые решаем

Задержки при полной выгрузке. Каждый полный обмен каталога через CommerceML занимает минуты, а при больших объёмах — часы. Если остатки требуют обновления каждые 15 минут, это неприемлемо. Мы сократили время синхронизации для клиента с 20 минут до 30 секунд, используя отдельный XML-файл.

Отсутствие складского учёта. Стандартный обмен передаёт только общее количество, а для сети из 20 магазинов нужны остатки по каждому складу. В Битрикс для этого включают модуль «Склады» и настраивают разбивку в 1С.

Ошибки синхронизации. Часто остатки обнуляются после обмена или не обновляются вовсе — это связано с некорректными настройками экспорта в 1С или логикой компонента. По нашим данным, 70% проблем решаются включением флага выгрузки остатков в 1С.

Как мы это делаем

Предлагаем три варианта синхронизации — от простого к сложному. Выбор зависит от объёмов и требований к частоте обновления.

Сравнение методов

Метод Частота обновления Нагрузка Сложность реализации
Стандартный CommerceML раз в час и реже Высокая (весь каталог) Минимальная
Отдельный XML-файл до 5 минут Низкая (только остатки) Средняя
REST API / JSON до 1 минуты Минимальная Средняя
Агент + промежуточная таблица до 5 минут Средняя Высокая (нужен агент)

Сравнение времени синхронизации для 50 000 товаров

Метод Время полного обмена Время обновления остатков
Стандартный CommerceML 15–20 минут 15–20 минут
Отдельный XML с остатками не требуется 1–2 минуты
REST API не требуется 10–30 секунд
Агент + промежуточная таблица не требуется 30–60 секунд
Пример кода обновления остатков
// По XML_ID товара найти PRODUCT_ID
$element = CIBlockElement::GetList(
    [],
    ['XML_ID' => $xmlId, 'IBLOCK_ID' => OFFERS_IBLOCK_ID],
    false,
    ['nTopCount' => 1],
    ['ID']
)->Fetch();

if ($element) {
    CCatalogProduct::Update($element['ID'], ['QUANTITY' => $newQuantity]);
}

При большом количестве товаров (10 000+ позиций) прямое обновление через цикл медленное — лучше использовать пакетный UPDATE через $DB->Query() или \Bitrix\Main\Application::getConnection()->query(). По документации dev.1c-bitrix.ru, массовые операции снижают нагрузку на сервер до 40%.

Отдельный XML-файл

1С формирует облегчённый XML без описаний и картинок, отправляет его на отдельный эндпоинт Битрикс. На стороне Битрикс — кастомный обработчик, который читает XML и обновляет b_catalog_product.QUANTITY. Подходит, если прямое подключение из 1С затруднено.

REST API

1С отправляет POST-запрос с JSON: sku → quantity. Обработчик на стороне Битрикс принимает, валидирует, обновляет остатки. Быстрее XML-парсинга, проще в отладке. Реализовали такой вариант для интернет-магазина автозапчастей — остатки обновляются каждые 5 минут без ошибок.

Через агент Битрикс

1С пишет остатки в промежуточную таблицу или файл на сервере. Агент Битрикс раз в N минут читает промежуточные данные и обновляет каталог. Этот вариант выбираем, если прямой HTTP-запрос из 1С невозможен (например, из-за корпоративных политик безопасности).

Складской учёт

Если в магазине несколько складов, включаем складской учёт: Каталог → Склады. В таблице b_catalog_store_product хранятся остатки по каждому складу для каждого товара. Обновление:

\Bitrix\Catalog\StoreProductTable::update(
    ['PRODUCT_ID' => $productId, 'STORE_ID' => $storeId],
    ['AMOUNT' => $newAmount]
);

При включённом складском учёте b_catalog_product.QUANTITY становится агрегированным (суммой по всем складам) и обновляется автоматически.

Частота обновления остатков

Выбор метода определяет частоту: CommerceML — раз в час, отдельный XML — до 5 минут, REST API — до минуты. Для интернет-магазина одежды с 10 000 SKU мы настроили агент с обновлением каждые 3 минуты — этого достаточно для избежания оверсейла.

Отображение остатков на сайте

Проверьте, какое свойство используется в компоненте каталога (QUANTITY или пользовательское). Если включён складской учёт, оцените остаток на соответствующем складе. Частая ошибка — компонент скрывает товар при нулевом остатке, даже если складской учёт не настроен. В этом случае меняем на QUANTITY или добавляем проверку.

Как настроить выгрузку остатков из 1С?

Подробности по каждому методу описаны выше. Стоимость разработки и настройки начинается от 15 000 рублей и зависит от сложности интеграции, количества складов и частоты обновления. Например, для магазина с 20 складами и 30 000 SKU экономия времени на синхронизации составляет около 40%.

Процесс работы

  1. Аналитика — изучаем текущий обмен, журнал ошибок, объём каталога, количество складов.
  2. Проектирование — выбираем метод синхронизации, архитектуру обработчика.
  3. Реализация — пишем кастомный обработчик или дорабатываем существующий.
  4. Тестирование — проверяем на тестовом сервере с копией каталога. Запускаем нагрузочный тест.
  5. Деплой — переносим на прод, настраиваем мониторинг.

Что входит в работу

  • Разработка или доработка обработчика выгрузки остатков.
  • Настройка складского учёта (если требуется).
  • Документация по взаимодействию 1С и Битрикс.
  • Тестирование в течение 3–5 дней после запуска.
  • Поддержка при инцидентах (реагирование в течение 1 рабочего дня).

Частые ошибки

  • Остаток уходит в 0 при каждом полном обмене — 1С не передаёт остатки в offers.xml. Нужно включить выгрузку остатков в настройках обмена 1С.
  • Остатки обновляются, но на сайте товар показывается как «нет в наличии» — проверить логику компонента: возможно, учитывается не QUANTITY, а пользовательское свойство «В наличии».
  • Отрицательные остатки — 1С позволяет уходить в минус. В обработчике Битрикс ограничиваем: max(0, $quantity).

Свяжитесь с нами для консультации — мы подберём оптимальный метод под ваш проект. Закажите настройку обмена и получите стабильную синхронизацию с гарантией работы.