Как создать полностью настраиваемую панель навигации в 1С вместо стандартного меню

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

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

Метод 1. Программное управление составом панелей интерфейса

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

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


&После("ПриНачалеРаботыСистемы")
Процедура Доработки_ПриНачалеРаботыСистемы(Параметры)
    #Если ВебКлиент Или ТонкийКлиент Тогда
        // Вызываем серверную функцию для настройки интерфейса
        Если МойМодульВызовСервера.ВыполнитьНастройкуПанелей() Тогда
            ОбновитьИнтерфейс();
        КонецЕсли;
    #КонецЕсли
КонецПроцедуры

Теперь рассмотрим серверную функцию, которая управляет составом окон. Основная задача здесь — создать новый объект настроек, очистить стандартные привязки и добавить нужные нам элементы, такие как ПанельИзбранного или ПанельОткрытых.


Функция ВыполнитьНастройкуПанелей() Экспорт
    УстановитьПривилегированныйРежим(Истина);
    
    // Создаем новый объект настроек интерфейса
    НастройкиИнтерфейса = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
    НастройкиСостава = НастройкиИнтерфейса.ПолучитьСостав();
    
    // Очищаем все стандартные панели (Верх, Лево, Низ, Право)
    НастройкиСостава.Верх.Очистить();
    НастройкиСостава.Лево.Очистить();
    НастройкиСостава.Низ.Очистить();
    НастройкиСостава.Право.Очистить();
    
    // Формируем свою структуру, например, только верхнюю панель
    ГруппаПанелей = Новый ГруппаНастройкиСоставаИнтерфейсаКлиентскогоПриложения;
    ГруппаПанелей.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельИзбранного"));
    ГруппаПанелей.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельОткрытых"));
    
    НастройкиСостава.Верх.Добавить(ГруппаПанелей);
    
    // Применяем настройки
    НастройкиИнтерфейса.УстановитьСостав(НастройкиСостава);
    ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения", , НастройкиИнтерфейса);
    
    Возврат Истина;
КонецФункции

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

Метод 2. Использование режима «Встроенное рабочее место» (АРМ)

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

Суть заключается в использовании свойства РежимОсновногоОкнаКлиентскогоПриложения.ВстроенноеРабочееМесто. В этом режиме система скрывает все стандартные меню, а всё пространство занимает одна-единственная форма, которую вы спроектируете самостоятельно.

  1. Создаем общую форму (или форму обработки), которая будет выступать в роли главного меню.
  2. В модуле управляемого приложения при запуске устанавливаем режим окна и открываем эту форму.
  3. На самой форме размещаем элементы: «Дерево значений» для навигации или «Группы кнопок» для быстрого доступа.

Выясним, как программно переключать пользователя в такой режим:


// В процедуре ПриНачалеРаботыСистемы
КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОсновногоОкнаКлиентскогоПриложения.ВстроенноеРабочееМесто);
ОткрытьФорму("Обработка.РабочийСтолМенеджера.Форма.ОсновнаяФорма");

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

Метод 3. Структурирование «Избранного» через иерархию

Поскольку стандартное «Избранное» не имеет папок, мы можем имитировать структуру. Проанализируем ситуацию: пользователь хочет видеть дерево, а система дает список. Мы можем создать форму, которая будет считывать данные из хранилища ИзбранноеРаботыПользователя, но отображать их в иерархическом виде.

Посмотрим на алгоритм реализации:

  1. Создаем справочник или регистр сведений «НастройкиНавигации», где храним ссылки и их принадлежность к группам (папкам).
  2. На главной форме выводим дерево.
  3. При нажатии на узел дерева получаем навигационную ссылку и выполняем переход.

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

Метод 4. Веб-технологии (HTML-панели) на рабочем столе

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

На форме 1С размещается реквизит с типом Строка и видом Поле HTML документа. В него загружается макет. Чтобы 1С реагировала на нажатия кнопок в HTML, используйте механизм обработки событий:


&НаКлиенте
Процедура ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    // ДанныеСобытия содержат ID нажатой кнопки или гиперссылку
    Если ДанныеСобытия.Element.id = "open_sales" Тогда
        ОткрытьФорму("Справочник.Контрагенты.ФормаСписка");
    КонецЕсли;
КонецПроцедуры

Этот подход требует знаний верстки, но обеспечивает максимальный уровень кастомизации интерфейса, сравнимый с веб-порталами.

Итоги и рекомендации

Выбор метода зависит от ваших задач. Если нужно просто убрать лишнее — используйте НастройкиИнтерфейсаКлиентскогоПриложения. Если требуется создать полноценный рабочий стол с уникальной логикой — выбирайте режим встроенного рабочего места (АРМ). Сочетание этих методов позволяет превратить стандартный интерфейс 1С в гибкий инструмент, адаптированный под конкретные бизнес-процессы предприятия.

← На главную