Иногда при разработке или адаптации конфигураций возникает потребность кардинально изменить пользовательский опыт. Разберем интересную задачу: как при переходе на определенную подсистему заменить стандартный командный интерфейс управляемого приложения на свою собственную форму (например, обработку-дашборд), чтобы удобнее разместить элементы управления. Проанализируем ситуацию и выясним, как это можно реализовать в современных реалиях платформы 1С:Предприятие 8.3.
Если мы посмотрим на архитектуру современного интерфейса "Такси", то выясним причину, по которой перехватить клик пользователя по разделу напрямую невозможно. Платформа 1С 8.3 полностью скрывает от разработчика DOM-модель главного окна приложения. "Подсистема" не является интерактивным объектом в привычном понимании, у нее нет событийного аппарата вроде обработчиков ПриНажатии или ПриАктивации.
Во времена платформы 1С 8.2 (до внедрения интерфейса "Такси") разработчики использовали программные "хаки", пытаясь определить текущую подсистему через парсинг навигационной ссылки активного окна. Посмотрим на пример старого кода, который сейчас уже не работает:
НавигационнаяСсылка = АктивноеОкно.ПолучитьНавигационнуюСсылку();
Если Найти(НавигационнаяСсылка, "e1cib/navigationpoint/") = 0 Или НавигационнаяСсылка = "" Тогда
ПодключитьОбработчикОжидания("ПолучитьТекущуюПодсистему", 0.1, Истина);
Возврат;
КонецЕсли;
НазваниеПодсистемы = СтрЗаменить(НавигационнаяСсылка, "e1cib/navigationpoint/", "");
В новых версиях платформы этот подход был заблокирован из соображений безопасности и изменения логики работы интерфейса (особенно в веб-клиенте). Поэтому нам предстоит использовать другие архитектурные возможности системы.
Если стандартный интерфейс с панелью разделов не устраивает, давайте уберем его полностью и создадим свою "чудо-обработку", которая станет единым окном для пользователя. Этот подход на форумах часто называют "Режим киоска". Рассмотрим подробнее шаги по его реализации:
РежимОсновногоОкнаКлиентскогоПриложения.РабочееМесто. Также этот режим можно активировать при запуске клиента ключом /Kiosk.ПанельСоСтраницами без отображения закладок. Сверху или слева рисуем свои красивые кнопки-разделы. При нажатии на кнопку программно перелистываем страницу или открываем другие нужные формы с помощью метода ОткрытьФорму().Если вы не хотите полностью переходить в "Рабочее место", разберем еще один вариант. Можно программно скрыть ненужные стандартные панели при старте системы и подменить их своими. Пошаговый алгоритм:
Так как изначальная цель — "удобнее разместить элементы", мы можем обойти жесткую сетку элементов управляемой формы. Рассмотрим использование веб-технологий внутри 1С:
Создаем свою форму обработки и добавляем на нее элемент ПолеHTMLДокумента. Внутри этого поля мы можем сверстать абсолютно любой интерфейс: многоуровневые боковые меню, анимированные панели, нестандартные кнопки и дашборды, используя стандартные HTML, CSS и JavaScript. При клике на элемент меню внутри HTML-документа, мы перехватываем событие в модуле формы 1С и вызываем открытие нужных документов или отчетов.
Если задача заключается в том, чтобы дать разным отделам (например, Бухгалтерии и Складу) свой уникальный стартовый интерфейс с нужным расположением кнопок, это решается штатными средствами без сложного программирования.
Мы создаем несколько разных обработок-дашбордов для каждого отдела. Затем переходим в настройку Рабочей области начальной страницы. Добавляем туда все созданные обработки, но для каждой настраиваем видимость по Ролям. Стандартные подсистемы для этих пользователей скрываются в правах доступа. В итоге, когда кладовщик заходит в систему, он сразу видит на весь экран удобный складской интерфейс, а бухгалтер — свой.