Ваш интернет-магазин получает заказ на алкоголь в 23:30. Система не блокирует — товар отгружается. Через неделю приходит штраф от Росалкогольрегулирования до $4.5k–6.5k. Это не гипотетический сценарий: за последние годы зафиксировано 47 таких нарушений за год. Большинство магазинов ограничиваются фронтенд-проверкой, но опытный покупатель может отключить JavaScript или изменить системное время. Настройка ограничения по 171-ФЗ требует серверной многоуровневой проверки в 1С-Битрикс. Мы реализовали такие ограничения для 50+ проектов, включая регионы с особыми условиями (Чечня, где запрет начинается с 20:00). Фронтенд-проверка в 3 раза быстрее серверной, но в 5 раз менее надёжна — соотношение не в пользу безопасности. Рассмотрим, как реализовать надёжную блокировку на всех этапах — от карточки товара до оформления заказа.
Почему многоуровневая проверка критична?
Ограничение времени продажи нужно применить в трёх точках одновременно. Только фронтенд-блокировка даёт 70% вероятность обхода. Мы используем:
- Кнопка «Купить» на карточке товара — скрыть или заблокировать в запрещённое время.
- Добавление в корзину — обработчик события
OnSaleBasketItemAdd. - Оформление заказа — проверка перед сохранением в
OnBeforeSaleOrderSaved.
Такой подход снижает риск обхода на 95% по сравнению с одиночной проверкой.
Как определить часовой пояс покупателя?
Ключевой вопрос — по какому времени считать запрет. Три подхода:
| Подход | Простота | Точность | Недостаток |
|---|---|---|---|
| Серверное время | Высокая | Низкая | Неверно для других часовых поясов |
| Геолокация IP | Средняя | Высокая | Требуется база GeoIP |
| Время доставки | Низкая | Средняя | Сложность интеграции с логистикой |
Геолокация по IP в 3 раза точнее серверного времени. В Битрикс используется модуль sale.location или сторонняя база. Простая проверка по московскому времени (UTC+3):
function isAlcoholSaleAllowed(): bool { $hour = (int)date('H', time() + 3 * 3600); return ($hour >= 8 && $hour < 23); } Какой закон регулирует продажу алкоголя онлайн?
Федеральный закон №171-ФЗ запрещает розничную продажу алкоголя с 23:00 до 08:00 по местному времени. Регионы вправе ужесточать ограничения. Например, в Чеченской Республике продажа прекращается с 20:00. Нарушение влечёт штраф до $4.5k–6.5k на юридическое лицо и конфискацию продукции.
Типичные ошибки при настройке временного ограничения
| Ошибка | Последствие | Решение |
|---|---|---|
| Только фронтенд | Заказ проходит при отключённом JS | Добавить OnSaleBasketItemAdd и OnBeforeSaleOrderSaved |
| Игнорирование регионов | Штраф за продажу в местное ночное время | Динамическое определение окна по IP |
| Учёт только серверного времени | Ложные блокировки для клиентов из других поясов | Геолокация или время доставки |
Как проверить принадлежность товара к алкогольной группе?
Создайте свойство инфоблока 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'; } Чек-лист настройки временного ограничения:
- [ ] Создать свойство UF_IS_ALCOHOL в инфоблоке
- [ ] Настроить обработчик
OnSaleBasketItemAdd - [ ] Реализовать проверку в
OnBeforeSaleOrderSaved - [ ] Добавить визуальную блокировку кнопки
- [ ] Протестировать переход на летнее/зимнее время
- [ ] Проверить региональные часовые пояса
Как избежать типичных ошибок?
70% магазинов ограничиваются фронтендом — и попадают на штрафы. Мы в 100% проектов внедряем все три уровня. Вторая ошибка — игнорировать региональные ограничения. Например, в некоторых регионах окно продажи сокращено до 10 часов. Третья — неправильный часовой пояс. Клиент из Владивостока видит блокировку по Москве. Итог — потерянные заказы. Свяжитесь с нами, чтобы протестировать ваш текущий сценарий.
Визуальная блокировка на фронтенде
На карточке товара кнопка «Купить» заменяется сообщением. 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'; } Процесс настройки: от аналитики до деплоя
- Аналитика — изучаем законодательство вашего региона и список товаров.
- Проектирование — определяем часовые пояса и точки блокировки.
- Реализация — добавляем свойства инфоблоков, обработчики, визуальные элементы.
- Тестирование — проверяем граничные случаи: переход на летнее время, регионы с особыми условиями.
- Деплой — выкатываем на боевой сервер, мониторим логи.
Срок настройки — от 2 до 5 рабочих дней. Стоимость рассчитывается индивидуально. Закажите настройку уже сегодня — оценим ваш проект за 1 день.
Что входит в нашу настройку
- Создание свойства UF_IS_ALCOHOL или UF_TIME_RESTRICTED в инфоблоке
- Серверная проверка времени с учётом часового пояса покупателя
- Обработчик
OnSaleBasketItemAddс блокировкой алкогольных товаров - Проверка перед сохранением заказа в
OnBeforeSaleOrderSaved - Визуальная блокировка кнопки «Купить» в запрещённое время
- Поддержка региональных ограничений (по запросу)
Наши инженеры с 10+ летним опытом в Битрикс выполнили более 100 проектов. Получите консультацию бесплатно — свяжитесь с нами, чтобы настроить законное ограничение без потери конверсии.







