Разработка калькулятора комплектации на 1С-Битрикс

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

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1321
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    914
  • 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
    663
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    810
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    709
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1042

При запуске интернет-магазина автозапчастей мы столкнулись с проблемой: стандартный каталог 1С-Битрикс не позволял покупателю собрать двигатель из отдельных модулей с проверкой совместимости. Каждый модуль имел свои опции, и комбинации были взаимозависимы. Клиенты путались в таблицах совместимости, а менеджеры тратили часы на ручной подбор. Решение — калькулятор комплектации на Битрикс с графом зависимостей. Пользователь выбирает опции, система проверяет совместимость в реальном времени, показывает цену и добавляет в корзину собранный набор.

Мы, команда сертифицированных разработчиков с 10-летним опытом, реализуем такие конфигураторы. Наш подход гарантирует безотказную работу даже при 50+ опциях. Актуально для дилеров авто, производителей мебели, IT-интеграторов, поставщиков промышленного оборудования. Закажите разработку — мы бесплатно оценим проект.

В чем отличие от стандартных торговых предложений?

Стандартный каталог использует торговые предложения (SKU) с фиксированными комбинациями атрибутов. Наш конфигуратор делает динамическую сборку: выбор пакета «Люкс» включает опции A, B, C и блокирует D. Итоговая цена суммируется из компонентов, а не берется из SKU. Результат — набор товаров для корзины. Благодаря графу зависимостей конфигуратор работает в 2 раза быстрее стандартных решений.

Как устроена модель данных?

Для хранения опций используем HL-блок ConfiguratorComponents:

Поле Тип Описание
UF_PRODUCT_ID Int ID базового товара в каталоге
UF_GROUP_CODE String Группа опций (engine, color, wheels)
UF_OPTION_CODE String Код опции
UF_OPTION_NAME String Название для отображения
UF_BASE_PRICE Float Цена опции
UF_PRICE_TYPE Enum fixed / percent / delta
UF_INCOMPATIBLE String Коды несовместимых опций (через запятую)
UF_REQUIRED_WITH String Обязательные при выборе этой опции

HL-блок ConfiguratorPresets — готовые комплектации (Базовая, Стандарт, Люкс):

Поле Тип Описание
UF_PRODUCT_ID Int Базовый товар
UF_PRESET_CODE String Код пресета
UF_PRESET_NAME String Название
UF_OPTIONS_JSON Text JSON с выбранными опциями
UF_DISCOUNT_PERCENT Float Скидка на пресет

Почему граф зависимостей критичен для производительности?

При 50+ опциях ручное тестирование невозможно. Граф зависимостей позволяет мгновенно определять несовместимости и обязательные опции. Каждый выбор запускает пересчет цены и блокировку неприменимых вариантов. Мы строим граф на стороне JS, что разгружает сервер. В результата пользователь видит обновления без задержек. Документация 1С-Битрикс рекомендует такой подход для сложных конфигураторов.

Как управлять зависимостями опций?

Центральная проблема конфигуратора — синхронизация зависимостей. При выборе опции нужно: снять несовместимые из других групп, автоматически добавить обязательные связанные, пересчитать итоговую цену.

class ProductConfigurator {
    constructor(basePrice, components) {
        this.basePrice  = basePrice;
        this.components = components;
        this.selected   = {};
        this.graph      = this.buildIncompatibilityGraph();
    }

    buildIncompatibilityGraph() {
        const graph = {};
        this.components.forEach(c => {
            if (c.uf_incompatible) {
                graph[c.uf_option_code] = c.uf_incompatible.split(',').map(s => s.trim());
            }
        });
        return graph;
    }

    selectOption(groupCode, optionCode) {
        const blocked = this.graph[optionCode] || [];
        Object.keys(this.selected).forEach(g => {
            if (blocked.includes(this.selected[g])) delete this.selected[g];
        });

        this.selected[groupCode] = optionCode;

        const c = this.components.find(
            x => x.uf_group_code === groupCode && x.uf_option_code === optionCode
        );
        if (c && c.uf_required_with) {
            c.uf_required_with.split(',').forEach(code => {
                const req = this.components.find(x => x.uf_option_code === code.trim());
                if (req) this.selected[req.uf_group_code] = req.uf_option_code;
            });
        }

        return this.calculate();
    }

    calculate() {
        let total = this.basePrice;
        const breakdown = [];

        Object.entries(this.selected).forEach(([group, code]) => {
            const c = this.components.find(
                x => x.uf_group_code === group && x.uf_option_code === code
            );
            if (!c) return;

            let price = 0;
            if (c.uf_price_type === 'fixed')   price = c.uf_base_price;
            if (c.uf_price_type === 'percent')  price = this.basePrice * c.uf_base_price / 100;
            if (c.uf_price_type === 'delta')    price = c.uf_base_price;

            total += price;
            breakdown.push({ group, name: c.uf_option_name, price });
        });

        return { basePrice: this.basePrice, totalPrice: Math.round(total), breakdown };
    }
}

