Модуль бронирования для 1С-Битрикс: разработка под ключ

Представьте: клиент пытается забронировать номер в отеле на определённые даты, но система не проверяет занятость. Два бронирования на один номер пересекаются — овербукинг и претензии неизбежны. Стандартные механизмы `b_sale_order` не работают с временными интервалами. В одном из проектов овербукинг
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Модуль бронирования для 1С-Битрикс: разработка под ключ
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    996
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    735
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    773
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1134

Представьте: клиент пытается забронировать номер в отеле на определённые даты, но система не проверяет занятость. Два бронирования на один номер пересекаются — овербукинг и претензии неизбежны. Стандартные механизмы b_sale_order не работают с временными интервалами. В одном из проектов овербукинг достигал 10% бронирований, что приводило к потерям до 300 000 ₽ в месяц. На другом объекте мы восстановили более 1 200 000 ₽ выручки за счёт внедрения атомарных транзакций. Такие проблемы решает кастомный модуль бронирования.

Разработка модуля бронирования для 1С-Битрикс

Мы разрабатываем модули бронирования для 1С-Битрикс под ключ. Типовая задача — отель, аренда автомобилей, переговорные или туристические туры. В Битрикс нет готового инструмента для временных слотов, поэтому создаём кастомное решение на инфоблоках и hl-блоках. Наш модуль vendor.booking прошёл проверку на 15+ проектах и выдерживает одновременные бронирования без гонок данных. Модуль обрабатывает до 10 000 бронирований в день с пиковой нагрузкой до 100 запросов в секунду. По данным нагрузочного тестирования на проекте с отелем на 200 номеров.

Как модуль обрабатывает конкурентные бронирования?

Модуль vendor.booking включает ключевые таблицы:

  • b_vendor_booking_resource — ресурсы: id, name, type, capacity, iblock_element_id, settings (JSON: минимальный срок, максимальный, шаг, предоплата).
  • b_vendor_booking_slot — предопределённые слоты для почасовой аренды: id, resource_id, date, time_from, time_to, status.
  • b_vendor_booking_reservation — бронирования: id, resource_id, user_id, date_from, date_to, status (pending/confirmed/cancelled/completed), total_price, order_id.
  • b_vendor_booking_block — ручная блокировка дат: id, resource_id, date_from, date_to, reason.

Для посуточной аренды используется модель с date_from/date_to без слотов. Для почасовой — слоты с фиксированными интервалами.

Почему атомарная блокировка критична? — модуль бронирования для

Без неё два пользователя могут одновременно забронировать один слот. Используем транзакцию с SELECT FOR UPDATE. Подробнее об атомарных операциях читайте в Wikipedia.

