Доработка типовой функции ЭтоСсылка для новых объектов в расширении

1. gimmy 23 18.12.19 11:56 Сейчас в теме
Т.к. метод ТипВсеСсылки() не содержит типов новых объектов созданных в расширении, то пришлось доработать типовую функцию ЭтоСсылка
Вот код типовой функции
// Проверка того, что переданный тип является ссылочным типом данных.
// Для типа "Неопределено" возвращается Ложь.
//
// Параметры:
//  ПроверяемыйТип - Тип - для проверки на тип ссылка.
//
// Возвращаемое значение:
//  Булево - Истина, если это ссылка.
//
Функция ЭтоСсылка(ПроверяемыйТип) Экспорт
	
	Возврат ПроверяемыйТип <> Тип("Неопределено") 
		И (Справочники.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ Документы.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ Перечисления.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ ПланыСчетов.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ БизнесПроцессы.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(ПроверяемыйТип)
		ИЛИ Задачи.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)
		ИЛИ ПланыОбмена.ТипВсеСсылки().СодержитТип(ПроверяемыйТип));
	
КонецФункции
Показать


Вот код доработки этой функции в расширении

&Вместо("ЭтоСсылка")
Функция расш_ЭтоСсылка(ПроверяемыйТип)
	// Вставить содержимое метода.
	Результат = ПродолжитьВызов(ПроверяемыйТип);
	Если Не Результат Тогда
		//т.к. ТипВсеСсылки() не содержит в себе типы новых объектов в расширении
		ОбъектМетаданных = Метаданные.НайтиПоТипу(ПроверяемыйТип);
		Если ОбъектМетаданных=Неопределено Тогда
			Результат = Ложь; 
		Иначе
			ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
			МассивСтрок = СтрРазделить(ПолноеИмя, ".");
			Если МассивСтрок.Количество() >= 2 Тогда
				Вид = ВРег(МассивСтрок[0]);
				Имя = МассивСтрок[1];
			Иначе
				Возврат Ложь;
			КонецЕсли;
			Результат = ПроверяемыйТип=Тип(Вид+"Ссылка."+Имя);
		КонецЕсли; 
	КонецЕсли; 
	Возврат Результат;
КонецФункции
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 18.12.19 14:47 Сейчас в теме
Кажется, что функция получилась не очень надежной из-за строки:
Тип(Вид+"Ссылка."+Имя)
Как минимум стоит обернуть ее в Попытку-Исключение, иначе будет сгенерировано исключение при проверке, например, следующего типа:
Тип("РегистрСведенийНаборЗаписей.АдресныеОбъекты")
3. gimmy 23 18.12.19 20:42 Сейчас в теме
(2) поправил
&Вместо("ЭтоСсылка")
Функция расш_ЭтоСсылка(ПроверяемыйТип)
	Результат = ПродолжитьВызов(ПроверяемыйТип);
	Если Не Результат Тогда
		//т.к. ТипВсеСсылки() не содержит в себе типы новых объектов в расширении
		ОбъектМетаданных = Метаданные.НайтиПоТипу(ПроверяемыйТип);
		Если ОбъектМетаданных=Неопределено Тогда
			Результат = Ложь; 
		Иначе
			ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
			МассивСтрок = СтрРазделить(ПолноеИмя, ".");
			Если МассивСтрок.Количество() >= 2 Тогда
				Вид = ВРег(МассивСтрок[0]);
				Имя = МассивСтрок[1];
			Иначе
				Возврат Ложь;
			КонецЕсли;
			Если Вид="СПРАВОЧНИК"
				ИЛИ Вид="ДОКУМЕНТ"
				ИЛИ Вид="ПЕРЕЧИСЛЕНИЕ" 
				ИЛИ Вид="ПЛАНВИДОВХАРАКТЕРИСТИК" 
				ИЛИ Вид="ПЛАНСЧЕТОВ" 
				ИЛИ Вид="ПЛАНВИДОВРАСЧЕТА" 
				ИЛИ Вид="БИЗНЕСПРОЦЕСС" 
				ИЛИ Вид="ЗАДАЧА" 
				ИЛИ Вид="ПЛАНОБМЕНА" 
				Тогда
			    Результат = ПроверяемыйТип=Тип(Вид+"Ссылка."+Имя);
			Иначе
				Результат = Ложь; 
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли; 
	Возврат Результат;
КонецФункции
Показать
mevgenym; AD21; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот