При разработке интерфейсов на управляемых формах 1С часто возникает необходимость открыть форму объекта (например, документа или справочника) не на основной вкладке со свойствами и реквизитами, а сразу переключиться на конкретную команду из панели навигации (например, список банковских счетов, подчиненный регистр или вызов привязанной обработки).
Разберем подробнее, предоставляет ли платформа 1С возможности для управления состоянием командной панели навигации и какими способами можно реализовать требуемое поведение формы.
В управляемом приложении (включая интерфейс «Такси») платформа 1С не предоставляет программного API (методов, свойств или встроенного языка) для переключения или активации конкретных команд на автоформируемой панели навигации формы в момент её открытия.
Метод ПерейтиПоНавигационнойСсылке() позволяет осуществлять переход по URL-ссылке вида e1cib/command/..., однако этот подход имеет существенные недостатки в контексте решаемой задачи:
Рассмотрим практические альтернативные решения, которые позволяют добиться нужного интерфейсного результата.
Если требуется жесткий контроль над переключением разделов формы при её открытии с передачей любых параметров, наиболее надежным решением является отказ от панели навигации в пользу элемента формы типа Группа — Панель или Группа — Страницы.
Посмотрим на алгоритм реализации этого подхода по шагам:
Группа - Страницы (например, ГруппаСтраницыФормы).СтраницаГлавное). Подчиненные данные или формы обработок выносятся на соседние страницы.
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Ключ", СсылкаНаОбъект);
ПараметрыОткрытия.Вставить("ОткрываемаяСтраница", "БанковскиеСчета");
ОткрытьФорму("Справочник.Партнеры.ФормаОбъекта", ПараметрыОткрытия);
4. В событии ПриСозданииНаСервере или ПриОткрытии управляемой формы считывается переданный параметр и задается активная страница:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ОткрываемаяСтраница") Тогда
Если Параметры.ОткрываемаяСтраница = "БанковскиеСчета" Тогда
Элементы.ГруппаСтраницыФормы.ТекущаяСтраница = Элементы.СтраницаБанковскиеСчета;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если вызываемый элемент является отдельной обработкой или отчетом, требующим передачу контекста (ссылки на объект), можно открыть форму этой обработки напрямую методом ОткрытьФорму() и организовать навигацию назад.
Выясним порядок действий:
ПараметрыФормы = Новый Структура("ДокументСсылка", СсылкаНаДокумент);
ОткрытьФорму("Обработка.ИмяОбработки.Форма.Форма", ПараметрыФормы);
2. В командную панель открываемой обработки добавляется кнопка (гиперссылка) «Главное» или «Вернуться к документу». При нажатии на эту кнопку вызывается открытие основной формы документа:
&НаКлиенте
Процедура КомандаГлавное(Команда)
ПараметрыОткрытия = Новый Структура("Ключ", Объект.ДокументСсылка);
ОткрытьФорму("Документ.ИмяДокумента.ФормаОбъекта", ПараметрыОткрытия);
ЭтаФорма.Закрыть();
КонецПроцедуры
В случаях, когда необходимо открыть список подчиненного справочника (например, банковские счета партнера) с возможностью сохранения контекста открытых окон, целесообразно использовать стандартный механизм параметров формы Отбор и КлючУникальности.
Проанализируем пример кода:
&НаКлиенте
Процедура ОткрытьСписокПодчиненных(СсылкаНаВладельца)
СтруктураОтбора = Новый Структура("Владелец", СсылкаНаВладельца);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Отбор", СтруктураОтбора);
// Используем КлючУникальности, чтобы не плодить дубликаты окон
ОткрытьФорму(
"Справочник.БанковскиеСчета.ФормаСписка",
ПараметрыОткрытия,
ЭтотОбъект,
СсылкаНаВладельца
);
КонецПроцедуры
Прямой программный переход по командам встроенной панели навигации при открытии формы в платформе 1С:Предприятие 8.3 неподдерживается. Для решения подобных задач рекомендуется использовать варианты перекомпоновки формы с помощью элемента Группа — Страницы или проектировать явный переход между формами с передачей контекста через параметры открываемой формы.