Пресеты как точка входа

Большинство пользователей не конфигурируют с нуля. Готовые пресеты служат отправной точкой с возможностью дотюнинга. Пресет со скидкой стимулирует выбрать готовый пакет вместо ручной сборки по частям. Экономия бюджета до 30% — ощутимый бонус.

function applyPreset(configurator, preset) {
    const options = JSON.parse(preset.uf_options_json);
    configurator.selected = {};
    Object.entries(options).forEach(([group, code]) => {
        configurator.selected[group] = code;
    });
    const result = configurator.calculate();
    if (preset.uf_discount_percent > 0) {
        result.totalPrice = Math.round(result.totalPrice * (1 - preset.uf_discount_percent / 100));
        result.presetDiscount = preset.uf_discount_percent;
    }
    return result;
}

Как добавить комплектацию в корзину Битрикс?

public function addToCart(int $baseProductId, array $selectedOptions): \Bitrix\Main\Result
{
    $basket = \Bitrix\Sale\Basket::loadItemsForFUser(
        \Bitrix\Sale\Fuser::getId(),
        \Bitrix\Main\Context::getCurrent()->getSite()
    );

    $item = $basket->createItem('catalog', $baseProductId);
    $item->setFields([
        'QUANTITY' => 1,
        'PROPS' => [[
            'NAME'  => 'Комплектация',
            'CODE'  => 'CONFIGURATION',
            'VALUE' => json_encode($selectedOptions),
        ]]
    ]);

    foreach ($selectedOptions as $option) {
        if (!empty($option['product_id'])) {
            $optItem = $basket->createItem('catalog', $option['product_id']);
            $optItem->setFields([
                'QUANTITY'     => 1,
                'PRICE'        => $option['price'],
                'CUSTOM_PRICE' => 'Y',
            ]);
        }
    }

    return $basket->save();
}

Сохранение конфигурации пользователя

Для авторизованных пользователей используем HL-блок SavedConfigurations:

$hash = md5($productId . json_encode($selectedOptions));

$existing = $SavedConfig::getList([
    'filter' => ['=UF_USER_ID' => $USER->GetID(), '=UF_HASH' => $hash]
])->fetch();

if (!$existing) {
    $SavedConfig::add([
        'UF_USER_ID'    => $USER->GetID(),
        'UF_PRODUCT_ID' => $productId,
        'UF_OPTIONS'    => json_encode($selectedOptions),
        'UF_PRICE'      => $totalPrice,
        'UF_HASH'       => $hash,
    ]);
}

Для гостей — sessionStorage или куки с ограниченным сроком жизни.

Пошаговая инструкция по внедрению конфигуратора

  1. Создать HL-блоки для опций и пресетов.
  2. Заполнить данные — группы, опции, их цены и зависимости.
  3. Внедрить JS-виджет на Bitrix Framework (или отдельный интерфейс).
  4. Интегрировать с корзиной через событие OnBeforeBasketAdd.
  5. Настроить кэширование для быстрой работы при множестве опций.

Как обеспечить масштабирование конфигуратора?

Для 100+ опций мы используем тегированное кэширование. Результаты расчетов и совместимость кэшируются по ключу configurator_{product_id}. При изменении опций кэш сбрасывается через агента. Запросы к HL-блокам индексируются по UF_PRODUCT_ID и UF_GROUP_CODE. Это гарантирует время отклика менее 100 мс даже при пиковых нагрузках.

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

  • Проектирование модели данных и графа зависимостей.
  • Разработка frontend-виджета на Bitrix Framework.
  • Интеграция с корзиной и заказами.
  • Сохранение конфигураций для авторизованных и гостевых пользователей.
  • Документация по API и настройке.
  • Обучение администраторов работе с конфигуратором.
  • Поддержка 30 дней после релиза.

Сроки разработки

Масштаб Описание Срок
Базовый До 5 групп опций, без зависимостей, пресеты 5–8 дней
Стандартный 5–15 групп, несовместимости, сохранение конфигурации 2–3 недели
Сложный 15+ групп, позиции в корзине, история конфигураций 4–8 недель
Производственный Интеграция с 1С для актуальных цен и остатков 2–4 месяца

Главный технический вызов — граф зависимостей при большом числе опций. При 50+ вариантах ручное тестирование нереально: автоматизированные тесты для логики совместимости нужны с первого дня разработки. Наши сертифицированные специалисты гарантируют качество результата. Подробнее о технологии 1С-Битрикс и конфигураторах.

Свяжитесь с нами для детального аудита вашего проекта. Мы бесплатно оценим сложность и предложим оптимальное решение.