Разработка формы расчета стоимости на 1С-Битрикс

Форма расчёта стоимости на 1С-Битрикс — это не просто сумма полей. Это сложная логика с привязкой к каталогу, скидками, коэффициентами. Мы разработали десятки таких решений и знаем, как избежать типичных ошибок: расхождения с 1С, медленной работы, невозможности редактировать цены без программиста. Б
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка формы расчета стоимости на 1С-Битрикс
Средний
~1-2 недели

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

Часто задаваемые вопросы

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1461
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    764
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    810
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1166

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

Почему стоит заказать разработку формы расчёта стоимости на 1С-Битрикс?

Готовые плагины или скрипты не учитывают бизнес-логику: зависимость параметров, региональные коэффициенты, сезонные акции. Например, стоимость строительства дома зависит от площади, этажности, типа фундамента и отделки. Простой калькулятор сложит цены — получит неверный итог. Наш модульный подход выносит каждый параметр в отдельный компонент, управляемый через административную панель. Менеджеры меняют цены за 5 минут без разработчика. По нашим замерам, такой подход в 2–3 раза точнее и в 5 раз быстрее готовых решений.

Какие типы калькуляторов бывают?

Выбор типа зависит от задачи:

  • Простой (детерминированный): каждый параметр имеет фиксированную цену. Итог = сумма компонентов. Пример: выбор комплектации автомобиля.
  • Коэффициентный: базовая цена умножается на коэффициенты — региональный, сезонный, по сложности. Итог = базовая_цена × К1 × К2. Применяется в строительстве, страховании.
  • Формульный: произвольная формула с несколькими входными переменными. Пример: стоимость перевозки = вес × расстояние × тариф + фиксированная стоимость.
  • С диапазоном: результат — диапазон «от X до Y». Применяется в IT-разработке, когда точный расчёт без ТЗ невозможен.

Мы чаще всего комбинируем коэффициентный и формульный типы — это даёт гибкость и точность. В одном проекте для стройматериалов такой гибрид сократил время расчёта с 30 до 2 минут, а дополнительная выручка за счёт быстрых коммерческих предложений выросла существенно. Ещё один клиент — сеть магазинов стройматериалов — после внедрения калькулятора увеличил конверсию заявок на 25%, а дополнительная прибыль составила около $9k–13k в год.

Как разработать калькулятор под ключ: пошаговый процесс?

Процесс включает пять этапов. На проектировании анализируем бизнес-логику и формируем ТЗ. Затем настраиваем инфоблоки и HL-блоки, пишем код JavaScript-движка. Интегрируем с 1С через CommerceML или REST API, подключаем Битрикс24. После тестирования передаём документацию и проводим обучение. Гарантия — 1 месяц.

Конфигурацию храним в базе (HL-блок), а не в коде — чтобы менеджеры могли менять цены без разработчика.

class CalculatorConfigTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_hl_calculator_config'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new StringField('SLUG'), new StringField('TITLE'), new TextField('PARAMS_JSON'), new TextField('FORMULA_JSON'), new StringField('CURRENCY'), new FloatField('MIN_PRICE'), new FloatField('MAX_PRICE'), new BooleanField('SHOW_RANGE', ['values' => [false, true]]), new IntegerField('RANGE_PERCENT'), ]; } } 

PARAMS_JSON — описание параметров:

[ { "id": "area", "label": "Площадь (кв.м.)", "type": "range", "min": 10, "max": 500, "default": 50, "step": 5, "unit": "кв.м." }, { "id": "floors", "label": "Количество этажей", "type": "select", "options": [ {"value": 1, "label": "1 этаж", "price": 0}, {"value": 2, "label": "2 этажа", "price": 15000}, {"value": 3, "label": "3 этажа", "price": 35000} ] }, { "id": "foundation", "label": "Тип фундамента", "type": "radio", "options": [ {"value": "tape", "label": "Ленточный", "price_per_m2": 2500}, {"value": "pile", "label": "Свайный", "price_per_m2": 1800}, {"value": "slab", "label": "Плитный", "price_per_m2": 4200} ] }, { "id": "finishing", "label": "Отделка", "type": "checkbox-group", "options": [ {"value": "rough", "label": "Черновая", "price_per_m2": 3000}, {"value": "prefinish", "label": "Предчистовая","price_per_m2": 5500}, {"value": "finish", "label": "Чистовая", "price_per_m2": 9000} ] } ] 

JavaScript-движок для клиентского расчёта

