Форма розрахунку вартості на 1С-Бітрікс — це не просто сума полів. Це складна логіка з прив'язкою до каталогу, знижками, коефіцієнтами. Ми розробили десятки таких рішень і знаємо, як уникнути типових помилок: розбіжності з 1С, повільної роботи, неможливості редагувати ціни без програміста. Без правильної архітектури калькулятор перетворюється на головний біль — помилки в розрахунках, низька швидкість, ручне оновлення прайсів.
Чому варто замовити розробку форми розрахунку вартості на 1С-Бітрікс?
Готові плагіни або скрипти не враховують бізнес-логіку: залежність параметрів, регіональні коефіцієнти, сезонні акції. Наприклад, вартість будівництва будинку залежить від площі, поверховості, типу фундаменту та оздоблення. Простий калькулятор додасть ціни — отримає невірний підсумок. Наш модульний підхід виносить кожен параметр в окремий компонент, керований через адміністративну панель. Менеджери змінюють ціни за 5 хвилин без розробника. За нашими вимірами, такий підхід у 2–3 рази точніший і в 5 разів швидший за готові рішення.
Які типи калькуляторів бувають?
Вибір типу залежить від завдання:
- Простий (детермінований): кожен параметр має фіксовану ціну. Підсумок = сума компонентів. Приклад: вибір комплектації автомобіля.
- Коефіцієнтний: базова ціна множиться на коефіцієнти — регіональний, сезонний, за складністю. Підсумок = базова_ціна × К1 × К2. Застосовується в будівництві, страхуванні.
- Формульний: довільна формула з декількома вхідними змінними. Приклад: вартість перевезення = вага × відстань × тариф + фіксована вартість.
- З діапазоном: результат — діапазон «від X до Y». Застосовується в IT-розробці, коли точний розрахунок без ТЗ неможливий.
Ми найчастіше комбінуємо коефіцієнтний та формульний типи — це дає гнучкість і точність. В одному проєкті для будматеріалів такий гібрид скоротив час розрахунку з 30 до 2 хвилин, а додатковий виторг за рахунок швидких комерційних пропозицій зріс суттєво. Ще один клієнт — мережа магазинів будматеріалів — після впровадження калькулятора збільшив конверсію заявок на 25%, а додатковий прибуток склав мільйони рублів на рік.
Як розробити калькулятор під ключ: покроковий процес?
Процес включає п'ять етапів. На проєктуванні аналізуємо бізнес-логіку та формуємо ТЗ. Потім налаштовуємо інфоблоки та 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('uk-UA', {
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 днів |
Замовте розробку калькулятора — отримайте безкоштовну консультацію та попередній розрахунок строків. Зв'яжіться з нами, ми підготуємо дорожню карту та комерційну пропозицію.
На додаток до стандартної гарантії ми надаємо вихідний код та документацію на весь проєкт. Ви завжди зможете доопрацювати рішення власними силами або звернутися за підтримкою — ми на зв'язку.







