В процессе разработки на платформе 1С:Предприятие 8 часто возникает задача управления поведением открываемых окон. Разработчики нередко задаются вопросом, как сделать окно модальным, чтобы пользователь не мог переключиться на другую часть системы, пока не закроет текущую форму. Давайте подробно разберем, как решается эта задача, какие инструменты предоставляет платформа и почему современные стандарты разработки рекомендуют избегать использования модальности.
Модальный режим — это состояние интерфейса, при котором все остальные элементы системы блокируются до тех пор, пока пользователь не совершит действие в текущем окне. Исторически этот метод был основным для управления потоком пользовательского ввода. Однако с развитием веб-технологий и мобильных клиентов 1С, использование блокирующих окон стало нежелательным. Блокировка основного потока выполнения кода в браузере приводит к некорректной работе интерфейса, поэтому платформа активно переходит на асинхронные методы работы.
Если ваша конфигурация работает в локальном режиме или на старых версиях платформы, и вы строго ограничены требованиями к блокировке интерфейса, вы можете воспользоваться методом ОткрытьМодально. Рассмотрим, как это реализовать:
// Получаем форму объекта
Форма = ПолучитьКонтактнуюИнформацию().ПолучитьФорму();
// Открываем форму в модальном режиме
Форма.ОткрытьМодально();
Этот код принудительно остановит выполнение скрипта до закрытия окна. Однако помните: использование этого метода считается «моветоном» и может привести к проблемам при попытке опубликовать вашу базу в облаке или веб-клиенте.
Чаще всего потребность в модальности возникает из-за желания предотвратить «пложение» дублирующих окон. Пользователи склонны нажимать кнопки несколько раз, открывая одну и ту же форму по многу раз. Вместо того чтобы блокировать весь интерфейс, мы можем использовать более изящные механизмы платформы.
Рассмотрим, как реализовать защиту от дублирования окон программно. Метод ОткрытьФорму позволяет передать второй параметр — уникальный ключ:
// Ключ может быть любой строкой или идентификатором, например, ссылкой на объект
УникальныйКлюч = \"КонтактнаяИнформация\" + Объект.Ссылка;
ОткрытьФорму(\"Справочник.КонтактнаяИнформация.ФормаОбъекта\", , , УникальныйКлюч);
При таком подходе, если пользователь попытается открыть форму повторно, платформа просто переключит фокус на уже открытое окно. Это решение значительно удобнее для пользователя, чем блокировка всего интерфейса.
Если вам все же необходимо, чтобы окно было «поверх» остальных, используйте свойство РежимОткрытияОкнаФормы. Для этого в коде при открытии или в настройках самой формы установите значение РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс.
Этот режим имитирует модальность, но делает это корректно с точки зрения архитектуры управляемых форм. Платформа 1С:Предприятие 8.3 позволяет использовать этот метод без конфликтов с веб-клиентом.
Давайте проанализируем, почему профессиональное сообщество рекомендует переходить к немодальному интерфейсу:
В итоге, если вы хотите сделать интерфейс удобным и современным, лучше всего использовать РежимОткрытияОкнаФормы или УникальныйКлюч. Это позволит избежать ошибок пользователя, сохранив при этом гибкость и производительность системы.