Панель навигации в 1С: настройка штатными средствами и код для своей формы

· 9 мин

Содержание

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

Если нужно, чтобы в карточке контрагента появились ссылки на связанные списки, или чтобы у пользователя на рабочем месте был набор кнопок быстрого перехода, начинайте со штатных средств. Код нужен, когда набор кнопок зависит от условий: роли, данных, состояния документа.

Всё ниже относится к 1С 8.3 с интерфейсом «Такси» и управляемыми формами. Обычные формы и интерфейс 8.2 не рассматриваются.

Какую панель вы на самом деле хотите

Прежде чем открывать Конфигуратор, определитесь, какая из трёх панелей решает вашу задачу.

Что нужноГде живётНужен ли код
Ссылки на связанные списки в карточке справочника или документаПанель навигации формыНет
Перестроить разделы и команды приложенияПодсистемы, командный интерфейсНет
Свои кнопки на форме, меняющиеся по условиямГруппа элементов формыДа
Пользователь хочет скрыть лишнее у себяНастройка навигации в рабочем режимеНет

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

Штатная панель навигации формы без программирования

Откройте нужную форму в Конфигураторе. В редакторе формы есть закладка Командный интерфейс. В ней два блока: панель навигации и командная панель.

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

  1. Откройте закладку Командный интерфейс в редакторе формы.
  2. В блоке панели навигации найдите команду, которую нужно показать или спрятать.
  3. Поставьте или снимите флаг видимости.
  4. Раздвиньте команды по группам: «Важное», «Обычное», «См. также». Важное показывается в первую очередь.
  5. Сохраните форму и откройте её в режиме 1С:Предприятие.

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

Правки в Конфигураторе меняют типовую конфигурацию. На поддержке это означает ручное сопоставление при каждом обновлении. Если конфигурация типовая, делайте доработку расширением.

Что может сделать сам пользователь

В рабочем режиме открыта форма объекта. В меню Ещё формы есть команда изменения формы, а в окне настроек — пункт настройки навигации. Через него пользователь включает и отключает ссылки панели навигации у себя, не трогая конфигурацию. Настройка хранится для пользователя и не влияет на других.

Командный интерфейс подсистем: панель разделов

Верхний уровень навигации, панель разделов, строится из подсистем. Каждая подсистема верхнего уровня — это раздел. Поведение настраивается так:

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

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

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

Собственная панель кнопок: создание программно

Теперь случай, когда нужна своя панель. Идея простая: в форме есть пустая группа-контейнер, а кнопки с командами добавляются в неё при открытии формы.

Подготовка в Конфигураторе:

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

Пример. Нужно вывести три кнопки: список номенклатуры, список контрагентов, и документ по условию.

&НаСервере
Процедура СоздатьПанельНаСервере()

	Группа = Элементы.ПанельБыстрогоДоступа;

	Описания = Новый Массив;
	Описания.Добавить(Новый Структура("Имя, Заголовок, Действие",
		"Кнопка_Номенклатура", "Номенклатура", "ОткрытьНоменклатуру"));
	Описания.Добавить(Новый Структура("Имя, Заголовок, Действие",
		"Кнопка_Контрагенты", "Контрагенты", "ОткрытьКонтрагентов"));

	Для Каждого Описание Из Описания Цикл

		Команда = Команды.Добавить("Команда_" + Описание.Имя);
		Команда.Действие = Описание.Действие;
		Команда.Заголовок = Описание.Заголовок;

		Кнопка = Элементы.Добавить(Описание.Имя, Тип("КнопкаФормы"), Группа);
		Кнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
		Кнопка.ИмяКоманды = Команда.Имя;
		Кнопка.Заголовок = Описание.Заголовок;

	КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	СоздатьПанельНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьНоменклатуру(Команда)
	ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьКонтрагентов(Команда)
	ОткрытьФорму("Справочник.Контрагенты.ФормаСписка");
КонецПроцедуры

Что здесь важно:

  • Команды и элементы формы добавляются на сервере, в ПриСозданииНаСервере. На клиенте такого не сделать.
  • Обработчик команды — клиентская процедура в модуле формы. Её имя указывается в Действие строкой.
  • Имена элементов и команд уникальны в пределах формы. Если генерируете в цикле, собирайте имя из префикса и ключа.

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

Переход не только по форме, но и по ссылке

Вместо ОткрытьФорму можно использовать навигационные ссылки. Для списка справочника это строка вида e1cib/list/Справочник.Номенклатура, которую передают в ПерейтиПоНавигационнойСсылке. Ссылки удобно хранить в таблице значений или в регистре сведений: тогда набор кнопок меняется данными, а не кодом.

Панель, которая зависит от роли