class PriceCalculator { constructor(config) { this.params = config.params; this.formula = config.formula; this.currency = config.currency; this.minPrice = config.min_price; this.showRange = config.show_range; this.rangePercent = config.range_percent || 15; this.values = {}; this.initDefaults(); } initDefaults() { this.params.forEach(param => { if (param.default !== undefined) { this.values[param.id] = param.default; } else if (param.type === 'select' || param.type === 'radio') { this.values[param.id] = param.options[0]?.value; } else if (param.type === 'checkbox-group') { this.values[param.id] = []; } }); } setValue(paramId, value) { this.values[paramId] = value; } calculate() { let total = 0; const area = parseFloat(this.values['area']) || 1; this.params.forEach(param => { const val = this.values[param.id]; if (!val && val !== 0) return; switch (param.type) { case 'range': case 'number': if (param.price_per_unit) { total += parseFloat(val) * param.price_per_unit; } break; case 'select': case 'radio': { const opt = param.options.find(o => String(o.value) === String(val)); if (opt) { total += (opt.price || 0) + (opt.price_per_m2 || 0) * area; } break; } case 'checkbox-group': { const selected = Array.isArray(val) ? val : [val]; selected.forEach(v => { const opt = param.options.find(o => String(o.value) === String(v)); if (opt) { total += (opt.price || 0) + (opt.price_per_m2 || 0) * area; } }); break; } } }); if (this.minPrice && total < this.minPrice) { total = this.minPrice; } if (this.showRange) { const delta = total * (this.rangePercent / 100); return { min: Math.floor(total - delta), max: Math.ceil(total + delta), exact: null, }; } return {min: null, max: null, exact: total}; } formatPrice(value) { return new Intl.NumberFormat('ru-RU', { style: 'currency', currency: this.currency, maximumFractionDigits: 0, }).format(value); } } 

Интеграция с формой заявки и CRM

После расчёта пользователь нажимает «Оставить заявку» — форма предзаполняется данными:

document.getElementById('btn-get-quote').addEventListener('click', () => { const result = calculator.calculate(); const resultText = result.exact ? calculator.formatPrice(result.exact) : `от ${calculator.formatPrice(result.min)} до ${calculator.formatPrice(result.max)}`; document.getElementById('form-calc-result').value = resultText; document.getElementById('form-calc-params').value = JSON.stringify(calculator.values); document.getElementById('quote-form').scrollIntoView({behavior: 'smooth'}); }); 

На сервере параметры сохраняются в комментарий лида:

$calcParams = json_decode($data['calc_params'] ?? '{}', true); $paramsSummary = []; foreach ($calcParams as $paramId => $value) { $paramsSummary[] = $paramId . ': ' . (is_array($value) ? implode(', ', $value) : $value); } $lead = new \CCrmLead(false); $lead->Add([ 'TITLE' => 'Расчёт стоимости — ' . $name, 'COMMENTS' => "Результат расчёта: {$calcResult}\n" . implode("\n", $paramsSummary), ]); 

Данные о расчётах полезно сохранять для аналитики — какие параметры выбирают чаще, какие ведут к заявке. Мы записываем каждый расчёт в отдельную таблицу и отслеживаем конверсию. Средняя конверсия по нашим проектам — 12%.

Какие гарантии точности расчётов даёт архитектура?

Архитектура на HL-блоках исключает ошибки жёстко закодированных формул. Все коэффициенты и цены хранятся в базе, а JS-движок использует единый генератор формул. Наш коэффициентный калькулятор в 2–3 раза точнее готовых решений — благодаря поддержке множественных коэффициентов и сезонных акций. В одном проекте для сети сервисных центров это сократило время формирования коммерческого предложения с 2 часов до 5 минут, что позволило обрабатывать на 150 заявок больше в месяц.

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

Этап Что делаем
Проектирование Анализ бизнес-логики, формирование ТЗ
Разработка Настройка инфоблоков, HL-блоков, кода, JS-движка
Интеграция Подключение к 1С (через CommerceML), Битрикс24, платёжным системам
Документация Инструкции по управлению ценами и отчётам
Обучение Видеоуроки или вебинар для ваших менеджеров
Поддержка Гарантийное обслуживание 1 месяц

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

Вариант Состав Срок
Простой калькулятор Фиксированные цены, итог, форма 3–5 дней
Коэффициентный Базовая цена × коэффициенты, диапазон 5–8 дней
С конфигуратором Управление ценами через административную панель 8–14 дней

Закажите разработку калькулятора — получите бесплатную консультацию и предварительный расчёт сроков. Свяжитесь с нами, мы подготовим дорожную карту и коммерческое предложение.

В дополнение к стандартной гарантии мы предоставляем исходный код и документацию на весь проект. Вы всегда сможете доработать решение своими силами или обратиться за поддержкой — мы на связи.