Розробка сайту транспортної компанії на 1С-Бітрікс
Сайт транспортної компанії — це не буклет з фотографіями автобусів. Клієнт приходить з конкретною задачею: дізнатися, чи є рейс Мінськ — Москва на п'ятницю, скільки коштує оренда автобуса на 45 осіб, можна ли замовити трансфер з аеропорту. Якщо відповідь не можна отримати за пару кліків — клієнт йде до агрегатора.
Центральний елемент такого сайту — система онлайн-бронювання з розрахунком вартості по тарифній сітці. Розберемо її архітектуру.
Каталог послуг
Послуги транспортної компанії різнорідні, і це впливає на структуру. Інфоблок «Послуги» з розділами:
- Регулярні рейси — Мінськ — Москва, Мінськ — Вільнюс, розклад за днями
- Оренда автобусів — погодинна, посадобова, під захід
- Корпоративні трансферти — доставка співробітників, обслуговування за договором
- Екскурсійні перевезення — маршрути містами, тури
Кожний тип послуги вимагає різного набору параметрів для бронювання. Регулярний рейс — це вибір дати та кількості місць. Оренда автобуса — це маршрут, дата, кількість годин, тип транспорту. Екскурсія — це готовий маршрут з фіксованою ціною за людину.
Для цього створюються окремі інфоблоки або використовується єдиний інфоблок з умовними властивостями, активними залежно від розділу.
Онлайн-бронювання з тарифною сіткою
Бронювання — багатокрокова форма, яка збирає параметри подорожі й розраховує вартість по тарифам. Розберемо архітектуру на прикладі оренди автобуса.
Крок 1: параметри подорожі. Клієнт заповнює:
- Звідки — куди (міста, адреси)
- Дата й час подачі
- Кількість пасажирів
- Тип подорожі: в одну сторону / туди-обратно / погодинна оренда
- Додатково: багаж, дитячі крісла, Wi-Fi в салоні
Крок 2: вибір транспорту. На основі кількості пасажирів система фільтрує автопарк та пропонує підходящі варіанти. Клієнт бачить фото, характеристики, клас комфорту.
Крок 3: розрахунок вартості. Тут працює тарифна сітка.
Highload-блок TariffGrid:
| Поле | Тип | Призначення |
|---|---|---|
| UF_VEHICLE_TYPE | enumeration | Мікроавтобус / Автобус середній / Автобус великий |
| UF_COMFORT_CLASS | enumeration | Стандарт / Комфорт / VIP |
| UF_TARIFF_TYPE | enumeration | За км / За годину / Фіксований маршрут |
| UF_PRICE_PER_UNIT | float | Ціна за одиницю (км або годину) |
| UF_MIN_HOURS | integer | Мінімальний заказ у годинах |
| UF_MIN_PRICE | float | Мінімальна вартість заказу |
| UF_CITY_FROM | string | Місто відправлення (для фіксованих маршрутів) |
| UF_CITY_TO | string | Місто прибуття |
| UF_FIXED_PRICE | float | Фіксована ціна маршруту |
| UF_SEASON | enumeration | Низький / Високий / Святковий |
| UF_VALID_FROM | date | Дата початку дії тарифу |
| UF_VALID_TO | date | Дата закінчення дії тарифу |
Highload-блок TariffSurcharge — наценки:
| Поле | Тип | Призначення |
|---|---|---|
| UF_TYPE | enumeration | Нічна подача / Свято / Міжнародна / Багаж |
| UF_SURCHARGE_TYPE | enumeration | Відсоток / Фіксована сума |
| UF_VALUE | float | Значення наценки |
| UF_VEHICLE_TYPE | enumeration | До якого типу транспорту застосовується |
Алгоритм розрахунку для оренди по кілометражу:
- Визначити відстань між точками. Варіанти: Google Distance Matrix API, OSRM (open-source), довідник відстаней в окремому Highload-блоці
RouteDistance(для популярних напрямків) - Вибрати тариф з
TariffGridза типом транспорту, класом комфорту й датою (сезон) - Базова вартість = відстань *
UF_PRICE_PER_UNIT - Перевірити мінімум: якщо базова <
UF_MIN_PRICE, взятиUF_MIN_PRICE - Застосувати наценки з
TariffSurcharge: нічна подача (до 7:00 або після 23:00), міжнародний маршрут, святковий день - Для «туди-обратно» — подвоїти кілометраж, але з коефіцієнтом 0.85-0.9 (скидка на зворотний шлях)
$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);
}
}
Для погодинної оренди розрахунок простіше: кількість годин * тариф за годину, з перевіркою мінімуму. Для фіксованих маршрутів — беремо UF_FIXED_PRICE напряму.
Крок 4: оформлення замовлення. Після розрахунку клієнт підтверджує бронювання. Створюється замовлення через \Bitrix\Sale\Order::create(). Властивості замовлення містять всі параметри подорожі: маршрут, дату, тип транспорту, розрахункову вартість. Оплата — передоплата 30-50% через онлайн-еквайринг або повна оплата при посадці.
Автопарк
Інфоблок «Автопарк» — карточка кожного транспортного засобу:
- Тип — мікроавтобус, автобус середній, автобус великий
- Вмістимість — кількість пасажирських місць
- Клас комфорту — стандарт, комфорт, VIP
- Характеристики — кондиціонер, Wi-Fi, розетки, TV, туалет, багажне відділення
- Фото — множинне файлове властивість, галерея екстер'єру та інтер'єру
- Рік випуску, марка/модель
На сторінці каталогу автопарку — фільтрація за вмістимістю та класом. При бронюванні — автоматичний підбір транспорту за кількістю пасажирів: якщо клієнт вказав 20 осіб, показуємо автобуси від 20 місць і вище.
Відстеження рейсів
Для регулярних рейсів актуальна функція відстеження в реальному часі. Реалізація:
- GPS-трекери на транспорті відправляють координати на сервер (WIALON, Galileosky або власний приймач)
- На стороні Bitrix — кастомна сторінка з картою (Яндекс.Карти API або Leaflet)
- Координати підтягуються через AJAX кожні 30-60 секунд з API трекера
- Клієнт вводить номер рейсу або вибирає з розкладу, бачить точку на карті й розрахункове час прибуття
Інтеграція з GPS — окремий модуль. Bitrix виступає фронтендом, трекер — джерелом даних. Зберігати історію координат у Bitrix не потрібно — вона залишається в системі моніторингу.
B2B-портал для корпоративних клієнтів
Корпоративні клієнти — основний дохід транспортної компанії. Їм потрібен не публічний сайт, а закритий портал:
- Авторизація по договору — менеджер компанії-клієнта входить під своєю учіткою
- Подача заявок — форма замовлення з преднастроєними маршрутами (щодобовий трансфер співробітників)
- Акти та рахунки — вивантаження документів з 1С через інтеграцію
- Історія замовлень — усі подорожі по договору з фільтрацією за датою, маршрутом
- Баланс — передоплатний рахунок з історією поповнень та списань
Реалізується через групи користувачів Bitrix з обмеженням доступу до розділу сайту. Документообіг — через інтеграцію з 1С:Бухгалтерія (HTTP-сервіси).
SEO для маршрутних запитів
Транспортні компанії отримують основний пошуковий трафік по запитам виду «автобус Мінськ Москва», «трансфер аеропорт Мінськ». Під кожний популярний маршрут створюється посадкова сторінка — елемент інфоблока «Маршрути» з SEO-полями: ELEMENT_META_TITLE, ELEMENT_META_DESCRIPTION, унікальним описом маршруту, розкладом рейсів та вбудованим віджетом бронювання.
Для генерації посадкових сторінок можна використовувати шаблонний підхід: один шаблон компонента bitrix:news.detail, в який підставляються дані маршруту. SEO-тексти пишуться унікальні — шаблонні тексти з підстановкою міст пошукувачі давно розпізнають.
Терміни реалізації
| Масштаб | Склад | Термін |
|---|---|---|
| Невеликий перевозник (5-10 маршрутів) | Каталог послуг, автопарк, форма заявки, маршрутні сторінки | 6-8 тижнів |
| Середня компанія | + онлайн-бронювання з тарифною сіткою, оплата, розклад рейсів | 12-16 тижнів |
| Великий перевозник | + B2B-портал, GPS-відстеження, інтеграція з 1С, мультимовність | 20-26 тижнів |
Технічне зауваження
Розрахунок відстаней — вузьке місце. Google Distance Matrix API платний і має ліміти. Для популярних маршрутів краще передрассчітати відстані й зберегти в Highload-блок RouteDistance, звертаючись до API тільки для нестандартних запитів. Це знижує й вартість API, й час відповіді калькулятора.







