Разработка модуля конфигуратора товаров 1С-Битрикс
Конфигуратор нужен, когда товар не имеет фиксированного набора характеристик, а собирается из вариантов: мебель с выбором материала, цвета и размера; компьютер, где процессор влияет на доступные видеокарты; промышленное оборудование с зависимыми опциями. Стандартные торговые предложения Битрикс (SKU) покрывают простые случаи — комбинации из N×M вариантов. Конфигуратор — это другая парадигма: дерево зависимостей, динамическая цена, визуализация.
Чем конфигуратор отличается от SKU
В SKU заранее перечислены все возможные комбинации. Если у ноутбука 3 варианта процессора, 4 варианта RAM и 3 варианта SSD — нужно 36 SKU, и все их надо создать и поддерживать. В конфигураторе опции задаются независимо, а итоговая цена и состав рассчитываются динамически. Это принципиально другая модель данных.
Модель данных
Модуль vendor.configurator:
-
b_vendor_cfg_product— конфигурируемые товары: id, iblock_element_id (базовый товар в инфоблоке), name, base_price, is_active -
b_vendor_cfg_group— группы опций: id, product_id, name, sort, type (single/multiple/required), display_type (radio/checkbox/select/visual) -
b_vendor_cfg_option— опции: id, group_id, name, price_mod_type (fixed/percent/formula), price_mod_value, image_id, weight_mod, is_default, is_active -
b_vendor_cfg_dependency— зависимости: id, option_id (если выбрана), dependent_option_id, action (show/hide/require/disable) -
b_vendor_cfg_configuration— сохранённые конфигурации: id, product_id, user_id, session_id, options (JSON), total_price, created_at -
b_vendor_cfg_order_item— связь конфигурации с позицией заказа: configuration_id, basket_item_id
Зависимости опций
Самое сложное в конфигураторе — зависимости. При выборе «Мощный блок питания» автоматически становятся доступны более производительные видеокарты:
class DependencyResolver
{
public function resolve(int $productId, array $selectedOptions): DependencyResult
{
$dependencies = DependencyTable::getList([
'filter' => ['OPTION_ID' => $selectedOptions],
])->fetchAll();
$visible = [];
$hidden = [];
$required = [];
$disabled = [];
foreach ($dependencies as $dep) {
match ($dep['ACTION']) {
'show' => $visible[] = $dep['DEPENDENT_OPTION_ID'],
'hide' => $hidden[] = $dep['DEPENDENT_OPTION_ID'],
'require' => $required[] = $dep['DEPENDENT_OPTION_ID'],
'disable' => $disabled[] = $dep['DEPENDENT_OPTION_ID'],
};
}
return new DependencyResult($visible, $hidden, $required, $disabled);
}
}
Результат передаётся на фронтенд через AJAX при каждом изменении выбора.
Динамический расчёт цены
Базовая цена + модификаторы опций:
class PriceCalculator
{
public function calculate(int $productId, array $selectedOptionIds): float
{
$product = ProductTable::getById($productId)->fetch();
$price = (float)$product['BASE_PRICE'];
$options = OptionTable::getList([
'filter' => ['ID' => $selectedOptionIds],
])->fetchAll();
foreach ($options as $option) {
$price = match ($option['PRICE_MOD_TYPE']) {
'fixed' => $price + (float)$option['PRICE_MOD_VALUE'],
'percent' => $price * (1 + (float)$option['PRICE_MOD_VALUE'] / 100),
'formula' => $this->evalFormula($option['PRICE_MOD_VALUE'], $price),
default => $price,
};
}
return round($price, 2);
}
}
Формульный модификатор позволяет задавать нелинейные зависимости: например, цена кастомного размера рассчитывается по площади (ширина × высота × базовая ставка за кв.м).
Фронтенд конфигуратора
Интерфейс конфигуратора — React/Vue компонент, подключаемый к странице товара. Логика:
- Загружает структуру групп и опций через REST-эндпоинт
- При изменении выбора — AJAX на
DependencyResolver, обновляет видимость опций - Одновременно AJAX на
PriceCalculator, обновляет итоговую цену - Визуальные опции (цвет, материал) — сетка превью с кликом
Состояние конфигурации синхронизируется с URL-хешем — конфигурацию можно скопировать и отправить ссылку.
Добавление в корзину
Сохранённая конфигурация добавляется в корзину как один товар. Состав конфигурации хранится в b_vendor_cfg_configuration.options, связь с позицией корзины — через b_vendor_cfg_order_item.
При просмотре заказа пользователь и менеджер видят детализацию: какие именно опции были выбраны.
Административный интерфейс
- Конструктор конфигуратора: drag-and-drop групп и опций
- Настройка зависимостей через визуальный редактор (список правил)
- Предпросмотр конфигуратора прямо в админке
- Список сохранённых конфигураций пользователей
- Статистика: популярные конфигурации, средний чек по конфигуратору
Сроки разработки
| Этап | Срок |
|---|---|
| ORM-таблицы, модель продукта и опций | 1 день |
| Resolver зависимостей, API | 2 дня |
| Калькулятор цены, формульные модификаторы | 2 дня |
| Фронтенд-компонент (React/Vue) | 3 дня |
| Добавление в корзину, детализация в заказе | 2 дня |
| Административный конструктор | 2 дня |
| Тестирование | 1 день |
Итого: 13 рабочих дней. 3D-визуализация конфигурации (WebGL) — отдельный проект.







