Как запретить закрытие формы документа, если он проведен, в 1С:Управляемые формы?

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

В процессе разработки на платформе 1С:Предприятие часто возникают задачи по ограничению прав пользователей на взаимодействие с интерфейсом. Одной из таких типовых задач является предотвращение случайного или намеренного закрытия формы проведенного документа с помощью системной кнопки «Закрыть» или стандартного «крестика» в заголовке окна.

Разберем детально, почему попытки «спрятать» или «отключить» системные элементы интерфейса являются ошибочным путем и как правильно реализовать задуманную логику средствами платформы.

Почему не стоит пытаться удалить «крестик» или кнопку «Закрыть»

Многие разработчики, столкнувшись с требованием заказчика убрать крестик, начинают экспериментировать с настройками свойств формы, такими как РазрешитьЗакрытие, или пытаются управлять доступностью элементов командной панели. Однако важно понимать архитектурные особенности управляемых форм:

Решение задачи через обработчик «ПередЗакрытием»

Наиболее правильным и поддерживаемым способом решения поставленной задачи является использование события формы ПередЗакрытием. Вместо того чтобы пытаться физически скрыть элемент управления, мы перехватываем попытку пользователя закрыть окно и анализируем состояние документа в момент этого действия.

Разберем по шагам, как реализовать проверку состояния документа:

  1. Откройте форму документа в конфигураторе.
  2. Перейдите на вкладку «Модуль» и найдите или создайте процедуру ПередЗакрытием.
  3. В процедуре реализуйте логику проверки того, проведен ли документ, с помощью свойства объекта Проведен.
  4. Если условие выполняется, установите параметр Отказ в значение Истина.

Посмотрим, как должен выглядеть программный код:


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

КонецПроцедуры

Анализ работы предложенного метода

Использование обработчика ПередЗакрытием обладает рядом неоспоримых преимуществ:

Таким образом, мы видим, что задача решается не изменением внешнего вида формы, а ограничением действий пользователя на программном уровне. Такой подход делает систему более устойчивой и понятной для конечного потребителя, а также облегчает дальнейшее сопровождение конфигурации. Придерживайтесь стандартов платформы, и ваши решения будут работать корректно на любой версии 1С.

← На главную