Настройка ценообразования по времени суток 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка ценообразования по времени суток 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка ценообразования по времени суток 1С-Битрикс

В стандартном модуле catalog нет механизма, который меняет цену товара в зависимости от часа. Типы цен, скидки, наценки — всё это статические сущности, не привязанные ко времени суток. Между тем задача реальна: ночные тарифы для доставки, happy hour для ресторанов, пиковые наценки для сервисов с ограниченной мощностью. Реализация требует вмешательства в логику расчёта цены на уровне событий.

Механизм расчёта цены в каталоге

Цена товара проходит через цепочку: базовая цена из b_catalog_price → применение скидок из b_catalog_discount → округление → результат. Метод \Bitrix\Catalog\Product\Price::getPrice() возвращает финальную цену, но скидки каталога применяются на основании групп пользователей и условий (сумма заказа, количество товара), а не времени.

Точка входа — событие OnGetOptimalPrice модуля catalog. Обработчик получает ID товара, количество, группы пользователя и может вернуть массив с переопределённой ценой. Именно здесь внедряется логика по времени.

Реализация через обработчик событий

Создайте обработчик в init.php или через собственный модуль:

  1. Регистрация события: AddEventHandler('catalog', 'OnGetOptimalPrice', ...).
  2. Определение текущего часа: date('G') возвращает час без ведущего нуля (0–23). Учитывайте серверный часовой пояс — date_default_timezone_get() должен совпадать с бизнес-зоной.
  3. Применение коэффициента: ночной коэффициент 0.85 для часов 22:00–06:00 умножается на базовую цену. Коэффициенты хранятся в b_option или в пользовательском свойстве инфоблока — зависит от того, нужны ли разные правила для разных товаров.

Важно: обработчик OnGetOptimalPrice вызывается при каждом показе цены — в каталоге, на детальной странице, в корзине. Не делайте в нём тяжёлых запросов. Коэффициенты кэшируйте в статическую переменную класса или в \Bitrix\Main\Data\Cache с TTL 300 секунд.

Кэширование и подводные камни

Композитный кэш и кэш компонентов по умолчанию не учитывают время суток. Компонент catalog.section закэширует страницу с дневными ценами, и ночной посетитель увидит их до истечения TTL.

Решение — добавить час в ключ кэша через параметр CACHE_GROUPS компонента или через AddAdditionalCacheID() в component_epilog.php. Кэш будет сбрасываться каждый час — это приемлемо для большинства магазинов.

Для композитного кэша используйте динамическую область <bx:dynamic> вокруг блока с ценой. Цена будет подгружаться AJAX-запросом при каждом показе страницы.

Отображение информации о тарифе

Покажите пользователю, что цена зависит от времени. Добавьте в шаблон компонента catalog.element блок с текущим тарифом: «Ночной тариф: скидка 15% до 06:00». Время окончания считайте серверным кодом и передавайте через $arResult. JavaScript-таймер обратного отсчёта до смены тарифа повышает прозрачность для покупателя.