Работа с базовыми версиями конфигураций 1С, такими как «1С:Розница Базовая», накладывает на администратора и программиста серьезные ограничения. Главная проблема заключается в невозможности внесения изменений в код конфигурации и запрете на использование расширений (кроме тех, что выпущены самой фирмой «1С»). Однако задачи по управлению доступом, например, запрет входа кассира в информационную базу в конкретные даты, остаются актуальными. Рассмотрим, как решить эту задачу, используя внешние инструменты и штатные возможности платформы 1С:Предприятие 8.3.
Поскольку мы не можем дописать код в процедуру ПриНачалеРаботыСистемы внутри конфигурации, нам необходимо найти способ выполнять проверку до или в момент запуска программы. Основная идея заключается в том, чтобы использовать внешнюю обработку (.epf) или командный файл запуска, которые будут выступать в роли «контроллера» доступа. Разберем три наиболее надежных метода реализации этой задачи.
Это самый «чистый» метод с точки зрения экосистемы 1С. Платформа позволяет запустить внешнюю обработку сразу после старта программы с помощью специального ключа в ярлыке. Проанализируем, как это работает.
Шаг 1. Создание внешней обработки. Нам необходимо создать файл CheckAccess.epf. В модуле формы этой обработки, в процедуре ПриОткрытии, мы пропишем логику проверки даты и пользователя. Выясним, как выглядит примерный код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Определяем текущего пользователя
ИмяПользователя = ИмяПользователя();
// Ограничиваем только конкретного пользователя, например, "Кассир"
Если ИмяПользователя = "Кассир" Тогда
// Формируем список запрещенных дат
ЗапрещенныеДаты = Новый Массив;
ЗапрещенныеДаты.Добавить(ДАТА(2023, 09, 01)); // Пример: 1 сентября
ЗапрещенныеДаты.Добавить(ДАТА(2023, 12, 31)); // Пример: 31 декабря
ТекущаяДатаСистемы = НачалоДня(ТекущаяДата());
Для Каждого ДатаЗапрета Из ЗапрещенныеДаты Цикл
Если ТекущаяДатаСистемы = НачалоДня(ДатаЗапрета) Тогда
ПоказатьПредупреждение(, "Вход в систему в этот день запрещен администратором!");
ЗавершитьРаботуСистемы(Ложь);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Если проверка пройдена, закрываем саму обработку, чтобы она не мешала работе
ЭтаФорма.Закрыть();
КонецПроцедуры
Шаг 2. Настройка ярлыка запуска. Теперь нам нужно изменить ярлык, через который кассир заходит в 1С. В поле «Объект» после пути к исполняемому файлу и базе данных добавим параметр /Execute. Рассмотрим пример строки запуска:
"C:\Program Files\1cv8\common\1cv8.exe" ENTERPRISE /F "C:\Bases\Retail" /N "Кассир" /Execute "C:\Scripts\CheckAccess.epf"
Важный нюанс: Чтобы кассир не мог обойти этот запрет, запустив 1С без параметров, необходимо максимально ограничить его права в операционной системе Windows, оставив на рабочем столе только этот настроенный ярлык и скрыв доступ к папке с установленной платформой.
Этот метод основан на штатном механизме платформы. У каждого пользователя в списке пользователей (через Конфигуратор или раздел Администрирование) есть флажок «Вход в программу разрешен». Если его снять, пользователь не сможет войти в базу. Мы можем автоматизировать этот процесс с помощью планировщика задач Windows и внешней обработки.
Разберем алгоритм действий:
AccessManager.epf. Она будет принимать параметр (например, "Запретить" или "Разрешить") и устанавливать соответствующее значение свойства пользователя в ИБ.Посмотрим на пример кода для изменения прав пользователя программно:
Процедура ИзменитьДоступ(ИмяНужногоПользователя, РазрешитьВход)
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяНужногоПользователя);
Если ПользовательИБ <> Неопределено Тогда
ПользовательИБ.ВходВПрограммуРазрешен = РазрешитьВход;
ПользовательИБ.Записать();
Сообщить("Права пользователя " + ИмяНужногоПользователя + " изменены.");
КонецЕсли;
КонецПроцедуры
Преимущество этого метода в том, что он работает на уровне ядра платформы. Даже если кассир попытается запустить 1С через другой ярлык, система его не пустит, так как флаг доступа хранится внутри базы данных.
Если мы хотим полностью исключить запуск 1С в определенные дни, можно использовать простой скрипт Windows. Это решение работает быстрее, так как проверка происходит еще до того, как начнет загружаться тяжелая платформа 1С.
Рассмотрим пример простого .bat файла, который заменяет ярлык 1С:
@echo off
set "current_date=%date%"
:: Проверяем, совпадает ли текущая дата с запрещенной (например, 01.09.2023)
if "%current_date%"=="01.09.2023" (
echo Сегодня вход в систему запрещен!
pause
exit
)
:: Если дата не запрещена, запускаем 1С
start "" "C:\Program Files\1cv8\common\1cv8.exe" ENTERPRISE /F "C:\Bases\Retail" /N "Кассир"
Проанализируем этот подход: он прост в реализации, не требует навыков программирования на встроенном языке 1С, но его легче «взломать» пользователю, который хоть немного разбирается в работе командных файлов. Поэтому данный метод рекомендуется только для дисциплинированных сотрудников.
Выясним, какой из методов лучше выбрать в зависимости от ситуации:
/Execute. Он позволяет гибко настраивать логику (например, проверять не только дату, но и остатки в кассе или другие показатели базы).Не забывайте, что в базовой версии 1С:Розница также есть механизм «Даты запрета изменения данных». Если ваша задача — не просто не пустить пользователя, а запретить ему совершать любые действия (продажи, возвраты) в определенный период, вы можете установить дату запрета на текущее число. В этом случае кассир сможет зайти в программу, но не сможет провести ни один документ, что часто является достаточной мерой контроля.