Development of a website for a transport company using 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Transport Company Website Development on 1C-Bitrix

A transport company website is not a brochure with photos of buses. A customer arrives with a specific task: find out if there's a flight from Minsk to Moscow on Friday, how much it costs to rent a bus for 45 people, can I order airport transfer. If the answer can't be gotten in a few clicks — the customer goes to an aggregator.

The central element of such a site is an online booking system with cost calculation based on a tariff grid. Let's examine its architecture.

Service Catalog

Transport company services are diverse, affecting structure. "Services" infoblock with sections:

  • Regular Routes — Minsk to Moscow, Minsk to Vilnius, schedule by days
  • Bus Rental — hourly, daily, event-based
  • Corporate Transfers — employee transportation, contract-based service
  • Excursion Tours — city routes, tours

Each service type requires different parameters for booking. Regular route — select date and number of seats. Bus rental — route, date, number of hours, transport type. Excursion — fixed route with fixed per-person price.

For this, separate infoblocks are created or a unified infoblock with conditional properties, active depending on section.

Online Booking with Tariff Grid

Booking — a multi-step form that collects trip parameters and calculates cost by tariffs. Let's examine architecture using bus rental as an example.

Step 1: Trip Parameters. Customer fills in:

  • From where to where (cities, addresses)
  • Date and time of pickup
  • Number of passengers
  • Trip type: one-way / round-trip / hourly rental
  • Additional: luggage, child seats, Wi-Fi in cabin

Step 2: Choose Vehicle. Based on passenger count, system filters fleet and offers suitable options. Customer sees photo, characteristics, comfort class.

Step 3: Calculate Cost. Here the tariff grid works.

Highload Block TariffGrid:

Field Type Purpose
UF_VEHICLE_TYPE enumeration Minibus / Midsize 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 (for fixed routes)
UF_CITY_TO string Arrival city
UF_FIXED_PRICE float Fixed route price
UF_SEASON enumeration Low / High / Holiday
UF_VALID_FROM date Tariff start date
UF_VALID_TO date Tariff end date

Highload Block TariffSurcharge — surcharges:

Field Type Purpose
UF_TYPE enumeration Night Pickup / Holiday / International / Luggage
UF_SURCHARGE_TYPE enumeration Percent / Fixed Amount
UF_VALUE float Surcharge value
UF_VEHICLE_TYPE enumeration Applies to vehicle type

Calculation Algorithm for Km-based Rental:

  1. Determine distance between points. Options: Google Distance Matrix API, OSRM (open-source), distance reference in separate Highload Block RouteDistance (for popular routes)
  2. Select tariff from TariffGrid by vehicle type, comfort class, and date (season)
  3. Base cost = distance * UF_PRICE_PER_UNIT
  4. Check minimum: if base < UF_MIN_PRICE, take UF_MIN_PRICE
  5. Apply surcharges from TariffSurcharge: night pickup (before 7:00 or after 23:00), international route, holiday
  6. For "round-trip" — double kilometers but with coefficient 0.85-0.9 (return trip discount)
$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
$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 calculation is simpler: hours * hourly rate, with minimum check. For fixed routes — take UF_FIXED_PRICE directly.

Step 4: Complete Order. After calculation, customer confirms booking. An order is created through \Bitrix\Sale\Order::create(). Order properties contain all trip parameters: route, date, vehicle type, calculated cost. Payment — prepayment 30-50% via online acquiring or full payment at boarding.

Fleet

"Fleet" infoblock — card for each vehicle:

  • Type — minibus, midsize bus, large bus
  • Capacity — number of passenger seats
  • Comfort Class — standard, comfort, VIP
  • Features — air conditioning, Wi-Fi, outlets, TV, toilet, luggage compartment
  • Photos — multiple file property, gallery of exterior and interior
  • Year, brand/model

On fleet catalog page — filter by capacity and class. During booking — automatic vehicle selection by passenger count: if customer specifies 20 people, show buses with 20+ seats.

Flight Tracking

For regular routes, real-time tracking is relevant. Implementation:

  • GPS trackers on transport send coordinates to server (WIALON, Galileosky or custom receiver)
  • On Bitrix side — custom page with map (Yandex.Maps API or Leaflet)
  • Coordinates pulled via AJAX every 30-60 seconds from tracker API
  • Customer enters flight number or selects from schedule, sees point on map and estimated arrival time

GPS integration is a separate module. Bitrix acts as frontend, tracker — data source. No need to store coordinate history in Bitrix — it stays in monitoring system.

B2B Portal for Corporate Clients

Corporate clients are the main revenue source. They need not a public site but a closed portal:

  • Contract-Based Authorization — company manager logs in with own account
  • Submit Requests — order form with pre-configured routes (daily employee transfer)
  • Acts and Invoices — export documents from 1C via integration
  • Order History — all trips under contract with filtering by date, route
  • Balance — prepaid account with payment and deduction history

Implemented through Bitrix user groups with access restrictions to site section. Document circulation — via 1C:Accounting integration (HTTP services).

SEO for Route Queries

Transport companies get main search traffic from queries like "bus Minsk Moscow," "airport transfer Minsk." For each popular route, a landing page is created — element of "Routes" infoblock with SEO fields: ELEMENT_META_TITLE, ELEMENT_META_DESCRIPTION, unique route description, schedule, and embedded booking widget.

For landing page generation, template approach can be used: one template of bitrix:news.detail component with substituted route data. SEO texts are unique — templated texts with city substitution are long recognized by search engines.

Implementation Timeline

Scale Scope Timeline
Small Carrier (5-10 Routes) Service catalog, fleet, request form, route pages 6-8 weeks
Medium Company + online booking with tariff grid, payment, schedule 12-16 weeks
Large Carrier + B2B portal, GPS tracking, 1C integration, multilingual 20-26 weeks

Technical Note

Distance calculation is a bottleneck. Google Distance Matrix API is paid and has limits. For popular routes, better to pre-calculate distances and save in Highload Block RouteDistance, calling API only for non-standard queries. This reduces both API cost and calculator response time.