Разработка модуля калькулятора услуг 1С-Битрикс

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

Разработка модуля калькулятора услуг 1С-Битрикс

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

Готовых решений в маркетплейсе Битрикс практически нет, либо они слишком простые. Для серьёзного бизнеса — страховой компании, строительного подрядчика, типографии — нужен модуль с гибкой формулой и интеграцией с CRM.

Что должен уметь модуль

  • Несколько независимых калькуляторов на одном сайте (для разных услуг)
  • Многошаговый ввод параметров
  • Сложные формулы с условиями (if площадь > 100, то скидка 10%)
  • Зависимые поля (выбор одного поля меняет список опций в другом)
  • Привязка к ценам из торгового каталога Битрикс (b_catalog_price)
  • Отправка заявки с расчётом в CRM как лид или сделка
  • Пересчёт в реальном времени без перезагрузки страницы

Структура данных

Модуль vendor.calculator со следующими таблицами:

  • b_vendor_calc_calculator — калькуляторы: id, name, slug, config (JSON полей и шагов), formula (JSON дерево вычислений), crm_target (lead/deal), is_active
  • b_vendor_calc_field — поля калькулятора: id, calculator_id, type, name, label, options (JSON), depends_on, validation_rules, sort
  • b_vendor_calc_result — сохранённые расчёты: id, calculator_id, session_id, user_id, params (JSON), result (JSON суммы), created_at
  • b_vendor_calc_lead — связь расчёта с лидом/сделкой CRM: result_id, crm_type, crm_id

Типы полей

Поддерживаемые типы полей калькулятора:

  • number — числовое поле с min/max/step
  • slider — ползунок с диапазоном
  • select — выпадающий список с привязкой коэффициентов
  • checkbox — флаг с добавочной стоимостью
  • radio — выбор одного варианта
  • area — двумерный ввод (ширина × высота)
  • catalog_product — выбор товара из инфоблока с автоподстановкой цены

Движок формул

Формула хранится в JSON-структуре, которая интерпретируется на стороне сервера (PHP) и на стороне клиента (JavaScript). Синхронность критична: итоговая сумма в интерфейсе должна совпадать с суммой в CRM.

Пример формулы для расчёта ремонтных работ:

{
  "type": "add",
  "operands": [
    {
      "type": "multiply",
      "operands": [
        {"type": "field", "name": "area"},
        {"type": "field", "name": "work_type_price"}
      ]
    },
    {
      "type": "if",
      "condition": {"type": "gt", "left": {"type": "field", "name": "area"}, "right": 100},
      "then": {"type": "multiply", "operands": [{"type": "ref", "name": "subtotal"}, -0.1]},
      "else": 0
    }
  ]
}

PHP-интерпретатор FormulaEvaluator::evaluate($formula, $fieldValues) рекурсивно обходит дерево и вычисляет итог.

JavaScript-часть

На фронтенде — реактивный пересчёт. При изменении любого поля:

  1. Собираются текущие значения всех полей
  2. Локальная копия формулы вычисляется в JS (та же логика, что на PHP)
  3. Результат мгновенно обновляется в интерфейсе
  4. Дополнительно: AJAX-запрос на сервер для точного расчёта с учётом актуальных цен из БД
// Пересчёт при изменении поля
document.querySelectorAll('.calc-field').forEach(field => {
    field.addEventListener('change', () => {
        const values = collectFieldValues();
        const localResult = evaluateFormula(calculatorConfig.formula, values);
        updateResultDisplay(localResult);
        debounce(() => fetchServerResult(values), 500)();
    });
});

Зависимые поля

Зависимость описывается в конфигурации поля:

{
  "name": "material_type",
  "type": "select",
  "depends_on": {
    "field": "work_type",
    "map": {
      "painting": ["latex", "acrylic", "oil"],
      "wallpaper": ["paper", "vinyl", "non-woven"],
      "tile": ["ceramic", "porcelain", "mosaic"]
    }
  }
}

При выборе work_type = 'painting' список материалов фильтруется до ["latex", "acrylic", "oil"]. Логика работает и на клиенте, и проверяется на сервере при отправке формы.

Отправка в CRM

После завершения расчёта пользователь заполняет контактные данные и отправляет заявку. Модуль создаёт лид или сделку:

$leadFields = [
    'TITLE'       => 'Расчёт из калькулятора: ' . $calculator['NAME'],
    'NAME'        => $formData['name'],
    'PHONE'       => [['VALUE' => $formData['phone'], 'VALUE_TYPE' => 'WORK']],
    'EMAIL'       => [['VALUE' => $formData['email'], 'VALUE_TYPE' => 'WORK']],
    'COMMENTS'    => $this->buildCalculatorComment($result),
    'UF_CALC_SUM' => $result['total'],
    'SOURCE_ID'   => 'CALCULATOR',
];

$leadId = \Bitrix\Crm\LeadTable::add($leadFields)->getId();

Параметры расчёта записываются в комментарий лида и в пользовательское поле UF_CALC_PARAMS (JSON).

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

Этап Срок
Архитектура, таблицы, инсталлятор 1 день
Конструктор полей и конфигуратор 2 дня
Движок формул PHP + JS 3 дня
Зависимые поля, реактивный пересчёт 2 дня
Интеграция с ценами каталога 1 день
Отправка в CRM 1 день
Административный интерфейс 2 дня
Компонент для размещения на странице 1 день

Итого: 13 рабочих дней. Нестандартные формулы с внешними справочниками (тарифные сетки, региональные коэффициенты) — +2-3 дня.