Периодически приходится делать ветвление в модуле в зависимости от типа переданного объекта. С учетом возможности получения объекта как объектом так и ссылкой это вырастает в некрасивые
Если ТипЗнч(Основание) = Тип("ДокументСсылка.Документ1")
или ТипЗнч(Основание) = Тип("ДокументОбъект.Документ1") Тогда
В поисках красивого кода и оптимизации решил замерить, что лучше - ТипЗнч или Метаданные - ведь для метаданных сравнений меньше - метаданные одинаковы как у ссылки, так и у объекта.
Простой модуль (лентяи могут скачать обработку):
Процедура КнопкаВыполнитьНажатие(Кнопка)
//массив имен справочников
МасМД = Новый Массив;
Для Каждого мдСпр из Метаданные.Справочники Цикл
МасМД.Добавить(мдСпр.Имя)
КонецЦикла;
// проверочный объект и его трансформации
Объект = Справочники[МасМД[0]].ПустаяСсылка();
МД = Объект.Метаданные();
ТипОб = ТипЗнч(Объект);
// цикл по метаданным
Сообщить(ТекущаяДата()+" 1");
Для Каждого мдСпр из МасМД Цикл
Если МД = Метаданные.Справочники[мдСпр] Тогда
а = "Да"
Иначе
а = "Нет"
КонецЕсли;
КонецЦикла;
Сообщить(ТекущаяДата()+" 2");
// цикл по типам
Сообщить(ТекущаяДата()+" 3");
Для Каждого мдСпр из МасМД Цикл
Если ТипОб = Тип("СправочникОбъект."+мдСпр) или ТипОб = Тип("СправочникСсылка."+мдСпр) Тогда
а = "Да"
Иначе
а = "Нет"
КонецЕсли;
КонецЦикла;
Сообщить(ТекущаяДата()+" 4");
КонецПроцедуры
В результате получилось что получение метаданных медленее на порядок-два. И хотя речь о долях секунд, но всё равно увы...
Проверял на 8.1 и на 8.2