Розробка сайту автосервісу на 1С-Бітрікс
Власник автомобіля шукає автосервіс, коли у нього вже є проблема. Він вводить «заміна масла Мінськ» або «кузовний ремонт недорого», потрапляє на сайт і хоче сразу зрозуміти дві речі: скільки це коштуватиме для його машини і коли він зможе її привезти. Якщо сайт не дає відповіді — клієнт дзвонить конкуренту.
Ключовий інструмент, який вирішує першу задачу, — калькулятор вартості ТО. Розберемо його реалізацію докладно.
Каталог послуг автосервісу
Послуги організовуються в інфоблоці з ієрархією розділів. Типова структура:
- Технічне обслуговування — ТО-1, ТО-2, заміна масла, фільтрів
- Кузовний ремонт — фарбування, рихтування, антикор
- Діагностика — комп'ютерна, ходової частини, двигуна
- Шиномонтаж — сезонна заміна, зберігання, балансування
- Електрика — сигналізація, автозвук, додаткове обладнання
Властивості елемента: PRICE_FROM (number), DURATION_HOURS (number), CAR_TYPES (список — легкові, кроссовери, комерційні), DESCRIPTION_WORK (HTML — що входить у послугу). Прив'язка до марок через множинну властивість типу «Прив'язка до елементів» — не всі послуги доступні для всіх марок.
Калькулятор вартості ТО за маркою автомобіля
Калькулятор — головний конверсійний елемент сайту автосервісу. Клієнт вибирає марку, модель, рік випуску та пробіг — отримує вартість регламентного ТО з розшифруванням за роботами та запчастинами.
Архітектура даних. Довідники зберігаються в Highload-блоках — тут це не опціональна оптимізація, а необхідність. Довідник «марка — модель — покоління — двигун» для 50 популярних марок містить десятки тисяч комбінацій. У звичайному інфоблоці це буде катастрофа.
Highload-блок CarDirectory:
| Поле | Тип | Приклад |
|---|---|---|
| UF_BRAND | string | Toyota |
| UF_MODEL | string | Camry |
| UF_GENERATION | string | XV70 (2017-) |
| UF_ENGINE | string | 2.5L 2AR-FE |
| UF_YEAR_FROM | integer | 2017 |
| UF_YEAR_TO | integer | 2024 |
Highload-блок MaintenanceRegulation — регламент ТО:
| Поле | Тип | Призначення |
|---|---|---|
| UF_CAR_DIR_ID | integer | Зв'язок з CarDirectory |
| UF_MILEAGE_KM | integer | Пробіг для ТО (10000, 20000...) |
| UF_WORK_ID | integer | Зв'язок з інфоблоком робіт |
| UF_PART_ID | integer | Зв'язок з каталогом запчастин (якщо є) |
| UF_PART_QUANTITY | float | Кількість (4 літри масла, 1 фільтр) |
| UF_IS_REQUIRED | boolean | Обов'язково або рекомендовано |
Highload-блок ServicePricing — ціни на роботи за категоріями авто:
| Поле | Тип | Призначення |
|---|---|---|
| UF_WORK_ID | integer | ID роботи |
| UF_CAR_CLASS | enumeration | Легковий / Кросовер / Позашляховик |
| UF_PRICE_WORK | float | Вартість роботи |
| UF_NORM_HOURS | float | Нормочаси |
Алгоритм розрахунку:
- Клієнт вибирає марку → модель → покоління → двигун (каскадні AJAX-селекти, кожний наступний фільтрує за попереднім)
- Вводить поточний пробіг — система визначає найближче регламентне ТО (округлення вверх до кратного 10 000 або 15 000 залежно від виробника)
- Запит до
MaintenanceRegulationзаUF_CAR_DIR_IDтаUF_MILEAGE_KM - Для кожної роботи — підтягується ціна з
ServicePricingза класом авто - Для кожної запчастини — ціна з каталогу (якщо підключений склад) або з довідника середніх цін
- Результат оформлюється як таблиця: «робота — вартість роботи — запчастина — вартість запчастини — разом»
$regulations = MaintenanceRegulationTable::getList([
'filter' => [
'UF_CAR_DIR_ID' => $carId,
'UF_MILEAGE_KM' => $nearestMileage,
],
])->fetchAll();
$total = 0;
$breakdown = [];
foreach ($regulations as $reg) {
$workPrice = ServicePricingTable::getRow([
'filter' => [
'UF_WORK_ID' => $reg['UF_WORK_ID'],
'UF_CAR_CLASS' => $carClass,
],
]);
$partPrice = $reg['UF_PART_ID']
? getPartPrice($reg['UF_PART_ID']) * $reg['UF_PART_QUANTITY']
: 0;
$lineTotal = $workPrice['UF_PRICE_WORK'] + $partPrice;
$total += $lineTotal;
$breakdown[] = [
'work' => getWorkName($reg['UF_WORK_ID']),
'work_price' => $workPrice['UF_PRICE_WORK'],
'part' => getPartName($reg['UF_PART_ID']),
'part_price' => $partPrice,
'required' => $reg['UF_IS_REQUIRED'],
];
}
Каскадні селекти. Реалізуються через AJAX-компонент або REST-ендпоінт. При виборі марки — запит моделей з фільтром UF_BRAND = 'Toyota'. При виборі моделі — запит поколінь. Кожен запит — DataManager::getList() з DISTINCT за потрібним полем.
Щоб каскад працював швидко, на Highload-блок CarDirectory створюються складені індекси: (UF_BRAND), (UF_BRAND, UF_MODEL), (UF_BRAND, UF_MODEL, UF_GENERATION).
Наповнення довідника. Основна біль. Регламенти ТО для 50 марок — це колосальний обсяг даних. Варіанти: ручне заповнення (довго, але точно), парсинг з відкритих джерел (каталоги виробників), покупка готової бази (TecDoc-сумісні довідники). У більшості проектів починають з 10-15 найпопулярніших марок і розширюють за необхідністю.
Онлайн-запис на сервіс
Запис простіше, ніж у салоні краси: немає прив'язки до конкретного механіка, є прив'язка до підйомника/боксу. Клієнт вибирає послугу, дату і зручний час. Система перевіряє завантаженість боксів.
Highload-блок ServiceBooking: UF_DATE, UF_TIME_START, UF_TIME_END, UF_BAY_ID (номер боксу/підйомника), UF_CLIENT_ID, UF_SERVICE_ID, UF_CAR_INFO (марка, модель, номер — текстове поле або зв'язок з CarDirectory).
Логіка слотів аналогічна: отримуємо робочий час боксу, вичитаємо займані інтервали, показуємо вільні. Тривалість визначається властивістю DURATION_HOURS послуги.
Інтеграція з 1С:Автосервіс
1С:Автосервіс зберігає замовлення-наряди, історію ремонтів, складські залишки запчастин. Інтеграція з сайтом вирішує кілька завдань:
- Імпорт замовлень-нарядів у особистий кабінет — клієнт бачить історію обслуговування, прив'язану до VIN або номера
- Синхронізація залишків запчастин — якщо на сайті є каталог запчастин, залишки оновлюються з 1С через CommerceML або REST
- Передача онлайн-записів в 1С — запис з сайту автоматично створює попередній замовлення-наряд
Обмін через HTTP-сервіси 1С — публікується REST-ендпоінт на стороні 1С, Bitrix звертається до нього по cron. Формат — JSON або XML. Частота — кожні 15-30 хвилин для залишків, миттєво (webhook) для записів.
Особистий кабінет з історією обслуговування
Клієнт прив'язує автомобіль до профілю — вводить VIN або номер. Система підтягує з 1С всі замовлення-наряди за цим VIN. Клієнт бачить: дату візиту, виконані роботи, встановлені запчастини, пробіг на момент обслуговування.
Це потужний інструмент утримання. Клієнт повертається на сайт не тільки для запису, але й щоб дивитися, коли менялось масло і пора ли на наступне ТО.
Система може автоматично розраховувати дату наступного ТО на основі середнього пробігу клієнта і регламенту, відправляючи нагадування через email або SMS.
Каталог запчастин
Опціональний модуль. Якщо автосервіс продає запчастини — використовується стандартний модуль каталогу Bitrix (catalog). Товари синхронізуються з 1С через CommerceML. Важливо налаштувати торгові пропозиції для запчастин з прив'язкою до OEM-номерів і крос-номерів аналогів.
Акції та сезонні пропозиції
Інфоблок «Акції» з автоматичною публікацією/зняттям за датами (DATE_ACTIVE_FROM, DATE_ACTIVE_TO). Сезонні акції прив'язуються до типів послуг: шиномонтаж восени, кондиціонер влітку, антикор навесні. На головній сторінці виводяться через bitrix:news.list з фільтром по активності.
Терміни реалізації
| Масштаб | Склад | Термін |
|---|---|---|
| Однопункційний автосервіс | Каталог послуг, запис, акції, базовий ЛК | 6-8 тижнів |
| Автосервіс з калькулятором ТО | + калькулятор (10-15 марок), інтеграція з 1С, історія обслуговування | 12-16 тижнів |
| Мережа автосервісів | + мультисайт, каталог запчастин з залишками, повний довідник ТО, B2B-портал | 18-24 тижні |
Що визначає бюджет
Калькулятор ТО — найтрудомісткіша частина, і основні витрати приходяться не на код, а на наповнення довідника регламентів. Розробка логіки розрахунку займає 2-3 тижні, а наповнення бази для 50 марок — може займати стільки ж. Варто починати з мінімального набору марок, які найчастіше обслуговуються, і розширювати за аналітикою пошукових запитів.







