Как ограничить продажу алкогольной продукции по времени в РМК 1С:Управление торговлей 11.4?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При переходе на «1С:Управление торговлей 11.4» (УТ) многие пользователи и администраторы сталкиваются с тем, что привычный функционал «1С:Розницы» здесь отсутствует. Одной из таких критических функций является запрет розничной продажи алкоголя в определенные часы. В «Рознице» это настраивается через механизм скидок с типом «Запрет розничной продажи», но в УТ 11 разработчики этот механизм не предусмотрели, предполагая, что для полноценного фронт-офиса будет использоваться специализированное решение.

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

Почему в УТ 11 нет штатной настройки запрета?

Проанализируем архитектуру конфигурации. УТ 11 позиционируется как система для оптовой торговли и дистрибуции. Рабочее место кассира (РМК) в ней — это упрощенный инструмент для оформления простых розничных операций. Поскольку законодательные ограничения по времени продажи алкоголя специфичны именно для розничных точек, фирма «1С» сосредоточила этот функционал в решениях «1С:Розница» и «1С:ERP». В УТ 11 механизм скидок не содержит предопределенного действия «Запрет продажи», поэтому нам придется использовать обходные пути.

Способ 1. Реализация через расширение конфигурации (Рекомендуемый)

Наиболее корректный метод с точки зрения обновляемости системы — использование расширения (.cfe). Мы можем вмешаться в логику работы РМК, не снимая основную конфигурацию с поддержки. Рассмотрим по шагам, как это реализовать.

1. Определение перехватываемых событий. Нам необходимо добавить проверку в два ключевых момента: при сканировании (добавлении) товара в чек и непосредственно перед пробитием чека на фискальном регистраторе. Это важно, так как кассир может добавить товар в 22:55, а попытаться пробить его в 23:05, когда продажа уже запрещена.

2. Использование сегментов номенклатуры. Чтобы не «зашивать» список алкогольной продукции в программный код, создадим в УТ сегмент номенклатуры «Алкоголь». В коде будем проверять принадлежность товара к этому сегменту.

3. Программная логика. В расширении необходимо перехватить процедуру добавления товара. Проанализируем примерный алгоритм проверки:


&НаСервере
Функция ПроверитьЗапретПродажиАлкоголя(НоменклатураСсылка)
    
    ТекущийЧас = Час(ТекущаяДата());
    // Например, запрет с 23:00 до 08:00
    Если (ТекущийЧас >= 23 ИЛИ ТекущийЧас < 8) Тогда
        
        Если НоменклатураВходитВСегментАлкоголь(НоменклатураСсылка) Тогда
            Возврат Истина; // Продажа запрещена
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Ложь;
КонецФункции

Эту проверку следует вызывать в модуле формы РМК. Если функция возвращает Истина, мы должны вывести предупреждение кассиру и прервать выполнение операции добавления или пробития чека.

Способ 2. Внешняя обработка условий предоставления скидок

Если вы не хотите глубоко внедряться в код РМК, можно использовать механизм «Внешних условий предоставления скидок». Хотя в УТ нет типа «Запрет», мы можем создать скидку 100% (или 99.99%), которая срабатывает по условию внешней обработки.

Разберем этот метод:

  1. Создается внешняя обработка, подключаемая через механизм БСП (Библиотека стандартных подсистем).
  2. В обработке прописывается условие: «Если текущее время входит в диапазон запрета и товар является алкоголем».
  3. Скидка настраивается таким образом, чтобы цена становилась нулевой или выдавала ошибку при расчете.

Однако, этот метод менее надежен, так как он лишь манипулирует ценой, а не блокирует сам факт продажи на уровне фискализации.

Способ 3. Техническая блокировка доступа к УТМ (ЕГАИС)

Весьма креативный и эффективный способ заключается в разрыве связи между 1С и Универсальным транспортным модулем (УТМ) в запрещенное время. Если 1С не сможет достучаться до УТМ, она не получит «слип» (QR-код), и чек с крепким алкоголем не будет пробит.

Рассмотрим ситуацию, описанную одним из специалистов. Для реализации используется скрипт на языке AutoIt, который по расписанию редактирует системный файл hosts на кассовом компьютере. В разрешенное время в файле прописан корректный адрес УТМ, а в запрещенное — запись удаляется или изменяется на неверную.

Пример логики скрипта для работы с файлом hosts:


$alcoStartHour = 8  ; Время начала продаж
$alcoEndHour = 23   ; Время окончания продаж
$utmHostsLine = "127.0.0.1 UTM"
$hostsPath = "c:\windows\system32\drivers\etc\hosts"

; Проверка времени и запись/удаление строки в hosts
If IsValidTime($alcoStartHour, $alcoEndHour) Then
   ; Добавляем строку, если её нет (разрешаем работу)
Else
   ; Удаляем строку (блокируем работу УТМ)
EndIf

Преимущества этого метода: кассир физически не сможет отправить чек в ЕГАИС, даже если найдет лазейку в самой 1С. Недостатки: метод не работает для пива (если оно продается без отправки чека в ЕГАИС в реальном времени) и требует прав администратора на ПК.

Способ 4. Блокировка порта через Брандмауэр

Проанализируем еще один системный вариант. Можно использовать планировщик задач Windows (Task Scheduler) для включения и выключения правила в Брандмауэре (Windows Firewall), которое блокирует входящий/исходящий трафик на порт УТМ (обычно 8080).

Это более «чистый» способ по сравнению с правкой hosts, так как он не требует манипуляций с текстовыми файлами, а работает на уровне сетевых правил ОС.

Важные нюансы при реализации

При внедрении любого из вышеуказанных решений, обратите внимание на следующие моменты:

1. Проблема отложенных чеков. Как уже упоминалось, проверка только «при добавлении» товара неэффективна. Кассиры могут сканировать бутылки заранее, а пробивать их позже. Обязательно внедряйте проверку в процедуру ПередПробитиемЧека. 2. Пивная продукция. Помните, что для пива и слабоалкогольных напитков требования ЕГАИС отличаются. Если ваша блокировка завязана только на недоступности УТМ, продажа пива может остаться бесконтрольной. Поэтому программная проверка по ВидуНоменклатуры в 1С остается самым надежным вариантом. 3. Часовые пояса. Если сервер 1С и кассовый терминал находятся в разных часовых поясах, убедитесь, что проверка времени идет по локальному времени кассы, а не по времени сервера.

В заключение отметим, что для стабильной работы и отсутствия штрафов со стороны регулирующих органов, оптимальным решением для «1С:Управление торговлей 11.4» будет создание небольшого расширения, которое объединяет в себе проверку сегмента номенклатуры и текущего времени непосредственно в модуле РМК.

← На главную