Типовая задача: кладовщику показать кнопки склада, бухгалтеру — кнопки учёта. Не вписывайте в код имена пользователей: они меняются, а код остаётся. Проверяйте право на объект.

  1. В ПриСозданииНаСервере для каждого кандидата на кнопку вызовите проверку права на просмотр объекта метаданных, например ПравоДоступа("Просмотр", Метаданные.Справочники.Номенклатура).
  2. Если права нет, кнопку не добавляйте вовсе.
  3. Проверьте результат под учётной записью с нужной ролью, а не под администратором: у администратора есть всё, и ошибка в условии останется незамеченной.

Так панель сама подстроится под новые роли, и вам не придётся править код при каждом переводе сотрудника.

Порядок и подписи кнопок

Кнопки выстраиваются в порядке добавления. Если нужна другая очерёдность, меняйте порядок в массиве описаний, а не переставляйте элементы после создания. Подписи делайте глагольными или предметными, но одного стиля: «Номенклатура», «Контрагенты», «Договоры». Смесь «Открыть список» и «Контрагенты» в одном ряду читается плохо.

Перед выкладкой своей панели
Выполнено: 0 / 4

Гибридный подход: штатная панель плюс небольшой код

На практике редко нужен чистый код или чистая настройка. Рабочая схема такая:

  1. Всё, что постоянно и одинаково для всех, делаете штатно: команды панели навигации, подсистемы, видимость по ролям.
  2. Динамическую часть, которая меняется по условиям, выносите в одну группу на форме и наполняете программно.
  3. Условия прав берёте из метода ПравоДоступа (на сервере) или из ролей, а не из жёстко прописанных имён пользователей.

Так вы получаете меньше кода, а значит меньше падений после обновления платформы или конфигурации. Каждая строка собственной панели — это то, что вам придётся сопровождать.

Ещё одно практическое правило: если кнопка нужна только администратору, не создавайте её для всех и не прячете. Просто не добавляйте. Скрытая кнопка остаётся в форме, её видно в настройках и она же держит ресурсы.

Быстродействие панели

Собственная панель ничего не стоит, пока вы не нагрузили её сервером. Типичные источники тормозов:

  • Запрос к базе в ПриСозданииНаСервере ради того, чтобы решить, показывать ли кнопку. Если проверка нужна, сделайте один запрос на всю панель, а не по запросу на кнопку.
  • Десятки кнопок, созданных в цикле без нужды. Каждый элемент формы передаётся клиенту. Если кнопок больше десяти-пятнадцати, подумайте о выпадающей группе или об отдельной форме со списком.
  • Серверный вызов в обработчике кнопки только ради открытия формы. ОткрытьФорму работает на клиенте, лишний вызов сервера не нужен.
  • Пересоздание панели при каждом изменении данных формы. Создавайте один раз при открытии. Если состав меняется, меняйте видимость уже созданных элементов, а не удаляйте и добавляйте заново.

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

Если панель нужна на мобильных устройствах

Мобильный клиент 1С ограничивает панель: места мало, а попасть пальцем в мелкую кнопку трудно. Что учитывать:

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

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

Типичные ошибки

Диагностика: выберите симптом

Как связать панель с остальным интерфейсом

Панель не живёт сама по себе. Несколько приёмов, чтобы она встроилась:

  • Начальная страница. Если нужна панель быстрого доступа сразу при входе, её размещают в форме на начальной странице. Состав форм начальной страницы настраивается в конфигурации и пользователем.
  • Контекст объекта. Передавайте в открываемую форму параметры отбора, чтобы кнопка «Заказы клиента» открывала не весь список, а заказы текущего контрагента. Для этого в вызов ОткрытьФорму передаётся структура параметров, а в форме списка отбор применяется при создании.
  • Закладки и избранное. Пользователю не нужна ваша панель, если ему достаточно избранного. Он добавляет часто используемые формы в «Избранное» сам.
  • Подсистемы. Если панель дублирует то, что уже есть в разделе, она лишняя. Проверьте, нельзя ли решить задачу переносом команды в нужную подсистему.
Можно ли создать панель навигации без программирования?
Да. Штатная панель навигации формы и панель разделов настраиваются в Конфигураторе в закладке «Командный интерфейс» и в командном интерфейсе подсистем. Код нужен только для динамических кнопок.
Где в форме добавить кнопки программно, в клиентской или серверной процедуре?
Элементы и команды формы добавляются на сервере, обычно в ПриСозданииНаСервере. Обработчик нажатия работает на клиенте.
Пользователь может сам убрать ссылки из панели навигации?
Может. В рабочем режиме форму можно изменить через меню «Ещё», настройка навигации сохраняется для этого пользователя и не затрагивает остальных.
Можно ли скрыть команду от части пользователей?
Да, через видимость по ролям в командном интерфейсе или через права доступа к объекту. Если права на объект нет, команда не покажется.
Почему доработка панели пропала после обновления?
Правки в типовой форме затираются при обновлении. Делайте доработку в расширении конфигурации.
Сколько кнопок допустимо в собственной панели?
Жёсткого лимита нет, но после десяти-пятнадцати кнопок форма становится тяжёлой и неудобной. Группируйте или выносите часть в отдельную форму.