Налаштування обмеження часу продажу товарів (алкоголь) 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С-Бітрікс

Законодавство забороняє продаж алкоголю в нічний час — з 23:00 до 08:00. Регіони можуть встановлювати суворіші обмеження. Інтернет-магазин зобов'язаний блокувати можливість оформлення замовлення з алкогольними товарами в заборонений час.

Точки блокування в Бітрікс

Обмеження потрібно застосовувати одразу в кількох місцях — інакше покупець або обійде його, або побачить незрозумілу помилку на останньому кроці:

  1. Кнопка «Купити» на картці товару — приховати або заблокувати в заборонений час
  2. Додавання до кошика — обробник події OnSaleBasketItemAdd
  3. Оформлення замовлення — перевірка перед збереженням замовлення в OnBeforeSaleOrderSaved

Визначення часового вікна

Ключове питання — за яким часовим поясом рахувати час. Три підходи:

  • За серверним часом — просто, але неправильно: сервер у Москві, покупець у Владивостоку
  • За часовим поясом покупця — через геолокацію IP (база MaxMind GeoIP або аналог)
  • За часом доставки — для кур'єрської доставки актуальний час у місті одержувача

Найправильніший підхід для інтернет-магазину з доставкою — визначати часовий пояс за IP покупця. У Бітрікс для цього використовується модуль sale.location або стороння база геолокації.

Проста перевірка за московським часом (UTC+3):

function isAlcoholSaleAllowed(): bool {
    $hour = (int)date('H', time() + 3 * 3600); // московський час
    return ($hour >= 8 && $hour < 23);
}

Позначення алкогольних товарів

В інфоблоці каталогу створюється властивість UF_IS_ALCOHOL (тип «Так/Ні»). Або використовується прив'язка до розділу: якщо розділ «Алкоголь» має прапор UF_TIME_RESTRICTED, усі товари в ньому підпадають під обмеження.

Перевірка приналежності товару до обмеженої категорії:

function isTimeRestrictedProduct(int $productId): bool {
    $element = CIBlockElement::GetByID($productId)->Fetch();
    if ($element['PROPERTY_UF_IS_ALCOHOL_VALUE'] === 'Y') return true;

    // Перевіряємо розділ
    $section = CIBlockSection::GetByID($element['IBLOCK_SECTION_ID'])->Fetch();
    return $section['UF_TIME_RESTRICTED'] === '1';
}

Обробник додавання до кошика

AddEventHandler('sale', 'OnSaleBasketItemAdd', function(&$arFields) {
    if (!isTimeRestrictedProduct($arFields['PRODUCT_ID'])) return;
    if (!isAlcoholSaleAllowed()) {
        $arFields['ERROR_MESSAGE'] =
            'Продаж алкоголю дозволено з 08:00 до 23:00 за московським часом';
        return false;
    }
});

Візуальне блокування на фронтенді

На картці товару та в каталозі кнопка «Купити» замінюється повідомленням про часові обмеження. JavaScript перевіряє час клієнта — але це доповнення до серверної перевірки, а не її заміна:

const hour = new Date().getHours();
if (isAlcoholProduct && (hour < 8 || hour >= 23)) {
    document.querySelector('.buy-btn').disabled = true;
    document.querySelector('.buy-btn').textContent = 'Продаж з 08:00 до 23:00';
}

Регіональні обмеження

Якщо магазин працює з регіонами, де обмеження суворіші, часовий пояс і часове вікно визначаються динамічно за геолокацією IP. База даних регіонів з їхніми обмеженнями зберігається в окремій таблиці.

Що входить у налаштування

  • Створення властивості UF_IS_ALCOHOL або UF_TIME_RESTRICTED в інфоблоці
  • Серверна перевірка часу з урахуванням часового поясу покупця
  • Обробник OnSaleBasketItemAdd з блокуванням алкогольних товарів
  • Перевірка перед збереженням замовлення в OnBeforeSaleOrderSaved
  • Візуальне блокування кнопки «Купити» в заборонений час
  • За потреби — підтримка регіональних обмежень