Налаштування ціноутворення за часом доби 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування ціноутворення за часом доби 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування ціноутворення за часом доби 1С-Bitrix

Стандартний модуль 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-таймер зворотного відліку до зміни тарифу підвищує прозорість для покупця.