Универсальные методы проверки наличия свойства \ метода
Расширить возможности рефлексии в 1С.
Добавить платформенные методы "СвойствоОбъекта()" и "МетодОбъекта()", благодаря которым можно без Попытки проверить, есть ли у переменной нужное свойство или метод. Если есть метод, то какой число входящих параметров и значения по умолчанию.
Для свойства есть разные костыльные способы. Для получения метода только Попытка. И получить описания параметров нельзя.
Пример реализации:
//Проверять существование метода\свойства можно у любого значения.
//У тех типов, которые явно не имеют методов\свойств не должно быть вызова исключения
//Таким образом, мы можем проверять наличие метода\свойства у любой переменной, совершенно не заботясь о её типе.
Если СуществуетМетод(МойОбъект, "Сформировать") Тогда
МойОбъект.Сформировать();
КонецЕсли;
//Ещё лучше так:
ОписаниеМетода = ОписаниеМетода(МойОбъект, "Сформировать");
Если ОписаниеМетода <> Непределено Тогда
ОписаниеМетода.Выполнить();
КонецЕсли;
//А так можно проверить наличие свойства объекта.
//ВладелецСвойства - переменная, теоретически содержащая внешний отчет.
ЗначениеСвойства = Неопределено;
Если СвойствоОбъекта(ВладелецСвойства, "ИспользуемоеИмяФайла", ЗначениеСвойства) Тогда
Сообщить(ЗначениеСвойства);
КонецЕсли;
МояПеременная= "Текст";
//Так можно реализовать поведение методов, чтобы они были универсальными
Сообщить(СвойствоОбъекта(МояПеременная, "ИмяСвойства")) //Ложь
Сообщить(СуществуетМетод(МояПеременная, "ИмяМетода")) //Ложь
Сообщить(ОписаниеМетода(МояПеременная, "ИмяМетода")) //Неопределено
Для свойства есть разные костыльные способы.
Получение типа значения, поиск соответствия в Метаданные и перебор вложенных коллекций (реквизиты, измерения, ресурсы и т.п.) - это не костыль, а канон! ))
Но в целом, согласен, что с такими методами было бы проще. Только я бы не делал их методами глобального контекста, а поместил бы в класс Тип. Как-то так:
ТипПеременной = ТипЗнч(ВходящаяПеременная); Если ТипПеременной.СуществуетМетод("Сформировать") Тогда . . . . ВходящаяПеременная.Сформировать(); КонецЕсли;
Получение типа значения, поиск соответствия в Метаданные и перебор вложенных коллекций (реквизиты, измерения, ресурсы и т.п.) - это не костыль, а канон! ))
Костыльный канон) Ведь мне приходится перебирать несколько возможных коллекций. Реквизиты, СтандартныеРеквизиты, ТабличныеЧасти, Измерения, Ресурсы... И это только в тех, которые относятся к метанаданным. А если это, например, элемент формы? В БСП есть универсальный метод. И он явно костыль =)
Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт
КлючУникальности = Новый УникальныйИдентификатор;
СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
КонецФункции
Отправлено боту 1С 06.04.2021 в 12:36
Вот пример, когда подход БСП упадёт

@SeiOkami предлагаю разбить ишью на 2 разных, т.к. смешиваются 2 разных задачи Задачу по свойству 1С сделать не так сложно, а вот по методам могут быть и проблемы, и нежелание, и проектные решения
отправил сегодня, 21.07.2023, в 1С пожелания про ЗначениеСвойства
отправил сегодня, 21.07.2023, в 1С пожелания
Еще бы кто-то эти пожелания не просто читал, а ставил в бэклог.