Как программно скрыть все панели интерфейса «Такси» при запуске 1С

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

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

Метод 1: Использование объекта НастройкиИнтерфейсаКлиентскогоПриложения

Проанализируем наиболее корректный и «чистый» способ управления интерфейсом, который предоставляет сама платформа. Речь идет об использовании объекта НастройкиИнтерфейсаКлиентскогоПриложения. Этот объект позволяет описать, какие именно панели должны отображаться в окне и в каких областях.

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

Посмотрим на пример кода:


Процедура ПриНачалеРаботыСистемы()
    
    // Создаем объект для описания настроек интерфейса
    Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
    
    // Создаем пустой состав панелей. 
    // Если мы не добавляем в него элементы, система скроет всё лишнее.
    Состав = Новый СоставПанелейИнтерфейсаКлиентскогоПриложения;
    
    // Устанавливаем этот пустой состав в наши настройки
    Настройки.УстановитьСостав(Состав);
    
    // Применяем настройки для текущего клиента
    УстановитьНастройкиИнтерфейсаКлиентскогоПриложения(Настройки);
    
КонецПроцедуры

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

Метод 2: Прямая запись в ХранилищеСистемныхНастроек

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

Настройки расположения панелей в интерфейсе «Такси» хранятся под определенным ключом. Путь к объекту в хранилище выглядит так: Общее/Панели/НастройкиИнтерфейсаКлиентскогоПриложения. Чтобы программно скрыть панели этим способом, мы должны сформировать объект настроек (как в первом методе) и принудительно записать его в базу данных под именем текущего пользователя.

Разберем пример реализации на стороне сервера:


Процедура СкрытьПанелиЧерезХранилище(ИмяПользователя) Экспорт
    
    Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
    // Оставляем состав панелей пустым для скрытия всех элементов
    Состав = Новый СоставПанелейИнтерфейсаКлиентскогоПриложения;
    Настройки.УстановитьСостав(Состав);
    
    // Записываем настройки в хранилище
    ХранилищеСистемныхНастроек.Записать(
        "Общее/Панели/НастройкиИнтерфейсаКлиентскогоПриложения", 
        "", 
        Настройки, 
        , 
        ИмяПользователя
    );
    
КонецПроцедуры

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

Метод 3: Эмуляция нажатия горячих клавиш (SendKeys)

В качестве альтернативного решения в сообществе иногда предлагают эмуляцию комбинации клавиш CTRL + SHIFT + ~. Это сочетание клавиш в платформе 8.3 отвечает за быстрое переключение режима «Скрыть все панели».

Для реализации этого метода используется объект WScript.Shell. Рассмотрим, как это выглядит в коде:


Попытка
    ОбъектWsh = Новый COMОбъект("WScript.Shell");
    // Эмулируем нажатие Ctrl+Shift+~
    // Символ ^ соответствует Ctrl, + соответствует Shift
    ОбъектWsh.SendKeys("^+~"); 
Исключение
    // Обработка ошибки, если COM-объект недоступен
КонецПопытки;

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

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

Компактный режим интерфейса

Начиная с версии платформы 8.3.15, в 1С появился «Компактный вариант интерфейса». Иногда вместо полного скрытия панелей достаточно включить именно его. Это позволяет уменьшить отступы и размеры шрифтов в заголовках панелей, сохраняя навигацию доступной.

Управление этим режимом осуществляется через свойство ВариантИнтерфейсаКлиентскогоПриложения. Мы можем установить его программно:


Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
Настройки.ВариантИнтерфейса = ВариантИнтерфейсаКлиентскогоПриложения.Компактный;
УстановитьНастройкиИнтерфейсаКлиентскогоПриложения(Настройки);

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

Ограничения и права доступа

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

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

Заключение

Мы рассмотрели несколько способов управления видимостью панелей в интерфейсе «Такси». Подводя итог, можно сказать, что лучшим решением является использование объекта НастройкиИнтерфейсаКлиентскогоПриложения в процедуре ПриНачалеРаботыСистемы. Это обеспечивает надежность, кроссплатформенность (в рамках клиентов 1С) и предсказуемый результат без использования сомнительных «костылей» вроде эмуляции нажатия клавиш.

← На главную