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

Уявіть: клієнт намагається забронювати номер у готелі на певні дати, але система не перевіряє зайнятість. Два бронювання на один номер перетинаються — овербукінг і претензії неминучі. Стандартні механізми `b_sale_order` не працюють із часовими інтервалами. В одному з проєктів овербукінг сягав 10% бр
Послуги, які ми пропонуємо
Показано 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
    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 кешуванні.

Отримайте консультацію для вашого проєкту. Зв'яжіться з нами для безкоштовної оцінки.