При автоматизации рабочих мест со специфическими задачами (например, терминалы сбора данных, рабочие места кассиров или производственные мониторы с сенсорным управлением) часто возникает необходимость максимально упростить интерфейс. Идеальный вариант — когда пользователь при входе видит только одну форму своей обработки и не имеет доступа к меню разделов, панелям навигации и другим стандартным элементам системы. В рамках данной статьи мы разберем, как программно настроить такой интерфейс в 1С:Предприятие 8.3, используя расширения и механизмы платформы.
Рассмотрим ситуацию на примере конфигурации 1С:Комплексная автоматизация 2.5. Нам необходимо добиться следующего поведения системы:
Для реализации этой задачи мы проанализируем три основных механизма: установку режима основного окна, программную очистку состава панелей через ХранилищеСистемныхНастроек и принудительную настройку состава начальной страницы.
Первым делом нам нужно определить, как будет выглядеть само окно приложения. Платформа 1С предлагает несколько режимов, из которых для нашей задачи наиболее интересны РабочееМесто и ПолноэкранноеРабочееМесто.
Разберем их подробнее. Режим РабочееМесто скрывает панели навигации и действий, но оставляет заголовок приложения. Режим ПолноэкранноеРабочееМесто — это радикальный вариант, который убирает даже системный заголовок окна и панель задач Windows. Проанализируем пример кода, который необходимо разместить в модуле управляемого приложения (через расширение) в обработчике ПередНачаломРаботыСистемы:
&Перед("ПередНачаломРаботыСистемы")
Процедура ИТ_ПередНачаломРаботыСистемы()
// Проверяем доступность роли, чтобы не заблокировать интерфейс администратору
Если РольДоступна("ТолькоНачальнаяПанель") Тогда
КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОсновногоОкнаКлиентскогоПриложения.ПолноэкранноеРабочееМесто);
КонецЕсли;
КонецПроцедуры
Использование этого метода гарантирует, что приложение примет нужный вид еще до того, как интерфейс будет полностью отрисован.
Даже в режиме рабочего места у пользователя могут остаться элементы управления, которые нам не нужны. Чтобы гарантированно "очистить" экран, воспользуемся объектом ХранилищеСистемныхНастроек. Нам нужно перезаписать настройки интерфейса клиента.
Выясним причину, по которой это лучше делать в процедуре УстановкаПараметровСеанса модуля сеанса или в начале работы системы. Настройки интерфейса считываются платформой при старте, поэтому нам важно успеть подменить их в хранилище. Рассмотрим алгоритм очистки всех панелей:
// Загружаем текущие настройки интерфейса
НастройкиИнтерфейса = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения");
// Если настроек еще нет (первый вход), создаем новый объект
Если НастройкиИнтерфейса = Неопределено Тогда
НастройкиИнтерфейса = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
КонецЕсли;
НастройкиСостава = НастройкиИнтерфейса.ПолучитьСостав();
// Очищаем все возможные области расположения панелей
НастройкиСостава.Лево.Очистить();
НастройкиСостава.Верх.Очистить();
НастройкиСостава.Низ.Очистить();
НастройкиСостава.Право.Очистить();
// Устанавливаем и сохраняем пустой состав
НастройкиИнтерфейса.УстановитьСостав(НастройкиСостава);
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения", , НастройкиИнтерфейса);
Этот код эффективно убирает панель разделов, панель инструментов и панель открытых окон, оставляя рабочую область абсолютно чистой.
Теперь, когда интерфейс пуст, нам нужно вывести на экран нашу рабочую форму. Мы не будем полагаться на то, что пользователь сам добавит ее в настройки, а сделаем это программно. Для этого используется объект НастройкиНачальнойСтраницы. При необходимости можно воспользоваться расширением для автоматического запуска обработок и других объектов при старте системы.
Посмотрим на пример реализации, где мы добавляем форму обработки на рабочий стол:
НастройкиНачальнойСтраницы = Новый НастройкиНачальнойСтраницы;
СоставФорм = Новый СоставФормНачальнойСтраницы;
// Указываем путь к форме нашей обработки
// Обратите внимание на синтаксис: "Обработка.ИмяОбработки.Форма.ИмяФормы"
СоставФорм.ЛеваяКолонка.Добавить("Обработка.РабочийСтолСенсорный.Форма.Форма");
НастройкиНачальнойСтраницы.УстановитьСоставФорм(СоставФорм);
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиНачальнойСтраницы", , НастройкиНачальнойСтраницы);
Важно помнить, что если вы используете расширение, имя обработки может содержать префикс расширения. Проверьте правильность пути к форме, иначе начальная страница останется пустой.
Соберем все части воедино. Наиболее надежный способ — использовать расширение, чтобы не снимать основную конфигурацию с поддержки. Проанализируем комплексный код в модуле сеанса, который срабатывает при установке параметров сеанса. Это гарантирует, что настройки будут применены до того, как клиентское приложение их запросит.
&После("УстановкаПараметровСеанса")
Процедура ИТ_УстановкаПараметровСеанса(ИменаПараметровСеанса)
// Проверка роли пользователя (создайте эту роль в расширении)
Если РольДоступна("ТолькоНачальнаяПанель") Тогда
// 1. Очистка панелей
НастройкиИнтерфейса = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения");
Если НастройкиИнтерфейса = Неопределено Тогда
НастройкиИнтерфейса = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
КонецЕсли;
НастройкиСостава = НастройкиИнтерфейса.ПолучитьСостав();
НастройкиСостава.Лево.Очистить();
НастройкиСостава.Верх.Очистить();
НастройкиСостава.Низ.Очистить();
НастройкиСостава.Право.Очистить();
НастройкиИнтерфейса.УстановитьСостав(НастройкиСостава);
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения", , НастройкиИнтерфейса);
// 2. Установка формы на начальную страницу
НастройкиНачальнойСтраницы = Новый НастройкиНачальнойСтраницы;
СоставФорм = Новый СоставФормНачальнойСтраницы;
СоставФорм.ЛеваяКолонка.Добавить("Обработка.ИТ_РабочийСтол.Форма.Форма");
НастройкиНачальнойСтраницы.УстановитьСоставФорм(СоставФорм);
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиНачальнойСтраницы", , НастройкиНачальнойСтраницы);
КонецЕсли;
КонецПроцедуры
Если ваша цель — создание интерфейса для сенсорного монитора, просто скрыть панели может быть недостаточно. Рассмотрим несколько дополнительных приемов:
КлиентскоеПриложение.УстановитьИнтерфейс.Ctrl+Shift+L (поиск) или Alt+F10. Если это критично, в форме обработки можно перехватывать нажатия клавиш или использовать полноэкранный режим киоска на уровне операционной системы.ИсторияРаботыПользователя.Очистить().ПолноэкранноеРабочееМесто может отсутствовать.Проанализировав данную ситуацию, мы видим, что платформа 1С предоставляет мощные инструменты для глубокой кастомизации интерфейса. Сочетание программного изменения ХранилищаСистемныхНастроек и управления режимом окна позволяет превратить сложную учетную систему в простое и понятное специализированное приложение для конечного пользователя.