новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Навигационная ссылка в обычном приложении

  • Добавить свою публикацию
  • для этого требуется регистрация

Навигационная ссылка

С появлением версии платформы 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Объекта);			    
		ОткрытьЗначение(ПолученнаяСсылка);	    
	КонецЕсли;			 	 
КонецПроцедуры

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

Как это использовать

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

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

Обработка с примером из статьи.

 
0
Еще от автора
≡ к списку статей