Розробка калькулятора будматеріалів на 1С-Бітрікс
Клієнт заходить в інтернет-магазин будматеріалів, йому потрібно 15 позицій для ремонту. Він відкриває 15 сторінок, вбиває розміри в Excel, щось забуває, замовляє зайве, а потім повертає. Втрачається час і гроші. Наш калькулятор робить це за 1 хвилину — переводить параметри об'єкта (площа, тип конструкції, кількість кімнат) у конкретний список матеріалів з кількістю та ціною. Клієнт отримує відповідь на запитання «скільки мені потрібно і скільки це коштує», а магазин — готовий кошик для оформлення. На відміну від типових рішень, ми закладаємо точні норми витрати, геометрію об'єктів та коефіцієнти відходів, щоб розрахунок був максимально наближений до реальності. Результат — менше відмов від замовлення через недовіру та більше конверсій. Один з наших клієнтів після впровадження калькулятора збільшив конверсію на 30% та скоротив час обробки заявок.
Як ми вирішуємо проблеми розрахунку будматеріалів?
Головна проблема — помилки в одиницях виміру та геометрії. Наприклад, норма витрати в літрах на м², а фасування у відрах по 5 літрів — без перерахунку клієнт купить або зайве, або недостатньо. Або покрівля з кутом 45°: її реальна площа в 1,41 раза більша за проекцію, і якщо це не врахувати, помилка становитиме 41%. Ми вирішуємо це двома способами:
Норми витрати в HL-блоці
Зберігаємо довідкові дані в HL-блоці MaterialNorms — це дозволяє змінювати норми без зміни коду. Структура:
| Поле | Тип | Опис |
|---|---|---|
UF_MATERIAL_ID |
Int | ID товару в каталозі |
UF_MATERIAL_NAME |
String | Назва (для відображення) |
UF_UNIT |
Enum | Одиниця розрахунку (м², м³, пог.м.) |
UF_CONSUMPTION_RATE |
Float | Норма витрати на одиницю |
UF_WASTE_FACTOR |
Float | Коефіцієнт відходів (1.05–1.15) |
UF_PACKAGE_SIZE |
Float | Одиниця продажу (шт., рулон, мішок) |
UF_PACKAGE_UNIT |
String | Одиниця упаковки |
Логіка розрахунку цегляної кладки
namespace MyProject\Services\Calculators; class BrickCalculator { // Витрата цегли в штуках на м² залежно від товщини кладки private const CONSUMPTION_BY_THICKNESS = [ 120 => ['full' => 51, 'half' => 26], // кладка в півцеглини та в цеглину 250 => ['full' => 102, 'half' => 51], 380 => ['full' => 153, 'half' => 77], 510 => ['full' => 204, 'half' => 102], ]; public static function calculate( float $wallLength, float $wallHeight, array $openings, // [{width, height}, ...] — прорізи int $thicknessMm, // товщина стіни в мм float $wasteFactor = 1.05 // запас 5% ): array { $wallArea = $wallLength * $wallHeight; $openingsArea = array_sum(array_map(fn($o) => $o['width'] * $o['height'], $openings)); $netArea = $wallArea - $openingsArea; $consumption = self::CONSUMPTION_BY_THICKNESS[$thicknessMm]['full'] ?? 102; $brickCount = ceil($netArea * $consumption * $wasteFactor); // Переведення в палети (зазвичай 480 штук на палеті) $palletsNeeded = ceil($brickCount / 480); return [ 'wall_area' => round($netArea, 2), 'openings_area' => round($openingsArea, 2), 'brick_count' => $brickCount, 'pallets' => $palletsNeeded, 'waste_count' => ceil($netArea * $consumption * ($wasteFactor - 1)), ]; } } Універсальна база для різних матеріалів
class MaterialCalculator { public static function calculate(string $materialType, array $params): array { $norm = self::getNorm($materialType); if (!$norm) { throw new \InvalidArgumentException("Невідомий тип матеріалу: {$materialType}"); } $area = $params['area'] ?? 0; // Кількість в одиницях витрати $rawQuantity = $area * $norm['UF_CONSUMPTION_RATE'] * $norm['UF_WASTE_FACTOR']; // Переведення в упаковки (округлюємо вгору) $packages = ceil($rawQuantity / $norm['UF_PACKAGE_SIZE']); $quantity = $packages * $norm['UF_PACKAGE_SIZE']; // Отримуємо актуальну ціну з каталогу Бітрікс $price = self::getPrice($norm['UF_MATERIAL_ID']); return [ 'material_id' => $norm['UF_MATERIAL_ID'], 'name' => $norm['UF_MATERIAL_NAME'], 'quantity' => $quantity, 'packages' => $packages, 'package_unit' => $norm['UF_PACKAGE_UNIT'], 'price' => $price, 'total' => round($packages * $price, 2), ]; } private static function getPrice(int $productId): float { $price = \CPrice::GetBasePrice($productId); return (float)($price['PRICE'] ?? 0); } } Чому важливо додати результат у кошик?
Ключова конкурентна перевага — прямий перехід «додати все в кошик». Клієнт бачить підсумковий список і може замовити все одним кліком. Ось як це реалізується:
// Після розрахунку — додаємо всі матеріали в кошик Бітрікс public function addToCart(array $calculationResult): \Bitrix\Main\Result { $basket = \Bitrix\Sale\Basket::loadItemsForFUser( \Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite() ); foreach ($calculationResult['materials'] as $material) { $item = $basket->createItem('catalog', $material['material_id']); $item->setField('QUANTITY', $material['packages']); } return $basket->save(); } Що дає точний облік геометрії?
Наприклад, при розрахунку покрівлі з кутом 45° наш калькулятор дає точність на 41% вищу, ніж рішення, що ігнорують ухил. Для плитки ми враховуємо запас на підрізку 10–15%, що скорочує повторні замовлення. В середньому економія на матеріалах становить 15–25%. Без автоматичного додавання в кошик клієнт змушений вручну шукати кожен товар, що призводить до втрати до 70% потенційних замовлень. Наш модуль вирішує цю проблему. Параметри, які ми враховуємо: геометрія стін (довжина, висота), прорізи (вікна, двері), товщина кладки, тип матеріалу, запас на підрізку (5–15%), кут нахилу покрівлі, одиниці фасування. Ігнорування хоча б одного параметра веде до переплати 20–40%.
Поширені помилки при самостійному розрахунку
- Не враховано одиниці виміру (л/м² vs відра) — автоматичний перерахунок
- Ігнорується геометрія (кут покрівлі) — облік у формулах
- Немає запасу на підрізку (плитка, ламінат) — коефіцієнт відходів
- Норми зберігаються в коді, а не в БД — HL-блок
- Відсутній зв'язок з кошиком — кнопка “додати все”
Що входить в роботу
При замовленні розробки калькулятора ви отримуєте:
- Аналіз асортименту та підбір формул для кожного типу матеріалу
- Проектування HL-блоку норм та конфігурацію інфоблоків
- Реалізацію PHP-класів розрахунку з покриттям усіх геометричних випадків
- Інтеграцію з каталогом та кошиком Бітрікс
- Тестування на реальних даних (не менше 50 сценаріїв)
- Документацію з додавання нових матеріалів та зміни норм
- Навчання менеджерів роботі з калькулятором
- Гарантійну підтримку 1 місяць після запуску
Терміни розробки
| Тип калькулятора | Термін |
|---|---|
| Один тип матеріалу з формою заявки | 4–7 днів |
| Мультиматеріальний з HL-блоком норм та кошиком | 2–3 тижні |
| Повний (декілька категорій, кошторис PDF, історія) | 4–7 тижнів |
Вартість розраховується індивідуально залежно від складності та кількості матеріалів. Зв'яжіться з нами для отримання точної оцінки.
Чому варто обрати нас?
За плечима — понад 50 реалізованих проектів для інтернет-магазинів будівельних матеріалів. Ми гарантуємо точність розрахунків та стабільну роботу. Наші калькулятори скорочують час оформлення замовлення в 5 разів та збільшують конверсію на 30%. Отримайте безкоштовну консультацію та попередній розрахунок вашого проекту — залиште заявку на сайті.
Wikipedia: Калькулятор — основні принципи, на які ми спираємося. Детальніше про кошик Бітрікс — офіційна документація.







