При переходе на «1С:Управление торговлей 11.4» (УТ) многие пользователи и администраторы сталкиваются с тем, что привычный функционал «1С:Розницы» здесь отсутствует. Одной из таких критических функций является запрет розничной продажи алкоголя в определенные часы. В «Рознице» это настраивается через механизм скидок с типом «Запрет розничной продажи», но в УТ 11 разработчики этот механизм не предусмотрели, предполагая, что для полноценного фронт-офиса будет использоваться специализированное решение.
Тем не менее, задачу необходимо решать в рамках имеющейся конфигурации. В этой статье мы подробно разберем несколько способов реализации данного ограничения: от программной доработки через расширения до системных методов блокировки на уровне операционной системы.
Проанализируем архитектуру конфигурации. УТ 11 позиционируется как система для оптовой торговли и дистрибуции. Рабочее место кассира (РМК) в ней — это упрощенный инструмент для оформления простых розничных операций. Поскольку законодательные ограничения по времени продажи алкоголя специфичны именно для розничных точек, фирма «1С» сосредоточила этот функционал в решениях «1С:Розница» и «1С:ERP». В УТ 11 механизм скидок не содержит предопределенного действия «Запрет продажи», поэтому нам придется использовать обходные пути.
Наиболее корректный метод с точки зрения обновляемости системы — использование расширения (.cfe). Мы можем вмешаться в логику работы РМК, не снимая основную конфигурацию с поддержки. Рассмотрим по шагам, как это реализовать.
1. Определение перехватываемых событий. Нам необходимо добавить проверку в два ключевых момента: при сканировании (добавлении) товара в чек и непосредственно перед пробитием чека на фискальном регистраторе. Это важно, так как кассир может добавить товар в 22:55, а попытаться пробить его в 23:05, когда продажа уже запрещена.
2. Использование сегментов номенклатуры. Чтобы не «зашивать» список алкогольной продукции в программный код, создадим в УТ сегмент номенклатуры «Алкоголь». В коде будем проверять принадлежность товара к этому сегменту.
3. Программная логика. В расширении необходимо перехватить процедуру добавления товара. Проанализируем примерный алгоритм проверки:
&НаСервере
Функция ПроверитьЗапретПродажиАлкоголя(НоменклатураСсылка)
ТекущийЧас = Час(ТекущаяДата());
// Например, запрет с 23:00 до 08:00
Если (ТекущийЧас >= 23 ИЛИ ТекущийЧас < 8) Тогда
Если НоменклатураВходитВСегментАлкоголь(НоменклатураСсылка) Тогда
Возврат Истина; // Продажа запрещена
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
Эту проверку следует вызывать в модуле формы РМК. Если функция возвращает Истина, мы должны вывести предупреждение кассиру и прервать выполнение операции добавления или пробития чека.
Если вы не хотите глубоко внедряться в код РМК, можно использовать механизм «Внешних условий предоставления скидок». Хотя в УТ нет типа «Запрет», мы можем создать скидку 100% (или 99.99%), которая срабатывает по условию внешней обработки.
Разберем этот метод:
Однако, этот метод менее надежен, так как он лишь манипулирует ценой, а не блокирует сам факт продажи на уровне фискализации.
Весьма креативный и эффективный способ заключается в разрыве связи между 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С. Недостатки: метод не работает для пива (если оно продается без отправки чека в ЕГАИС в реальном времени) и требует прав администратора на ПК.
Проанализируем еще один системный вариант. Можно использовать планировщик задач Windows (Task Scheduler) для включения и выключения правила в Брандмауэре (Windows Firewall), которое блокирует входящий/исходящий трафик на порт УТМ (обычно 8080).
Это более «чистый» способ по сравнению с правкой hosts, так как он не требует манипуляций с текстовыми файлами, а работает на уровне сетевых правил ОС.
При внедрении любого из вышеуказанных решений, обратите внимание на следующие моменты:
1. Проблема отложенных чеков. Как уже упоминалось, проверка только «при добавлении» товара неэффективна. Кассиры могут сканировать бутылки заранее, а пробивать их позже. Обязательно внедряйте проверку в процедуру ПередПробитиемЧека.
2. Пивная продукция. Помните, что для пива и слабоалкогольных напитков требования ЕГАИС отличаются. Если ваша блокировка завязана только на недоступности УТМ, продажа пива может остаться бесконтрольной. Поэтому программная проверка по ВидуНоменклатуры в 1С остается самым надежным вариантом.
3. Часовые пояса. Если сервер 1С и кассовый терминал находятся в разных часовых поясах, убедитесь, что проверка времени идет по локальному времени кассы, а не по времени сервера.
В заключение отметим, что для стабильной работы и отсутствия штрафов со стороны регулирующих органов, оптимальным решением для «1С:Управление торговлей 11.4» будет создание небольшого расширения, которое объединяет в себе проверку сегмента номенклатуры и текущего времени непосредственно в модуле РМК.