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