Настройка ограничения времени продажи товаров (алкоголь) 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка ограничения времени продажи товаров (алкоголь) 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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С-Битрикс

Российское законодательство запрещает продажу алкоголя в ночное время — с 23:00 до 08:00 (федеральный закон №171-ФЗ). Регионы могут устанавливать более строгие ограничения: например, в Чечне и Ингушетии продажа алкоголя ограничена сильнее. Интернет-магазин обязан блокировать возможность оформления заказа с алкогольными товарами в запрещённое время.

Точки блокировки в Битрикс

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

  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
  • Визуальная блокировка кнопки «Купить» в запрещённое время
  • При необходимости — поддержка региональных ограничений