Как зафиксировать начальную страницу в 1С и запретить ее закрытие пользователем?

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

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

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

Почему форма начальной страницы отображается как обычное окно и закрывается?

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

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

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

Управление свойством «ОтображатьКнопкуЗакрытия»

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

Давайте выясним особенности работы с этим свойством:

Если ваша конфигурация работает на платформе 8.3.10 и выше без устаревших режимов совместимости, достаточно просто снять этот флаг в конфигураторе. Но что делать, если проект имеет ограничения по совместимости или требуется гарантировать защиту на программном уровне?

Реализация программной защиты через обработчик «ПередЗакрытием»

Для гарантированного запрета закрытия формы мы можем использовать клиентское событие формы ПередЗакрытием. Однако здесь кроется серьезная ловушка, связанная с изменениями в платформе 1С начиная с версии 8.3.10 и отказом от модальности.

Проанализируем ключевые изменения в работе события ПередЗакрытием в режиме совместимости 8.3.10+:

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

Посмотрим на пример правильного программного кода для обхода этой проблемы:


&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
    
    // Проверяем: если закрывается только вкладка формы, а программа продолжает работать
    Если Не ЗавершениеРаботы Тогда
        Отказ = Истина; // Блокируем закрытие этой конкретной вкладки
    КонецЕсли;
    
КонецПроцедуры

Этот простой, но эффективный код четко разделяет намерения пользователя. Если пользователь пытается закрыть вкладку крестиком или горячей клавишей — система мягко блокирует это действие. Если же закрывается все приложение — параметр ЗавершениеРаботы равен Истина, условие не срабатывает, и программа закрывается в штатном режиме.

Разберем по шагам весь процесс настройки начальной страницы

Чтобы окончательно решить задачу автора темы и настроить начальную страницу так, чтобы кнопки всегда были доступны, выполним следующие шаги:

Шаг 1. Регистрация формы в рабочей области

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

Шаг 2. Проверка программного вызова

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

Шаг 3. Настройка свойств в конфигураторе

Откройте палитру свойств вашей общей формы. Если режим совместимости вашей конфигурации равен «Версия 8.3.10» или выше, найдите свойство ОтображатьКнопкуЗакрытия и установите его в значение Ложь. Также рекомендуется проверить свойство СпособОтображенияОкна — для начальной страницы оптимально использовать значение Авто.

Шаг 4. Внедрение программного обработчика

Для обеспечения стопроцентной надежности (особенно при работе в режиме совместимости ниже 8.3.10 или при использовании старых стилей интерфейса) перейдите на вкладку «События» в свойствах формы. Нажмите на лупу рядом с событием ПередЗакрытием и создайте на клиенте процедуру-обработчик. Перенесите в нее код, который мы рассмотрели выше.

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

← На главную