Как определить текущую подсистему и заменить командный интерфейс на свою форму в 1С 8.3?

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

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

Почему нельзя решить задачу "в лоб"?

Если мы посмотрим на архитектуру современного интерфейса "Такси", то выясним причину, по которой перехватить клик пользователя по разделу напрямую невозможно. Платформа 1С 8.3 полностью скрывает от разработчика DOM-модель главного окна приложения. "Подсистема" не является интерактивным объектом в привычном понимании, у нее нет событийного аппарата вроде обработчиков ПриНажатии или ПриАктивации.

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


НавигационнаяСсылка = АктивноеОкно.ПолучитьНавигационнуюСсылку();
Если Найти(НавигационнаяСсылка, "e1cib/navigationpoint/") = 0 Или НавигационнаяСсылка = "" Тогда
    ПодключитьОбработчикОжидания("ПолучитьТекущуюПодсистему", 0.1, Истина);
    Возврат;
КонецЕсли;
НазваниеПодсистемы = СтрЗаменить(НавигационнаяСсылка, "e1cib/navigationpoint/", "");

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

Решение 1: Использование "Режима киоска" (Рабочее место)

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

  1. В свойствах корня конфигурации находим свойство РежимОсновногоОкнаКлиентскогоПриложения.
  2. Устанавливаем его в значение РабочееМесто. Также этот режим можно активировать при запуске клиента ключом /Kiosk.
  3. В этом режиме платформа скрывает панель разделов, панель функций и панель открытых окон. Приложение становится однооконным.
  4. Создаем свою специальную обработку, которая будет служить главным меню. Размещаем ее на Начальной странице (рабочем столе). Она займет 100% экрана.
  5. Внутри формы этой обработки создаем элемент ПанельСоСтраницами без отображения закладок. Сверху или слева рисуем свои красивые кнопки-разделы. При нажатии на кнопку программно перелистываем страницу или открываем другие нужные формы с помощью метода ОткрытьФорму().

Решение 2: Программное управление видимостью панелей

Если вы не хотите полностью переходить в "Рабочее место", разберем еще один вариант. Можно программно скрыть ненужные стандартные панели при старте системы и подменить их своими. Пошаговый алгоритм:

  1. При старте клиентского приложения программно скрываем Панель разделов.
  2. Включаем отображение Панели функций текущего раздела и помещаем ее на место панели разделов.
  3. В командный интерфейс основного раздела конфигурации добавляем нужные нам команды, которые будут открывать наши специализированные обработки.
  4. В результате при старте на панели функций отобразятся наши команды, клик по которым откроет нужный интерфейс в рабочей области.

Решение 3: Кастомизация интерфейса через поле HTML-документа

Так как изначальная цель — "удобнее разместить элементы", мы можем обойти жесткую сетку элементов управляемой формы. Рассмотрим использование веб-технологий внутри 1С:

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

Решение 4: Разграничение стартовых обработок по ролям

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

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

← На главную