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