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

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 Ответить
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)