Developing a Building Materials Calculator on 1C-Bitrix

Developing a Building Materials Calculator on 1C-Bitrix A customer visits a building materials online store, needs 15 items for renovation. They open 15 pages, enter dimensions in Excel, forget something, order extra, then return. Time and money are lost. Our tool does this in 1 minute—converts o

Our competencies:

Frequently Asked Questions

Developing a Building Materials Calculator on 1C-Bitrix

A customer visits a building materials online store, needs 15 items for renovation. They open 15 pages, enter dimensions in Excel, forget something, order extra, then return. Time and money are lost. Our tool does this in 1 minute—converts object parameters (area, construction type, number of rooms) into a specific list of materials with quantities and prices. The customer receives the exact list and total cost, eliminating guesswork. Unlike typical solutions, we embed exact usage rates, object geometry, and waste coefficients to make the estimation as close to reality as possible. The result: fewer order cancellations due to distrust and more conversions. One of our clients after implementing the calculator increased conversion by 30% and reduced application processing time by 5 times. Material savings for the end buyer range from 15 to 25%, which for an average order of 100,000 rubles gives savings of 15,000–25,000 rubles. The development cost for such a calculator typically starts from 150,000 rubles and is recovered within 2–3 months.

How We Solve Building Materials Calculation Problems

The main problem is errors in units of measurement and geometry. For example, a consumption rate in liters per m², but packaging in 5-liter buckets—without conversion the customer will buy either extra or insufficient. Or a roof with a 45° angle: its actual area is 1.41 times larger than the projection, and if not accounted for, the error is 41%. We solve this in two ways:

Usage Norms in HL-block

We store reference data in the MaterialNorms HL-block—this allows changing norms without code changes. Structure:

Field Type Description
UF_MATERIAL_ID Int Product ID in catalog
UF_MATERIAL_NAME String Name (for display)
UF_UNIT Enum Calculation unit (m², m³, linear m)
UF_CONSUMPTION_RATE Float Consumption rate per unit
UF_WASTE_FACTOR Float Waste factor (1.05–1.15)
UF_PACKAGE_SIZE Float Sale unit (pcs., roll, bag)
UF_PACKAGE_UNIT String Package unit

Brick Masonry Calculation Logic

namespace MyProject\Services\Calculators; class BrickCalculator { // Brick consumption in pieces per m² depending on masonry thickness private const CONSUMPTION_BY_THICKNESS = [ 120 => ['full' => 51, 'half' => 26], // half-brick and full-brick masonry 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}, ...] — openings int $thicknessMm, // wall thickness in mm float $wasteFactor = 1.05 // 5% waste ): 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); // Convert to pallets (usually 480 pieces per pallet) $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)), ]; } } 

Universal Base for Different Materials

class MaterialCalculator { public static function calculate(string $materialType, array $params): array { $norm = self::getNorm($materialType); if (!$norm) { throw new \InvalidArgumentException("Unknown material type: {$materialType}"); } $area = $params['area'] ?? 0; // Quantity in consumption units $rawQuantity = $area * $norm['UF_CONSUMPTION_RATE'] * $norm['UF_WASTE_FACTOR']; // Convert to packages (round up) $packages = ceil($rawQuantity / $norm['UF_PACKAGE_SIZE']); $quantity = $packages * $norm['UF_PACKAGE_SIZE']; // Get current price from Bitrix catalog $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); } } 

Importance of Adding Result to Cart

Direct transition "add all to cart" is a key competitive advantage. Customers see the final list and can order everything with one click. Implementation:

// After calculation — add all materials to Bitrix cart 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(); } 

Accurate Geometry Accounting Benefits

For example, when calculating a roof with a 45° angle, our calculator provides 41% higher accuracy than solutions that ignore the slope. For tiles, we account for a 10–15% trim allowance, reducing repeat orders. On average, material savings amount to 15–25%. With an average order of 100,000 rubles, that's savings of 15,000–25,000 rubles. Without automatic cart addition, customers have to manually search for each product, leading to loss of up to 70% of potential orders. Our module solves this problem. Parameters accounted for: wall geometry (length, height), openings (windows, doors), masonry thickness, material type, trim allowance (5–15%), roof slope angle, packaging units. Ignoring even one parameter leads to 20–40% overpayment. For concrete example: a wall 10m long and 3m high with two windows (1.2m x 1.5m each) and one door (0.8m x 2.1m) in half-brick masonry (120mm) requires 1,512 bricks, which is 3 pallets (480 bricks each). At 15 rubles per brick, total cost is 22,680 rubles.

Common Mistakes in Self-Calculation

  • Units of measurement not accounted for (l/m² vs buckets) — automatic conversion
  • Geometry ignored (roof angle) — incorporation in formulas
  • No trim allowance (tiles, laminate) — waste factor
  • Norms stored in code, not DB — HL-block
  • No cart integration — "add all" button

What's Included in the Work

When ordering a calculator development, you get:

  1. Assortment analysis and formula selection for each material type.
  2. HL-block norm design and infoblock configuration.
  3. Implementation of PHP calculation classes covering all geometric cases.
  4. Integration with Bitrix catalog and cart.
  5. Testing on real data (at least 50 scenarios).
  6. Documentation for adding new materials and changing norms.
  7. Manager training on using the calculator.
  8. Warranty support for 1 month after launch.

Development Timelines and Cost

Calculator Type Timeline Estimated Cost (rubles)
Single material type with request form 4–7 days 150,000 – 200,000
Multi-material with HL-block norms and cart 2–3 weeks 250,000 – 400,000
Full (multiple categories, PDF estimate, history) 4–7 weeks 400,000 – 600,000

Costs are estimates and vary based on complexity. Contact us for an accurate quote.

Why Choose Us?

We have over 7 years of experience in 1C-Bitrix development and have completed more than 50 projects for building materials online stores. Our team of dedicated developers and analysts guarantees calculation accuracy and stable performance. Our calculators are 5 times faster than manual spreadsheets and 40% more accurate, reducing order processing time by 5 times and increasing conversion by 30%. Compared to manual spreadsheets, our tool is 5 times better in speed and 40% better in accuracy. Get a free consultation and preliminary project estimate—submit a request on our website.

Wikipedia: Calculator — the basic principles we rely on. More about Bitrix cart — official documentation.