При разработке интерфейсов на платформе 1С:Предприятие 8.3 (особенно в режиме управляемого приложения и тонкого клиента) часто возникает задача создания постоянного рабочего места пользователя. Начальная страница — это первое, что видит пользователь при запуске программы. На ней удобно размещать ключевые показатели, интерактивные схемы работы или важные управляющие кнопки, доступ к которым должен быть постоянным.
Однако разработчики часто сталкиваются с проблемой: спроектированная форма начальной страницы ведет себя как обычное вспомогательное окно. Пользователь может легко закрыть её, нажав на крестик или клавишу Esc, после чего рабочая область остается пустой, а доступ к важным функциям теряется. Сегодня мы подробно разберем, почему так происходит, изучим внутренние механизмы платформы и реализуем надежное решение, которое навсегда зафиксирует форму на начальной странице.
В современном интерфейсе «Такси» формы, добавленные в рабочую область начальной страницы, по умолчанию встраиваются в интерфейс приложения намертво. У них отсутствует стандартная кнопка закрытия, их невозможно свернуть или закрыть стандартными средствами. Если в вашем решении форма все же закрывается, давайте проанализируем возможные причины этого поведения:
ОткрытьФорму(), платформа создаст независимое вспомогательное окно. Помните: формы начальной страницы должны открываться исключительно автоматически самой платформой на основании настроек конфигурации.Рассмотрим подробнее свойства форм и программные методы, которые позволят нам решить эту задачу в любом режиме совместимости платформы.
В старых версиях платформы разработчики управляли поведением окон с помощью свойства РежимРабочегоСтола. Однако, как справедливо замечено в дискуссии, это свойство поддерживается только в толстом клиенте для обычных форм. В управляемом приложении за аналогичное поведение отвечает свойство управляемой формы ОтображатьКнопкуЗакрытия.
Давайте выясним особенности работы с этим свойством:
Ложь не только убирает кнопку закрытия (крестик) с панели формы, но и полностью блокирует возможность закрытия формы интерактивно по горячей клавише Esc.Если ваша конфигурация работает на платформе 8.3.10 и выше без устаревших режимов совместимости, достаточно просто снять этот флаг в конфигураторе. Но что делать, если проект имеет ограничения по совместимости или требуется гарантировать защиту на программном уровне?
Для гарантированного запрета закрытия формы мы можем использовать клиентское событие формы ПередЗакрытием. Однако здесь кроется серьезная ловушка, связанная с изменениями в платформе 1С начиная с версии 8.3.10 и отказом от модальности.
Проанализируем ключевые изменения в работе события ПередЗакрытием в режиме совместимости 8.3.10+:
ПередЗакрытием(Отказ, СтандартнаяОбработка)ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)ЗавершениеРаботы принимает значение Истина. В этот момент платформой строго запрещено выполнять любые серверные вызовы (включая неявные обращения к реквизитам базы данных через точку) и открывать любые новые окна или диалоги. Попытка нарушить это правило приведет к аварийному завершению работы программы.Отказ = Истина, то пользователь не сможет закрыть не только саму вкладку начальной страницы, но и всю программу 1С! При попытке выйти из программы система будет выдавать ошибку «Работа в данном окне не завершена», блокируя выход.Посмотрим на пример правильного программного кода для обхода этой проблемы:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
// Проверяем: если закрывается только вкладка формы, а программа продолжает работать
Если Не ЗавершениеРаботы Тогда
Отказ = Истина; // Блокируем закрытие этой конкретной вкладки
КонецЕсли;
КонецПроцедуры
Этот простой, но эффективный код четко разделяет намерения пользователя. Если пользователь пытается закрыть вкладку крестиком или горячей клавишей — система мягко блокирует это действие. Если же закрывается все приложение — параметр ЗавершениеРаботы равен Истина, условие не срабатывает, и программа закрывается в штатном режиме.
Чтобы окончательно решить задачу автора темы и настроить начальную страницу так, чтобы кнопки всегда были доступны, выполним следующие шаги:
Шаг 1. Регистрация формы в рабочей области
Откройте конфигуратор вашей базы данных. Кликните правой кнопкой мыши по корню конфигурации и выберите пункт «Открыть рабочую область начальной страницы». В появившемся окне добавьте созданную общую форму в список отображаемых форм. Вы можете настроить ее отображение в одну или несколько колонок в зависимости от требований дизайна.
Шаг 2. Проверка программного вызова
Убедитесь, что в модулях конфигурации (особенно в МодульУправляемогоПриложения) нет вызовов этой формы через методы типа ОткрытьФорму() при старте системы. Форма должна инициализироваться только платформой.
Шаг 3. Настройка свойств в конфигураторе
Откройте палитру свойств вашей общей формы. Если режим совместимости вашей конфигурации равен «Версия 8.3.10» или выше, найдите свойство ОтображатьКнопкуЗакрытия и установите его в значение Ложь. Также рекомендуется проверить свойство СпособОтображенияОкна — для начальной страницы оптимально использовать значение Авто.
Шаг 4. Внедрение программного обработчика
Для обеспечения стопроцентной надежности (особенно при работе в режиме совместимости ниже 8.3.10 или при использовании старых стилей интерфейса) перейдите на вкладку «События» в свойствах формы. Нажмите на лупу рядом с событием ПередЗакрытием и создайте на клиенте процедуру-обработчик. Перенесите в нее код, который мы рассмотрели выше.
Выполнив эти шаги, мы получим идеальное поведение интерфейса: кнопки на форме начальной страницы будут постоянно доступны пользователю, а случайное или намеренное закрытие рабочей области станет невозможным.