Рассмотрим часто возникающую задачу, когда необходимо ограничить возможность выхода пользователей из программы до наступления определенного времени. Часто такие запросы связаны с необходимостью выполнения регламентных процедур, обновлений или обеспечения дисциплины внутри учетной системы. Разберем, почему попытка простого написания кода в процедуре ПередЗавершениемРаботыСистемы может привести к ошибкам и как сделать это правильно.
Для начала проанализируем пример кода, который был предложен в исходном вопросе. Автор пытался использовать стандартную процедуру платформы ПередЗавершениемРаботыСистемы, однако допустил ошибку в использовании параметра ТекстПредупреждения.
Проблема заключается в том, что ТекстПредупреждения — это строковая переменная, которая передается в процедуру как параметр, а не функция, которую можно вызвать. Если вы попытаетесь вызвать его как функцию, написав ТекстПредупреждения("Ало"), система выдаст ошибку, так как она будет искать метод с таким именем, которого не существует.
Правильный способ изменения текста сообщения — это простое присваивание значения переменной. Рассмотрим, как должен выглядеть исправленный код:
Процедура ПередЗавершениемРаботыСистемы(Отказ, ТекстПредупреждения)
ТекДата = ТекущаяДата();
ВремяЗавершения = (КонецДня(ТекущаяДата())) - 2 * 3600;
Если ТекДата < ВремяЗавершения Тогда
Отказ = Истина;
ТекстПредупреждения = "Работа в системе разрешена только после 22:00!";
КонецЕсли;
КонецПроцедуры
Рассмотрев синтаксическую правку, важно осознать и архитектурные ограничения такого подхода:
ПередЗавершениемРаботыСистемы срабатывает только при корректном завершении приложения (через крестик или меню «Файл»). Она никак не спасет от принудительного закрытия процесса через «Диспетчер задач» или завершения сеанса Windows. Пользователь всегда может «убить» задачу, что потенциально приведет к нарушению целостности данных.Вместо того чтобы ограничивать выход пользователя, гораздо правильнее управлять блокировкой входа и текущими сеансами через консоль кластера серверов или настройки базы данных. Рассмотрим пошагово, как это реализуется в крупных внедрениях:
РегламентнымЗаданиям, которые работают на сервере 1С вне зависимости от того, закрыта ли у кого-то программа или нет.Мы выяснили, что программный запрет на закрытие программы через ПередЗавершениемРаботыСистемы — это скорее дисциплинарная мера, которая технически не является надежной. В профессиональной среде мы рекомендуем использовать:
Помните, что гибкие настройки на уровне сервера 1С всегда будут работать стабильнее и безопаснее для вашей базы данных, чем попытки ограничить действия пользователя через код в конфигурации.