В процессе разработки на платформе 1С:Предприятие часто возникают задачи по ограничению прав пользователей на взаимодействие с интерфейсом. Одной из таких типовых задач является предотвращение случайного или намеренного закрытия формы проведенного документа с помощью системной кнопки «Закрыть» или стандартного «крестика» в заголовке окна.
Разберем детально, почему попытки «спрятать» или «отключить» системные элементы интерфейса являются ошибочным путем и как правильно реализовать задуманную логику средствами платформы.
Многие разработчики, столкнувшись с требованием заказчика убрать крестик, начинают экспериментировать с настройками свойств формы, такими как РазрешитьЗакрытие, или пытаются управлять доступностью элементов командной панели. Однако важно понимать архитектурные особенности управляемых форм:
Наиболее правильным и поддерживаемым способом решения поставленной задачи является использование события формы ПередЗакрытием. Вместо того чтобы пытаться физически скрыть элемент управления, мы перехватываем попытку пользователя закрыть окно и анализируем состояние документа в момент этого действия.
Разберем по шагам, как реализовать проверку состояния документа:
ПередЗакрытием.Проведен.Отказ в значение Истина.Посмотрим, как должен выглядеть программный код:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
// Проверяем, проведен ли документ
Если Объект.Проведен Тогда
// Выводим сообщение пользователю
ПоказатьПредупреждение(, "Документ проведен. Для корректного завершения используйте кнопку ОК.");
// Отменяем закрытие формы
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Использование обработчика ПередЗакрытием обладает рядом неоспоримых преимуществ:
ПоказатьПредупреждение, объясняющее, почему его действие не может быть выполнено.Таким образом, мы видим, что задача решается не изменением внешнего вида формы, а ограничением действий пользователя на программном уровне. Такой подход делает систему более устойчивой и понятной для конечного потребителя, а также облегчает дальнейшее сопровождение конфигурации. Придерживайтесь стандартов платформы, и ваши решения будут работать корректно на любой версии 1С.