Разработка сайта автосервиса на 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С, Битрикс обращается к нему по cron. Формат — JSON или XML. Частота — каждые 15-30 минут для остатков, мгновенно (webhook) для записей.
Личный кабинет с историей обслуживания
Клиент привязывает автомобиль к профилю — вводит VIN или госномер. Система подтягивает из 1С все заказ-наряды по этому VIN. Клиент видит: дата визита, выполненные работы, установленные запчасти, пробег на момент обслуживания.
Это мощный инструмент удержания. Клиент возвращается на сайт не только для записи, но и чтобы посмотреть, когда менялось масло и пора ли на следующее ТО.
Система может автоматически рассчитывать дату следующего ТО на основе среднего пробега клиента и регламента, отправляя напоминание через email или SMS.
Каталог запчастей
Опциональный модуль. Если автосервис продаёт запчасти — используется стандартный модуль каталога Битрикса (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 марок — может занять столько же. Стоит начинать с минимального набора марок, которые чаще всего обслуживаются, и расширять по аналитике поисковых запросов.