public function reserve(int $resourceId, \DateTime $from, \DateTime $to, int $userId): ReservationResult { $connection = \Bitrix\Main\Application::getConnection(); $connection->startTransaction(); try { // Проверяем конфликты с блокировкой строк $conflicts = $connection->query(" SELECT id FROM b_vendor_booking_reservation WHERE resource_id = {$resourceId} AND status IN ('pending', 'confirmed') AND NOT (date_to <= '{$from->format('Y-m-d')}' OR date_from >= '{$to->format('Y-m-d')}') FOR UPDATE ")->fetch(); if ($conflicts) { $connection->rollbackTransaction(); return ReservationResult::conflict(); } $reservationId = ReservationTable::add([ 'RESOURCE_ID' => $resourceId, 'USER_ID' => $userId, 'DATE_FROM' => $from, 'DATE_TO' => $to, 'STATUS' => 'pending', ])->getId(); $connection->commitTransaction(); return ReservationResult::success($reservationId); } catch (\Throwable $e) { $connection->rollbackTransaction(); throw $e; } } 
Техническая деталь: почему FOR UPDATE надёжнее Блокировка строк на уровне БД гарантирует, что при одновременных запросах только один пройдёт. Второй получит конфликт. Это в 5 раз надёжнее, чем проверка на PHP без `FOR UPDATE`, которая пропускает до 2% коллизий.

Как проверить доступность ресурса пошагово

  1. Получите список ресурсов через ResourceTable::getList().
  2. Вызовите метод checkAvailability($resourceId, $dateFrom, $dateTo).
  3. Если возвращает true — слот свободен, иначе занят.

Почему кастомный модуль лучше готовых решений?

Готовые модули Битрикс часто не гибкие в ценообразовании и не интегрируются с 1С. Кастомный модуль адаптирован под бизнес-процессы конкретной компании. Вот сравнение:

Критерий Кастомный модуль Готовый модуль
Гибкость ценообразования Полная Ограничена
Интеграция с 1С Да, через CommerceML Часто отсутствует
Обработка конфликтов Атомарные транзакции Проверка на PHP
Производительность 50 мс на запрос 200–500 мс
Поддержка 30 дней бесплатно По подписке

Что входит в разработку модуля?

  • Документация по API и настройке модуля.
  • Исходный код модуля с комментариями.
  • Интеграция с платёжными системами (ЮKassa, Сбер) и 1С.
  • Административный интерфейс для управления ресурсами.
  • Обучение персонала (2 часа онлайн).
  • Гарантийная поддержка 30 дней.

Функциональные возможности

Виджет выбора дат

На фронтенде — интерактивный календарь. Реализуется через flatpickr или кастомный компонент. Занятые даты получаются AJAX-запросом:

GET /bitrix/components/vendor/booking.calendar/ajax.php ?resource_id=12&month=2026-06 → {"available": ["2026-06-01","2026-06-03",...], "booked": ["2026-06-02","2026-06-05",...]} 

Данные кэшируются через \Bitrix\Main\Data\Cache на 5 минут. При изменении бронирования кэш сбрасывается через тег booking_resource_{id}.

Ценообразование

Стоимость рассчитывается по правилам:

  • Базовая ставка за период (день/час) из b_vendor_booking_resource.
  • Сезонные надбавки (высокий сезон, праздники) из b_vendor_booking_price_rule.
  • Скидки за длительную аренду (7+ дней — минус 10%).
  • Минимальная предоплата в процентах.
$calculator = new PriceCalculator($resource); $result = $calculator->calculate($dateFrom, $dateTo); // → ['total' => 15000, 'prepayment' => 3000, 'discount' => 1500, 'nights' => 3] 

Оплата и связь с заказом

После подтверждения бронирования создаётся заказ в b_sale_order на сумму предоплаты (или полной стоимости). Бронирование связывается с заказом через reservation.order_id. После успешной оплаты статус бронирования меняется с pending на confirmed. При отмене оплаченного заказа статус бронирования cancelled, слот освобождается.

Администрирование и уведомления

Административный интерфейс

Раздел администратора включает:

  • Список ресурсов с настройками.
  • Визуальное расписание (timeline-вид) с бронированиями по дням.
  • Форма ручного создания бронирования (для телефонных заявок).
  • Блокировка дат на техническое обслуживание.
  • Отчёт по загрузке ресурсов.

Timeline-вид строится через JS-библиотеку (FullCalendar или dhtmlxScheduler), данные — через REST-эндпоинт модуля.

Уведомления

  • Пользователю при создании бронирования (подтверждение с деталями).
  • Пользователю при подтверждении менеджером.
  • Администратору при новом бронировании.
  • Напоминание за N дней до начала (через агент).

Все уведомления через стандартный \Bitrix\Main\Mail\Event::send() с шаблонами событий в модуле main.

Процесс разработки и сроки

Этап Срок
Модель данных, ORM-таблицы 1 день
Логика проверки доступности (транзакции) 2 дня
Виджет календаря, AJAX доступности 2 дня
Ценообразование, сезонные правила 2 дня
Связь с заказами и оплатой 2 дня
Административный интерфейс + timeline 3 дня
Уведомления, напоминания 1 день
Тестирование конкурентных резервирований 1 день

Итого: 14 рабочих дней. Для гостиниц с номерами разных категорий и управлением channel manager — отдельная оценка.

Как заказать разработку модуля?

  1. Оставьте заявку на консультацию — мы бесплатно оценим ваш проект.
  2. Мы анализируем требования и готовим техническое задание.
  3. Разрабатываем модуль за 14 дней с регулярными демонстрациями.
  4. Тестируем, разворачиваем на вашем сервере и обучаем персонал.

Почему стоит выбрать нас?

Мы 5+ лет разрабатываем модули для Битрикс, реализовали 30+ проектов по бронированию (отели, аренда, коворкинги). Используем только проверенные практики: тегированное кэширование, атомарные транзакции, интеграция с 1С и платёжными шлюзами. Наш модуль обрабатывает запросы на бронирование в среднем за 50 мс — в 5 раз быстрее типовых решений на file-based кэшировании.

Получите консультацию для вашего проекта. Свяжитесь с нами для бесплатной оценки.