В процессе разработки пользовательских рабочих столов и специализированных интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача открытия управляемой формы на весь экран с возможностью скрытия стандартных элементов управления, таких как кнопка закрытия окна — для этого подойдёт конструктор адаптивных рабочих столов и интерфейсов. Мы проанализируем различные подходы к решению этой задачи, рассмотрим особенности поведения управляемых форм и приведем конкретные примеры кода.
Начиная с версии платформы 8.3.10, в 1С:Предприятии появились расширенные режимы основного окна клиентских приложений, которые позволяют значительно гибче управлять отображением интерфейса и использовать максимальное пространство экрана. Эти режимы особенно полезны для создания киосков, терминалов или специализированных рабочих мест, где необходимо минимизировать количество доступных пользователю стандартных элементов управления.
Различают несколько основных режимов:
Эти режимы могут быть заданы как в конфигураторе, так и программно. В качестве вспомогательного инструмента для реализации подобной логики разработчикам может пригодиться готовое программное изменение форм, которое упрощает работу с элементами интерфейса. Однако важно отметить, что изменить режим основного окна программно можно только при старте прикладного решения, например, в обработчике события ПередНачаломРаботыСистемы. В дальнейшем клиентское приложение будет работать в установленном режиме.
Чтобы установить режим основного окна программно, мы можем использовать следующий код в модуле обычного приложения или в модуле управляемого приложения:
// В модуле обычного приложения или модуле управляемого приложения
// Обработчик события ПередНачаломРаботыСистемы
Процедура ПередНачаломРаботыСистемы(Отказ)
// Устанавливаем режим основного окна "Киоск"
КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОсновногоОкнаКлиентскогоПриложения.Киоск);
КонецПроцедуры
Свойство управляемой формы ОтображатьКнопкуЗакрытия позволяет нам скрыть кнопку закрытия формы и одновременно отключить стандартные действия, выполняемые по клавише Esc. Однако это свойство работает только в новых режимах основного окна: РабочееМесто, ПолноэкранноеРабочееМесто или Киоск. В обычном режиме оно будет работать только для форм, расположенных на начальной странице. Мы можем использовать это свойство для создания форм, которые пользователь не сможет закрыть стандартными способами. Для тонкой настройки интерфейса прямо во время работы системы можно использовать редактор форм в режиме предприятия, позволяющий менять свойства элементов "на лету".
Предполагается, что для таких форм вы определите иной способ закрытия, например, через специально предназначенную кнопку.
Чтобы полностью контролировать закрытие формы, мы можем добавить следующий код в обработчик события ПередЗакрытием формы:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
Отказ = Истина; // Запрещаем стандартное закрытие формы
КонецПроцедуры
И затем предоставить пользователю кнопку для программного завершения работы системы:
&НаКлиенте
Процедура Выход(Команда)
ЗавершитьРаботуСистемы(Ложь); // Закрываем 1С
КонецПроцедуры
Для открытия конкретного окна управляемой формы на весь экран (или, точнее, на всю область приложения), ключевым является свойство формы РежимОткрытияОкна. Мы должны установить его в значение "Независимый".
РежимОткрытияОкна. Установите для него значение "Независимый".ОткрытьФорму, мы можем переопределить это свойство, передав соответствующий параметр. Восьмой параметр метода ОткрытьФорму отвечает за режим открытия окна формы.Пример программного открытия формы в независимом режиме:
// Предположим, что мы открываем форму обработки "МойРабочийСтол"
// Создаем структуру для параметров (если нужны)
ПараметрыОткрытия = Новый Структура();
// ... заполняем ПараметрыОткрытия если необходимо ...
// Открываем форму, указывая РежимОткрытияОкнаФормы.Независимый
ОткрытьФорму("Обработка.МойРабочийСтол.Форма.ФормаРабочегоСтола", ПараметрыОткрытия, , , , , , РежимОткрытияОкнаФормы.Независимый);
Важный момент: если мы добавляем нашу форму на начальную страницу, то по определению она будет открыта на всю область приложения. Это один из самых простых способов добиться полноэкранного отображения для основной формы рабочего стола пользователя. В некоторых сценариях удобно настроить автоматическое открытие окон при запуске 1С, чтобы приложение сразу принимало нужный вид без лишних действий со стороны оператора.
Начиная с версии 8.3.5.1068, появилась возможность программной настройки состава и расположения форм на начальной странице с использованием объекта НастройкиНачальнойСтраницы. Это позволяет динамически изменять вид начальной страницы для разных пользователей или в зависимости от состояния программы.
Мы должны учитывать, что окно, открытое в режиме "Независимый", разворачивается на весь экран только в том случае, если нет других открытых модальных окон. Если перед открытием независимой формы уже открыто модальное окно, то независимая форма может остаться маленькой по центру экрана. Это критически важно для понимания поведения форм. Если вам необходимо динамически управлять составом полей в таких окнах, рекомендуем изучить добавление реквизитов и элементов формы на управляемые формы программным методом.
Платформа 1С активно движется в сторону отказа от модальных окон, особенно в контексте веб-клиента, где браузеры могут блокировать всплывающие окна. Вместо модальных окон рекомендуется использовать "блокирующие окна", которые визуально работают аналогично, но не блокируют выполнение программного кода.
Один из наиболее надежных и комплексных подходов для создания полноэкранного рабочего стола пользователя, особенно для тонкого и мобильного клиента, выглядит следующим образом:
ПередНачаломРаботыСистемы установите для клиентского приложения режим Киоск. Это обеспечит максимальное скрытие стандартных элементов интерфейса 1С.
// В модуле обычного приложения или модуле управляемого приложения
// Обработчик события ПередНачаломРаботыСистемы
Процедура ПередНачаломРаботыСистемы(Отказ)
КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОсновногоОкнаКлиентскогоПриложения.Киоск);
КонецПроцедуры
РежимОткрытияОкна установлено в "Независимый".ОткрытьФорму, указывая РежимОткрытияОкнаФормы.Независимый и избегая модального режима.Этот подход позволяет создать максимально изолированный и полноэкранный интерфейс, где пользователь не сможет стандартными средствами получить доступ к другим функциям системы или закрыть приложение.
В некоторых случаях, когда стандартные средства платформы не дают желаемого результата или требуется более низкоуровневое управление окном (например, когда нужен запуск 1С на полный экран без заголовка окна), мы можем прибегнуть к использованию COM-объекта WScript.Shell. Этот объект позволяет имитировать нажатия клавиш и таким образом взаимодействовать с операционной системой и окнами приложений.
Этот метод является специфическим для операционной системы Windows и не будет работать, например, в веб-клиенте или мобильном клиенте.
Для максимизации окна в обработчике формы ПриОткрытии мы можем использовать следующий код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Попытка
WSHShell = Новый COMОбъект("WScript.Shell");
WSHShell.SendKeys("% "); // Открываем системное меню окна (Alt + Пробел)
WSHShell.SendKeys("{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}"); // Перемещаемся вниз до пункта "Развернуть" и нажимаем Enter
Исключение
// Обработка ошибки, если COM-объект недоступен (например, не Windows)
КонецПопытки;
КонецПроцедуры
Ctrl+Shift+~ (тильда), которое скрывает все лишние панели.При создании специализированных рабочих мест или киосков в 1С:Предприятии, мы можем успешно добиться полноэкранного отображения форм и полного контроля над их закрытием, комбинируя возможности платформы и, при необходимости, прибегая к системным средствам. Мы должны всегда учитывать версию платформы, тип клиентского приложения и возможные ограничения, такие как наличие модальных окон.