Навигационная ссылка
С появлением версии платформы 1С:Предприятие 8.2 пользователям стала доступна функция передачи ссылок на объекты информационной базы. Теперь пользователь может по электронной почте переслать, например своему коллеге, ссылку на документ, и последний откроет его в пару щелчков. Нам нужно лишь получить ссылку на объект:
Изображение
А пользователь по этой ссылке откроет его уже на своей стороне:
Изображение
Никакого поиска в списке и прочее. Быстро и удобно! Но данный функционал доступен только в управляемом приложении. Сегодня в статье рассмотрим собственную реализацию механизма навигационных ссылок для обычного приложения.
Реализация
Давайте создадим обработку, которая будет создавать некоторое подобие навигационной ссылки для выбранного объекта в информационной базе, но работать будет в обычном приложении. Основная форма обработки показана на следующем скриншоте:
Изображение
Структура метаданных обработки будет состоять из двух реквизитов и непосредственно основной формы. Реквизита будет два:
1) «ОбъектИБ» с типом «Любая ссылка»
2) «СсылкаНаОбъект» с типом «Строка» длинной 255 символов.
Выбрав ссылку на объект информационной базы пользователь нажимает на кнопку «Получить ссылку». В результате будет сформирована строка ссылки на объект, включающая в себя информацию о типе объекта и его GUID для однозначной идентификации и его последующего открытия. На следующем листинге показан программный код обработчика этой кнопки:
Процедура ПолучитьСсылкуНажатие(Элемент)
Если ЗначениеЗаполнено(ОбъектИБ) Тогда
// Получаем полный путь к метаданным объекта
ТипОбъектаИБ = ОбъектИБ.Метаданные().ПолноеИмя();
// Получаем GUID объекта в информационной базе
GUIDОбъектаИБ = ОбъектИБ.УникальныйИдентификатор();
// Формируем строку ссылки как "Путь метаданных + GUID объекта"
СсылкаНаОбъект = Строка(ТипОбъектаИБ) + "__" + GUIDОбъектаИБ;
Иначе
Сообщить("Нужно выбрать объект информационной базы!", СтатусСообщения.ОченьВажное);
КонецЕсли;
КонецПроцедуры
Показать
По сформированной ссылке другой пользователь может открыть объект через эту же обработку. Скопировав текст ссылки в поле «Ссылка на объект» ему будет необходимо нажать на кнопку «Перейти по ссылке». Если ссылка корректная, то будет открыт соответствующий объект. Программный код для этой команды представлен на следующем листинге:
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Ищем разделитель информации о типе объекта и его GUID'е
Разделитель = Найти(СсылкаНаОбъект, "__");
Если Разделитель 0 Тогда
// Парсим путь к метаданным из текста ссылки
МетаданныеОбъекта = Лев(СсылкаНаОбъект, Найти(СсылкаНаОбъект, "__")-1); // Получаем соответствующий менеджер для типа
Если Найти(МетаданныеОбъекта, "Документ") 0 Тогда
Менеджер = Документы;
ИначеЕсли Найти(МетаданныеОбъекта, "Справочник") 0 Тогда
Менеджер = Справочники;
ИначеЕсли Найти(МетаданныеОбъекта, "ПланВидовРасчета") 0 Тогда Менеджер = ПланыВидовРасчета;
ИначеЕсли Найти(МетаданныеОбъекта, "ПланВидовХарактеристик") 0 Тогда Менеджер = ПланыВидовХарактеристик;
ИначеЕсли Найти(МетаданныеОбъекта, "ПланСчетов") 0 Тогда
Менеджер = ПланыСчетов;
ИначеЕсли Найти(МетаданныеОбъекта, "БизнесПроцесс") 0 Тогда Менеджер = БизнесПроцессы;
ИначеЕсли Найти(МетаданныеОбъекта, "Задача") 0 Тогда
Менеджер = Задачи;
КонецЕсли;
// Парсим имя объекта
Имя = Прав(МетаданныеОбъекта, СтрДлина(МетаданныеОбъекта) - Найти(МетаданныеОбъекта, ".")); // Получаем GUID из текста ссылки
GUIDОбъекта = Новый УникальныйИдентификатор(СтрЗаменить(СсылкаНаОбъект, МетаданныеОбъекта+"__", ""));
// По GUID'у получаем ссылку на объект и открываем ее
ПолученнаяСсылка = Менеджер[Имя].ПолучитьСсылку(GUIDОбъекта);
ОткрытьЗначение(ПолученнаяСсылка);
КонецЕсли;
КонецПроцедуры
Показать
Весь смысл команды заключается в парсинге текста ссылки для получения типа объекта и его уникального идентификатора. Затем объект открывается по найденной ссылке.
Как это использовать
Используя принцип, заложенный в тестовой обработке, мы можем встроить, например, в любую конфигурацию команды для получения и открытия подобных навигационных ссылок в формы документов и справочников.
В конечном итоге механизм навигационных ссылок, подобный стандартному в управляемом приложении, мы можем воссоздать и для обычных форм.