Настройка выгрузки остатков из 1С в 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка выгрузки остатков из 1С в 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка выгрузки остатков из 1С в 1С-Битрикс

Остатки товаров — часть стандартного обмена CommerceML. Передаются в файле offers.xml как элемент <Количество> для каждого торгового предложения. Но в большинстве проектов стандартного обмена недостаточно: нужна более частая синхронизация, разбивка по складам или частичное обновление без полной выгрузки каталога.

Как остатки попадают в Битрикс

При стандартном обмене остаток записывается в поле QUANTITY таблицы b_catalog_product. Это значение связано с торговым предложением через PRODUCT_ID = b_iblock_element.ID.

Если в 1С настроен склад, остатки могут передаваться в разбивке по складам. В Битрикс склады — это модуль catalog с таблицей b_catalog_store и b_catalog_store_product. Для отображения «наличие в магазине X» нужно использовать именно складской учёт.

Раздельная синхронизация остатков

Стандартный обмен выгружает весь каталог — при большом количестве товаров это может занимать минуты. Для частых обновлений остатков (раз в 5–15 минут) используют отдельный механизм:

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

Вариант 2: REST API / HTTP-обработчик. 1С отправляет POST-запрос с JSON или POST-параметрами: sku → quantity. Обработчик на стороне Битрикс принимает, валидирует, обновляет остатки. Быстрее XML-парсинга, проще в отладке.

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

Обновление остатка в Битрикс

// По 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]);
}

При большом количестве товаров (тысячи позиций) прямое обновление через цикл медленное — лучше использовать пакетный UPDATE через $DB->Query() или \Bitrix\Main\Application::getConnection()->query().

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

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

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

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

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

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