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

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

При разработке конфигураций на платформе 1С:Предприятие 8.3 часто возникает задача: сделать так, чтобы при запуске программы пользователю сразу же показывалась определенная общая форма (например, интерактивный рабочий стол, дашборд с показателями или монитор задач). При этом критически важно, чтобы эта форма аккуратно располагалась в виде вкладки (закладки) в главном окне программы — сразу же за начальной страницей, а не открывалась в виде отдельного всплывающего окна, которое мешает работе и перекрывает интерфейс.

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

Почему форма открывается в отдельном окне: разбираем ошибки

Для начала давайте выясним причину, по которой стандартные попытки программиста открыть форму при запуске приводят к её «отрыву» от основного интерфейса. Типичный ошибочный код в модуле управляемого приложения выглядит следующим образом:


Процедура ПередНачаломРаботыСистемы(Отказ)
    Форма = ПолучитьФорму("ОбщаяФорма.ДиаграммыНаНЧ");    
    Форма.РежимОткрытияОкна = РежимОткрытияОкнаФормы.Независимый; 
    Форма.Открыть();
КонецПроцедуры

В этом коротком фрагменте кода кроются сразу три серьезные методологические ошибки:

  1. Неправильный выбор события. Обработчик ПередНачаломРаботыСистемы срабатывает на самом раннем этапе инициализации клиентского приложения. В этот момент основного окна программы еще физически не существует, каркас интерфейса «Такси» не отрисован. Любая попытка открыть форму в этом событии вынуждает платформу создать для нее отдельное независимое окно операционной системы, так как «прикрепить» вкладку еще просто не к чему.
  2. Использование устаревшего метода ПолучитьФорму(). Согласно стандартам разработки фирмы «1С», этот метод крайне не рекомендуется использовать для открытия окон. Он порождает избыточные серверные вызовы, замедляет работу интерфейса и ведет к непредсказуемому поведению форм в веб-клиенте и на мобильных платформах.
  3. Неверная настройка режима открытия. Попытка форсировать независимый режим отображения программно до инициализации интерфейса не дает нужного результата, так как отсутствует контекст главного окна.

Теперь, когда мы понимаем физику процесса, давайте перейдем к правильным вариантам реализации.

Вариант 1. Перенос кода в событие ПриНачалеРаботыСистемы

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

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


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

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

Важное требование к свойствам формы в конфигураторе: чтобы данный способ отработал корректно, откройте свойства вашей общей формы в конфигураторе и проверьте следующие параметры:

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

Вариант 2. Использование однократного обработчика ожидания

Иногда при работе с крупными и тяжелыми типовыми конфигурациями (такими как «1С:ERP Управление предприятием» или «1С:Комплексная автоматизация») событие ПриНачалеРаботыСистемы оказывается перегружено тяжелыми фоновыми задачами, проверками обновлений или загрузкой параметров пользователя. В таких сценариях форма все равно может открыться некорректно или с задержкой.

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

Давайте реализуем эту схему в модуле управляемого приложения:


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

Процедура ОткрытьОбщуюФормуПриЗапуске() Экспорт
    // Данный метод выполнится, когда интерфейс будет на 100% готов к работе
    ОткрытьФорму("ОбщаяФорма.ДиаграммыНаНЧ");
КонецПроцедуры

Обратите внимание на третий параметр Истина в методе ПодключитьОбработчикОжидания(). Он указывает системе, что процедуру нужно вызвать ровно один раз, после чего отключить обработчик. Это очень надежный способ, гарантирующий открытие формы именно во вкладке главного окна.

Вариант 3. Динамическое управление начальной страницей

Бывают ситуации, когда разработчик сталкивается с возражением: «Начальная страница уже занята другими важными формами, и мы не можем просто так добавить туда еще одну». Однако в 1С 8.3 существует элегантное решение — мы можем программно управлять составом начальной страницы (рабочего стола) непосредственно в момент запуска системы.

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

Давайте рассмотрим пример кода, который решает эту задачу:


Процедура НастроитьРабочийСтол() Экспорт
    НачальнаяСтраница = Новый НастройкиНачальнойСтраницы;
    СоставФорм = НачальнаяСтраница.ПолучитьСоставФорм();
    
    // Очищаем или настраиваем левую колонку начальной страницы
    СоставФорм.ЛеваяКолонка.Очистить();
    
    // Динамически добавляем нашу общую форму на рабочее пространство
    СоставФорм.ЛеваяКолонка.Добавить("ОбщаяФорма.ДиаграммыНаНЧ"); 
    
    // Сохраняем новые настройки для текущего сеанса
    НачальнаяСтраница.УстановитьСоставФорм(СоставФорм);
    ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиНачальнойСтраницы", "", НачальнаяСтраница);
КонецПроцедуры

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

Вариант 4. Проверка настроек интерфейса пользователя

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

  1. Отображение панели открытых окон. Зайдите в режиме «1С:Предприятие» в главное меню: Сервис и настройки -> Настройки -> Настройка панелей. Убедитесь, что в редакторе панелей присутствует Панель открытых (обычно она располагается в верхней или нижней части экрана). Если эта панель отключена пользователем, у платформы физически отсутствует контейнер для группировки вкладок, и она будет открывать все новые формы в отдельных окнах.
  2. Режим запуска базы в стартере 1С. В редких случаях у пользователя в дополнительных параметрах запуска информационной базы может быть прописан ключ /isdi. Этот ключ принудительно запускает систему в многооконном режиме (SDI), игнорируя стандартный интерфейс вкладок «Такси». Проверьте настройки подключения к базе в списке запуска и удалите этот ключ при его наличии.

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

← На главную