How to Develop a Transportation Company Website on 1C-Bitrix with Online Booking
A client asks: "Is there a Minsk—Moscow trip on Friday? How much does it cost to rent a bus for 45 people?" — if the answer can't be found in two clicks, they go to an aggregator. Without an online booking system with dynamic pricing, the site becomes a business card that no one uses. We design an architecture where the central element is the tariff grid managed via Highload-blocks.
Problems We Solve — Transport Company Website Development
The main technical challenge is the diversity of services: regular trips, bus rental, corporate transfers, excursions. Each type requires its own parameters: for rental — route, hours, vehicle type; for a trip — date and number of seats. A single information block with conditional properties complicates the code, so we create separate Highload-blocks.
The second problem is cost calculation based on a complex tariff grid. The price depends on distance, time, bus class, season, surcharges. Storing this in information blocks is inefficient — we use HL-blocks with custom fields and indexes.
What Is a Tariff Grid and How to Implement It?
Let's look at an example of bus rental by distance. The system consists of several HL-blocks: Highload-block TariffGrid:
| Field | Type | Purpose |
|---|---|---|
| UF_VEHICLE_TYPE | enumeration | Minibus / Medium Bus / Large Bus |
| UF_COMFORT_CLASS | enumeration | Standard / Comfort / VIP |
| UF_TARIFF_TYPE | enumeration | Per km / Per hour / Fixed route |
| UF_PRICE_PER_UNIT | float | Price per unit (km or hour) |
| UF_MIN_HOURS | integer | Minimum order in hours |
| UF_MIN_PRICE | float | Minimum order cost |
| UF_CITY_FROM | string | Departure city |
| UF_CITY_TO | string | Arrival city |
| UF_FIXED_PRICE | float | Fixed route price |
| UF_SEASON | enumeration | Low / High / Holiday |
| UF_VALID_FROM | date | Tariff valid from date |
| UF_VALID_TO | date | Tariff valid to date |
Highload-block TariffSurcharge — surcharges:
| Field | Type | Purpose |
|---|---|---|
| UF_TYPE | enumeration | Night delivery / Holiday / International / Baggage |
| UF_SURCHARGE_TYPE | enumeration | Percentage / Fixed amount |
| UF_VALUE | float | Surcharge value |
| UF_VEHICLE_TYPE | enumeration | Which vehicle type it applies to |
Calculation algorithm:
- Determine the distance between points. For popular routes, we use pre-calculated data from HL-block
RouteDistance, for non-standard routes — Google Distance Matrix API or OSRM. - Select tariff from
TariffGridby vehicle type, comfort class, and date. - Base cost = distance * UF_PRICE_PER_UNIT.
- If base is less than UF_MIN_PRICE, use UF_MIN_PRICE.
- Apply surcharges from
TariffSurcharge(night delivery, holiday, international route). - For round-trip routes — double the distance with a coefficient of 0.85-0.9.
Implementation in code:
$tariff = TariffGridTable::getRow([ 'filter' => [ 'UF_VEHICLE_TYPE' => $vehicleType, 'UF_COMFORT_CLASS' => $comfortClass, 'UF_TARIFF_TYPE' => 'per_km', '<=UF_VALID_FROM' => $tripDate, '>=UF_VALID_TO' => $tripDate, ], ]); $basePrice = max( $distance * $tariff['UF_PRICE_PER_UNIT'], $tariff['UF_MIN_PRICE'] ); // Наценки $surcharges = TariffSurchargeTable::getList([ 'filter' => ['UF_VEHICLE_TYPE' => $vehicleType], ])->fetchAll(); foreach ($surcharges as $s) { if (isSurchargeApplicable($s, $tripDate, $tripTime, $isInternational)) { $basePrice = applySurcharge($basePrice, $s); } } For hourly rental, the calculation is simpler: hours * tariff per hour, with a minimum check. For fixed routes, UF_FIXED_PRICE is used directly.
Why Online Booking Increases Conversion by 2-3 Times?
The client has no time to call and clarify prices. The online calculator provides an instant answer. Our booking system processes the request 5 times faster than custom PHP solutions, thanks to tagged caching and optimized queries to HL-blocks. We integrate it with the REST API of Bitrix, so after confirmation, an order with trip parameters is created. Payment — 30-50% prepaid via acquiring or full payment at boarding.
Additional Modules
- Fleet — an information block with cards for each vehicle: type, capacity, class, photos, characteristics. Filtering by capacity and class. During booking — automatic selection of suitable buses.
- GPS trip tracking — integration with trackers (WIALON, Galileosky). On the site — a map with the bus location, updated every 30-60 seconds.
- B2B portal — a private section for corporate clients: authorization by contract, submitting requests, exporting invoices and statements from 1C, order history, prepayment balance.
- Route landing pages — for SEO traffic. For each popular route, an information block element is created with a unique description, schedule, and booking widget.
Process of Work
- Analytics — study the carrier's business processes, gather requirements for tariffs, routes, integrations.
- Design — develop HL-block architecture, calculation scheme, interface prototype.
- Development — implement booking, fleet, and integration modules. Write code in PHP 8.1+ using Component 2.0.
- Testing — verify cost calculation for 50+ scenarios, load testing of the calculator.
- Deployment and support — configure caching, monitoring, transfer access and documentation.
What Is Included in the Work
- Development of information block and Highload-block structure
- Implementation of cost calculation algorithm
- Integration with payment systems (YooKassa, Sber)
- Integration with 1C (CommerceML or HTTP services)
- Caching and performance optimization
- SEO optimization of route landing pages
- Training operators to work with the admin panel
- 6-month warranty support
Estimated Deadlines
| Scale | Composition | Time |
|---|---|---|
| Small carrier (5-10 routes) | Service catalog, fleet, application form, route pages | 6-8 weeks |
| Medium company | + online booking with tariff grid, payment, trip schedule | 12-16 weeks |
| Large carrier | + B2B portal, GPS tracking, 1C integration, multilingual | 20-26 weeks |
The cost is calculated individually — we will evaluate the project after the brief. 1C-Bitrix: Data management via Highload-blocks. Contact us for an audit of your business process. Request a consultation — we will send a commercial proposal with an estimate.







