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

Программист 1С v8.3 (Управляемые формы)
← К списку

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

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

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

Рассмотрим подробнее, как мы можем использовать ОбработчикОжидания:

  1. Подключение обработчика: Мы должны подключить обработчик ожидания в коде формы, которая открывается одной из первых при старте системы (например, в главной форме рабочего стола или в форме, открывающейся по умолчанию). Делать это следует в событии ПриОткрытии этой формы.
  2. Установка интервала: Установите очень короткий интервал срабатывания, например, 0.5 секунды. Этого времени обычно достаточно, чтобы система завершила начальную отрисовку и не возникло проблем с фокусом или порядком окон.
  3. Вызов ОткрытьФорму(): В процедуре, которая будет вызываться обработчиком ожидания, мы используем глобальный метод ОткрытьФорму() для открытия нашей целевой формы.
  4. Отключение обработчика: Крайне важно после выполнения действия (открытия формы) немедленно отключить обработчик ожидания. Если этого не сделать, он будет срабатывать повторно, что может привести к нежелательным последствиям, таким как потеря фокуса ввода или многократное открытие одной и той же формы.

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


&НаКлиенте
// Процедура, вызываемая при открытии основной формы
Процедура ПриОткрытии(Отказ)
    // Подключаем обработчик ожидания.
    // "ОткрытьМоюФорму" - имя процедуры, которая будет вызвана.
    // 0.5 - интервал в секундах.
    // Истина - однократное срабатывание (или мы отключим его вручную).
    ПодключитьОбработчикОжидания("ОткрытьМоюФорму", 0.5, Истина); 
КонецПроцедуры

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

    // Открываем нужную нам форму.
    // Например, форму обработки "МояОбработка" с именем "Форма".
    // Третий параметр - это владелец формы (здесь - текущая форма).
    ОткрытьФорму("Обработка.МояОбработка.Форма.Форма", , ЭтаФорма);
КонецПроцедуры

Важные моменты при использовании ОбработчикаОжидания:

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

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

Разберем по шагам, как мы можем использовать этот механизм:

  1. Местоположение: Откройте конфигурацию, перейдите в ветку "Общие" → "Модули" → "Модуль управляемого приложения".
  2. Реализация обработчика: Внутри процедуры ПриНачалеРаботыСистемы() вы можете написать код для открытия нужных форм. Это событие срабатывает после того, как главное окно программы уже открыто и интерфейс приложения готов к работе.
  3. Условная логика: Здесь мы можем реализовать сложную условную логику. Например, открывать разные формы для разных пользователей, ролей или в зависимости от каких-либо настроек системы.

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


// Модуль управляемого приложения
Процедура ПриНачалеРаботыСистемы()

    // Пример условного открытия формы для определенного пользователя
    // Мы можем получить текущего пользователя и проверить его имя или роль
    Если Пользователи.ТекущийПользователь().Имя = "Администратор" Тогда
        // Открываем форму настроек системы для администратора
        ОткрытьФорму("Обработка.НастройкиСистемы.Форма.Основная", , Неопределено, "НастройкиСистемы");
    Иначе
        // Открываем форму с важным предупреждением для обычных пользователей
        ОткрытьФорму("Обработка.ПредупреждениеПользователя.Форма.Предупреждение", , Неопределено, "Предупреждение");
    КонецЕсли;

    // Также можно просто открыть форму без условий
    // ОткрытьФорму("Обработка.МояФорма.Форма.Основная");

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

Преимущества использования ПриНачалеРаботыСистемы:

Изменение порядка открытия форм

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

Проанализируем ситуацию:

Предположим, у вас есть две формы, которые должны открываться при старте, и одна из них (например, "Форма 1") содержит логику, вызывающую предупреждение или требующую подтверждения, что мешает корректному открытию "Формы 2". Вместо того чтобы программно "обходить" это предупреждение, мы можем:

  1. Перенастроить систему: Если это возможно через стандартные механизмы конфигурации (например, через настройки рабочего стола, профили пользователей), переопределите, какая форма должна открываться первой.
  2. Модифицировать код: Если формы открываются программно, просто поменяйте местами вызовы ОткрытьФорму(), чтобы форма без проблем открывалась первой.
  3. Отказаться от открытия: В крайнем случае, можно вообще отказаться от автоматического открытия "проблемной" формы, предоставив пользователю возможность открыть её вручную.

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

Дополнительные аспекты и рекомендации при открытии форм

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

Метод ОткрытьФорму()

Для программного открытия форм мы используем глобальный метод ОткрытьФорму(). Этот метод доступен на клиенте (тонкий, толстый, веб-клиент) и обладает широкими возможностями:

Полный синтаксис метода ОткрытьФорму() выглядит так:

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

Свойство РежимОткрытияОкна

Важным аспектом является свойство формы РежимОткрытияОкна, которое определяет поведение открываемого окна:

Пример использования:


// Открываем форму, блокируя весь интерфейс, пока пользователь с ней не взаимодействует
ОткрытьФорму("Обработка.МояВажнаяФорма.Форма.Основная", , , , РежимОткрытияОкна.БлокироватьВесьИнтерфейс);

Вывод предупреждений и сообщений

Если открываемая форма должна выводить какие-либо предупреждения или сообщения пользователю, наиболее подходящим событием для этого является ПриОткрытии на клиенте. Здесь мы можем использовать методы Сообщить(), Предупреждение() или ПоказатьПредупреждение().

Также в событии ПриОткрытии можно отказаться от открытия формы, установив параметр Отказ в Истина, если, например, пользователь не имеет достаточных прав или не выполнены какие-либо условия.

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


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Предположим, у нас есть функция, проверяющая права пользователя
    Если Не ПроверитьПраваПользователя() Тогда
        ПоказатьПредупреждение(, "У вас нет прав для работы с этой формой!");
        Отказ = Истина; // Отменяем открытие формы
    КонецЕсли;
КонецПроцедуры

Оптимизация "тяжелых" форм

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

Стандартные механизмы конфигураций

В некоторых современных конфигурациях 1С (например, 1С:ERP, 1С:УТ) существуют встроенные настройки, позволяющие административно определить, какие формы должны открываться для конкретных пользователей или ролей при начале работы системы. Это делается через создание профилей, назначение ролей и установку флага "открывать по умолчанию" в карточке пользователя. Всегда проверяйте наличие таких механизмов перед тем, как прибегать к программным решениям.

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

← К списку