Как открыть форму 1С в отдельном окне поверх текущей без использования модальности?

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

При разработке на управляемых формах часто возникает потребность отобразить вспомогательную форму поверх текущей, чтобы пользователь не мог переключиться на основной интерфейс, пока не выполнит действия во вспомогательном окне. Ранее для этих целей повсеместно использовался метод ОткрытьФормуМодально, однако в современных версиях платформы 1С:Предприятие использование модальных окон крайне не рекомендуется из-за ограничений веб-клиента и общего удобства использования интерфейса. Разберем, как добиться аналогичного поведения, используя современные методы платформы.

Использование режима открытия окна

Для того чтобы форма вела себя как зависимое окно, необходимо правильно использовать метод ОткрытьФорму. Ключевую роль здесь играет параметр РежимОткрытияОкнаФормы. Вместо модального вызова мы будем использовать блокировку окна владельца.

Рассмотрим пример кода, который позволяет открыть форму так, чтобы она была привязана к текущей и блокировала взаимодействие с ней:


ПараметрыФормы = Новый Структура;
// Передаем необходимые параметры в форму
ОткрытьФорму("Обработка.МояОбработка.Форма.ФормаОбработки", 
             ПараметрыФормы, 
             ЭтаФорма, 
             , 
             , 
             , 
             РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

Здесь параметр ЭтаФорма выступает в роли владельца, а константа РежимОткрытияОкнаФормы.БлокироватьОкноВладельца обеспечивает логическую связь между формами, не блокируя при этом весь интерфейс системы целиком.

Принудительное открытие в отдельном окне

Если задача состоит в том, чтобы форма открывалась не в закладке, а в отдельном плавающем окне, нам поможет параметр ВариантОткрытияОкна. Бывают ситуации, когда настройки пользователя или особенности кэша заставляют платформу упорно открывать формы внутри вкладок. Чтобы переопределить это поведение программно, используйте следующий подход:


ОткрытьФорму("Обработка.МояОбработка.Форма.ФормаОбработки", 
             ПараметрыФормы, 
             ЭтаФорма, 
             Новый УникальныйИдентификатор, 
             ВариантОткрытияОкна.ОтдельноеОкно);

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

Что делать, если форма все равно открывается в закладке?

Если после внесения изменений в код поведение программы не изменилось, скорее всего, проблема кроется в настройках кэша или сохраненных пользовательских настройках положения окон. Давайте разберем шаги по устранению этой «упрямости» системы:

  1. Сброс стандартных настроек формы: Откройте проблемную форму в режиме «Предприятие». В меню «Еще» (обычно находится в правой верхней части окна) выберите «Настройки» — «Установить стандартные настройки». Это сбросит положение и размер формы к заводским значениям.
  2. Очистка кэша клиентского приложения: Платформа 1С сохраняет локальные настройки в кэш. Иногда они могут прийти в негодность или содержать конфликтующие данные. Очистка кэша на стороне клиента часто решает загадочные проблемы с отображением интерфейса.
  3. Проверка глобальных настроек пользователя: Пользователь мог самостоятельно переключить режим «Закладки» на «Окна» в настройках панелей (меню «Вид» — «Настройка панелей»). Убедитесь, что логика вашего кода не противоречит глобальным настройкам отображения интерфейса, выбранным пользователем.

Альтернатива: Блокировка всего интерфейса

Если ваша задача требует более жесткого контроля над действиями пользователя, можно использовать константу РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс. В этом случае, пока открыта ваша форма, остальные окна системы станут неактивными. Это максимально близкий аналог модального режима, который все еще допустим в современной архитектуре управляемых форм 1С:


ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", 
             , 
             , 
             , 
             , 
             , 
             РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);

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

Подводя итог, всегда начинайте с использования РежимОткрытияОкнаФормы.БлокироватьОкноВладельца — это «золотой стандарт» современного программирования в 1С, который обеспечивает предсказуемое поведение и поддерживает качественный пользовательский опыт.

← На главную