Как правильно открыть управляемую форму в отдельном окне при запуске приложения 1С

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

В практике разработки на платформе 1С:Предприятие 8.3 часто возникает задача показать пользователю определенную форму сразу при входе в систему. Это может быть форма обновления конфигурации, важное оповещение или специализированное рабочее место (АРМ). Однако разработчики часто сталкиваются с тем, что стандартный метод ОткрытьФорму ведет себя не так, как ожидается, особенно когда речь идет об открытии в отдельном окне, а не в новой вкладке интерфейса "Такси". Для решения этой задачи без ручного написания кода можно использовать инструмент для автоматического открытия окон при запуске 1С.

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

Анализ проблемы контекста в модуле управляемого приложения

Рассмотрим ситуацию, когда нам нужно вызвать открытие формы в процедуре ПриНачалеРаботыСистемы. Эта процедура располагается в Модуле управляемого приложения. Важно понимать, что этот модуль выполняется на стороне клиента, но он не привязан ни к какой конкретной форме. Именно поэтому попытка использовать переменную ЭтаФорма приводит к ошибке: "Переменная не определена".

Проанализируем синтаксис метода ОткрытьФорму:

ОткрытьФорму(ИмяФормы, Параметры, Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна)

Когда мы открываем форму из другой формы, мы передаем ЭтаФорма в качестве владельца, чтобы создать иерархическую связь. При запуске системы владельца просто не существует — интерфейс еще только строится. Если передать в параметр Владелец значение Неопределено (или просто пропустить его), форма будет считаться формой верхнего уровня.

Решение 1: Настройка свойств формы в конфигураторе (Интерактивный метод)

Как выяснилось в ходе обсуждения, наиболее простым и надежным способом заставить форму открыться поверх основного интерфейса является изменение ее внутренних свойств. Это избавляет от необходимости прописывать сложные структуры параметров в коде.

Разберем по шагам, что нужно сделать:

  1. Найдем нужную форму в дереве конфигурации.
  2. Откроем Палитру свойств этой формы.
  3. Найдем раздел Использование и свойство РежимОткрытияОкна.
  4. Установим значение Блокировать окно владельца (или Блокировать весь интерфейс, если требуется модальное поведение без использования устаревших модальных окон).

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


Процедура ПриНачалеРаботыСистемы()
    ОткрытьФорму("ОбщаяФорма.МояФормаОповещения");
КонецПроцедуры

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

Решение 2: Программная установка режима открытия окна

Если нам нужно открывать одну и ту же форму в разных режимах (иногда в закладке, а иногда в отдельном окне), использование свойств в конфигураторе не подходит. В этом случае мы воспользуемся восьмым параметром метода ОткрытьФорму — РежимОткрытияОкна.

Проанализируем программный пример:


// В модуле управляемого приложения
Процедура ПриНачалеРаботыСистемы()
    
    // Используем системное перечисление для задания режима
    Режим = РежимОткрытияОкнаФормы.Независимый;
    
    // Если нужно заблокировать основной интерфейс:
    // Режим = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс;
    
    ОткрытьФорму("ОбщаяФорма.Расш1_ФормаОбновления", , , , , , , Режим);
    
КонецПроцедуры

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

Нюанс работы в интерфейсе "Такси"

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

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

Рассмотрим пример реализации:


ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ВариантОткрытияОкна", ВариантОткрытияОкна.ОтдельноеОкно);

ОткрытьФорму("ОбщаяФорма.МояФорма", ПараметрыОткрытия);

Этот способ является наиболее современным и гибким, так как он "сообщает" платформе о желаемом визуальном отображении формы еще до ее создания.

Использование отложенного вызова (Обработчик ожидания)

Иногда при открытии форм непосредственно в ПриНачалеРаботыСистемы возникают проблемы, связанные с тем, что командный интерфейс программы еще не до конца инициализирован. Форма может открыться и тут же "уйти на задний план" или не открыться вовсе.

Выясним, как это обойти с помощью "отложенного вызова". Разберем этот прием подробнее:

  1. В процедуре ПриНачалеРаботыСистемы мы не вызываем форму напрямую.
  2. Вместо этого мы подключаем обработчик ожидания с минимальным интервалом (например, 0.1 секунды).
  3. В отдельной процедуре модуля приложения выполняем открытие.

Посмотрим на пример кода:


Процедура ПриНачалеРаботыСистемы()
    // Подключаем однократный вызов через 0.1 сек
    ПодключитьОбработчикОжидания("ВыполнитьОтложенноеОткрытиеФормы", 0.1, Истина);
КонецПроцедуры

Процедура ВыполнитьОтложенноеОткрытиеФормы() Экспорт
    // Здесь основной интерфейс уже точно инициализирован
    ОткрытьФорму("ОбщаяФорма.ФормаОбновленияДанных");
КонецПроцедуры

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

Ошибочные подходы: почему не подходит параметр Окно?

В сообщениях форума упоминалось использование функции ПолучитьОкна()[0]. Разберем, почему это плохая практика при запуске системы:

Таким образом, для управления отображением формы следует использовать свойства РежимОткрытияОкна и ВариантОткрытияОкна, а не пытаться вручную манипулировать объектами окон через индексы.

Резюме

Мы проанализировали различные способы открытия управляемой формы в отдельном окне при старте 1С. Подведем итог:

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

← На главную