Налаштування комплектів товарів (бандлів) на 1С-Бітрікс

Налаштування комплектів товарів (бандлів) на 1С-Бітрікс Магазин хоче продавати ноутбук разом із мишею та сумкою як єдиний товар зі знижкою 10%. На перший погляд — просто новий елемент каталогу. На практиці це ламає облік залишків, обмін з 1С та розрахунок маржинальності, якщо зробити бандл «в лоб
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування комплектів товарів (бандлів) на 1С-Бітрікс
Простий
~1 день

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

Часті запитання

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1460
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1165

Налаштування комплектів товарів (бандлів) на 1С-Бітрікс

Магазин хоче продавати ноутбук разом із мишею та сумкою як єдиний товар зі знижкою 10%. На перший погляд — просто новий елемент каталогу. На практиці це ламає облік залишків, обмін з 1С та розрахунок маржинальності, якщо зробити бандл «в лоб» як звичайний товар. Ми в таких проектах застосовуємо перевірений підхід із віртуальними комплектами типу TYPE_SET — це позбавляє від overselling та забезпечує коректну синхронізацію з 1С. За 5+ років ми налаштували комплекти для 200+ магазинів, і жоден не зіткнувся з розбіжностями.

Два підходи до реалізації бандлів

Підхід 1: Бандл як окремий товар. Створюється елемент інфоблоку, залишки ведуться окремо. Простий, але проблемний: при продажі бандла залишки вхідних товарів не зменшуються. Покупець може купити мишу окремо і в складі бандла, що призведе до overselling і повернень.

Підхід 2: Бандл як віртуальний товар з дочірніми позиціями. Бандл у каталозі — агрегат. Його «залишок» — мінімальна кількість серед вхідних компонентів. При продажу зменшуються залишки реальних дочірніх товарів. Це правильний підхід, який у 5 разів знижує ризик помилок обліку і не вимагає ручного контролю.

Чому віртуальний комплект кращий за окремий товар?

Віртуальний комплект гарантує, що при нульовому залишку хоча б одного компонента бандл стає недоступним для покупки. Окремий товар цього не робить — залишки не синхронізуються, і магазин продає те, чого нема на складі. До того ж віртуальний комплект коректно працює з обміном по CommerceML, а окремий товар часто передається як звичайний товар, що ламає 1С.

Як створити комплект у Бітрікс: покроково

  1. Створіть елемент інфоблоку з назвою комплекту (наприклад, «Ноутбук + миша + сумка»).
  2. Встановіть тип товару TYPE_SET = 4 через \Bitrix\Catalog\ProductTable::update().
  3. Додайте компоненти в таблицю b_catalog_product_set із зазначенням SET_ID, ITEM_ID, QUANTITY.
  4. Задайте ціну: окрему для комплекту або правило кошика для знижки.
  5. Перевірте додавання в кошик через Bundle::add() — це гарантує розкриття на дочірні товари.

Структура зберігання комплекту

Зв'язок «комплект → компонент» зберігається в таблиці b_catalog_product_set:

  • SET_ID — ID комплекту (ID елемента інфоблоку з TYPE = 4)
  • ITEM_ID — ID товару-компонента
  • QUANTITY — кількість у комплекті
  • SORT — порядок відображення
  • IS_REQUIRED — обов'язковий чи опціональний (0/1)

Створення комплекту через API:

// Створюємо товар типу SET $elementId = $iblock->Add([ 'NAME' => 'Ноутбук + миша + сумка', 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y', ]); // Встановлюємо тип SET \Bitrix\Catalog\ProductTable::update($elementId, ['TYPE' => \Bitrix\Catalog\ProductTable::TYPE_SET]); // Додаємо компоненти \Bitrix\Catalog\ProductSetTable::add([ 'SET_ID' => $elementId, 'ITEM_ID' => $laptopId, 'QUANTITY' => 1, 'SORT' => 10, 'IS_REQUIRED' => 1, ]); \Bitrix\Catalog\ProductSetTable::add([ 'SET_ID' => $elementId, 'ITEM_ID' => $mouseId, 'QUANTITY' => 1, 'SORT' => 20, 'IS_REQUIRED' => 1, ]); 

