Разработка калькулятора стройматериалов на 1С-Битрикс
Клиент заходит в интернет-магазин стройматериалов, ему нужно 15 позиций для ремонта. Он открывает 15 страниц, вбивает размеры в Excel, что-то забывает, заказывает лишнее, а потом возвращает. Теряется время и деньги. Наш калькулятор делает это за 1 минуту — переводит параметры объекта (площадь, тип конструкции, количество комнат) в конкретный список материалов с количеством и ценой. Клиент получает ответ на вопрос «сколько мне нужно и сколько это стоит», а магазин — готовую корзину для оформления. В отличие от типовых решений, мы закладываем точные нормы расхода, геометрию объектов и коэффициенты отходов, чтобы расчёт был максимально приближен к реальности. Результат — меньше отказов от заказа из-за недоверия и больше конверсий. Один из наших клиентов после внедрения калькулятора увеличил конверсию на 30% и сократил время обработки заявок. Экономия на материалах для конечного покупателя составляет от 15 до 25%, что при среднем чеке $900–1.3k. даёт экономию $150–250.
Как мы решаем проблемы расчёта стройматериалов?
Главная проблема — ошибки в единицах измерения и геометрии. Например, норма расхода в литрах на м², а фасовка в вёдрах по 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%. При среднем заказе $900–1.3k. это экономия $150–250. Без автоматического добавления в корзину клиент вынужден вручную искать каждый товар, что приводит к потере до 70% потенциальных заказов. Наш модуль решает эту проблему. Параметры, которые мы учитываем: геометрия стен (длина, высота), проёмы (окна, двери), толщина кладки, тип материала, запас на подрезку (5–15%), угол наклона кровли, единицы фасовки. Игнорирование хотя бы одного параметра ведёт к переплате 20–40%.
Распространённые ошибки при самостоятельном расчёте
- Не учтены единицы измерения (л/м² vs вёдра) — автоматический пересчёт
- Игнорируется геометрия (угол кровли) — учёт в формулах
- Нет запаса на подрезку (плитка, ламинат) — коэффициент отходов
- Нормы хранятся в коде, а не в БД — HL-блок
- Отсутствует связь с корзиной — кнопка “добавить всё”
Что входит в работу
При заказе разработки калькулятора вы получаете:
- Анализ ассортимента и подбор формул для каждого типа материала
- Проектирование HL-блока норм и конфигурацию инфоблоков
- Реализацию PHP-классов расчёта с покрытием всех геометрических случаев
- Интеграцию с каталогом и корзиной Битрикс
- Тестирование на реальных данных (не менее 50 сценариев)
- Документацию по добавлению новых материалов и изменению норм
- Обучение менеджеров работе с калькулятором
- Гарантийную поддержку 1 месяц после запуска
Сроки разработки
| Тип калькулятора | Срок |
|---|---|
| Один тип материала с формой заявки | 4–7 дней |
| Мультиматериальный с HL-блоком норм и корзиной | 2–3 недели |
| Полный (несколько категорий, смета PDF, история) | 4–7 недель |
Стоимость рассчитывается индивидуально в зависимости от сложности и количества материалов. Свяжитесь с нами для получения точной оценки.
Почему стоит выбрать нас?
За плечами — более 50 реализованных проектов для интернет-магазинов строительных материалов. Мы гарантируем точность расчётов и стабильную работу. Наши калькуляторы сокращают время оформления заказа в 5 раз и увеличивают конверсию на 30%. Получите бесплатную консультацию и предварительный расчёт вашего проекта — оставьте заявку на сайте.
Wikipedia: Калькулятор — основные принципы, на которые мы опираемся. Подробнее о корзине Битрикс — официальная документация.







