Налаштування вивантаження залишків з 1С до 1С-Бітрікс

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

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Настройка виконання остатків з 1С в 1С-Bitrix

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

Як остатки потрапляють в Bitrix

При стандартному обміні остаток записується в поле QUANTITY таблиці b_catalog_product. Це значення пов'язане з торговим пропозицією через PRODUCT_ID = b_iblock_element.ID.

Якщо в 1С настроєний склад, остатки можуть передаватися в розбивці по складах. У Bitrix склади — це модуль catalog з таблицею b_catalog_store та b_catalog_store_product. Для відображення «наявність у магазині X» потрібно використовувати саме складській облік.

Окрема синхронізація остатків

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

Варіант 1: окремий XML-файл. 1С формує облегшений XML тільки з остатками (без описів та картинок) та відправляє на окремий endpoint Bitrix. На стороні Bitrix — користувацький обробник, який читає XML і оновлює b_catalog_product.QUANTITY.

Варіант 2: REST API / HTTP-обробник. 1С надсилає POST-запит з JSON або POST-параметрами: sku → quantity. Обробник на стороні Bitrix приймає, валідує, оновлює остатки. Швидше XML-парсингу, простіше в відладці.

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

Оновлення остатку в Bitrix

// За 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С дозволяє уходити в мінус. В обробнику Bitrix обмежуємо: max(0, $quantity).