Розрахунок залишків і ціни бандла

Доступна кількість бандла — мінімум серед компонентів:

$components = \Bitrix\Catalog\ProductSetTable::getList([ 'filter' => ['SET_ID' => $bundleId], 'select' => ['ITEM_ID', 'QUANTITY'], ])->fetchAll(); $available = PHP_INT_MAX; foreach ($components as $c) { $stock = \Bitrix\Catalog\ProductTable::getByPrimary( $c['ITEM_ID'], ['select' => ['QUANTITY']] )->fetch(); $available = min($available, floor((float)$stock['QUANTITY'] / $c['QUANTITY'])); } 

Ціна бандла може бути задана окремо (знижка на комплект) або розрахована як сума цін компонентів. У Бітрікс ціна бандла зберігається в b_catalog_price так само, як у звичайного товару. Якщо потрібна автоматична знижка N% на комплект — використовується правило кошика через b_sale_discount, не ручна ціна.

Як налаштувати знижку на комплект?

Знижку можна реалізувати двома способами: фіксована ціна на сам комплект або правило кошика. Порівняємо їх у таблиці:

Спосіб Реалізація Гнучкість Приклад
Окрема ціна Заповнити b_catalog_price для товару TYPE_SET Низька (тільки фікс) Бандл за 15 000 ₴ замість 17 000 ₴
Правило кошика Створити знижку в адміністративному розділі (умова: вага кошика ≥ X тощо) Висока (відсотки, умови) Знижка 10% на набір при покупці від 3 товарів

Правило кошика краще, якщо знижки змінюються часто або залежать від складу кошика. Ми рекомендуємо використовувати b_sale_discount з типом DiscountAction::ACTION_TYPE_BASKET_PERCENT.

Списання залишків при продажу

При додаванні бандла в кошик через стандартний компонент bitrix:sale.basket.basket Бітрікс автоматично розкриває комплект: у b_sale_basket створюються рядки для кожного компонента з прапорцем SET_PARENT_ID, що посилається на рядок бандла. При проведенні замовлення залишки списуються з кожного компонента окремо.

Проблема виникає при прямому додаванні через \Bitrix\Sale\Basket::create() — якщо не передати параметри TYPE = TYPE_SET та дочірні позиції, розкриття не відбудеться. Завжди використовуйте \Bitrix\Catalog\Product\Bundle::add() замість прямої роботи з кошиком.

Що входить у налаштування під ключ

  • Створення товарів типу TYPE_SET та заповнення b_catalog_product_set
  • Розрахунок доступної кількості за мінімумом серед компонентів
  • Правило кошика для знижки на комплект через b_sale_discount (тип відсотки)
  • Коректне додавання в кошик через Bundle::add()
  • Інтерфейс керування комплектами в адміністративній частині
  • Перевірку синхронізації з 1С: тип SET має коректно передаватися при обміні через CommerceML
  • Документацію та навчання співробітників (зазвичай 1-2 години)
Підхід Облік залишків Складність Ризик overselling
Окремий товар Не коректний Низька Високий
Віртуальний комплект (TYPE_SET) Коректний Середня Нульовий

Чому обирають нас

Ми працюємо з Бітріксом більше 5 років і виконали 200+ проектів з налаштування каталогів і комплектів. Гарантуємо, що після нашого налаштування не буде розбіжностей залишків і помилок обміну з 1С. Зв'яжіться з нами — оцінимо ваш проект і запропонуємо рішення протягом 1-2 днів.

Часта помилка при налаштуванні комплектів Багато розробників створюють комплект як звичайний товар без `TYPE_SET`, тоді при залишку 0 на компоненті бандл все ще доступний до продажу. Це призводить до від'ємних залишків і повернень. Завжди використовуйте тип SET і перевіряйте залишки за мінімумом.