Понадобилась функция для определения наличия свойства или реквизита у конкретного объекта для самописной конфигурации. В интернете представлено несколько вариантов реализации данного функционала. В различных вариантах подобных функций, представленных в интернете, в структуру помещается или null, или Неопределено и т.п. И затем вызывается метод ЗаполнитьЗначенияСвойств() и проверяется на равенство в структуре на null или Неопределено и т.п. соответственно.
Хочу представить аудитории еще один вариант функции для проверки наличия свойства, в которой в структуру помещается сама эта же структура:
// ЕстьСвойство(Объект, Свойство)
Функция ЕстьСвойство(Объект, Свойство)
Структура = Новый Структура;
Структура.Вставить(Свойство, Структура);
ЗаполнитьЗначенияСвойств(Структура, Объект);
ЕстьСвойство = (Структура[Свойство] <> Структура);
Возврат ЕстьСвойство;
КонецФункции // ЕстьСвойство()
Функция возвращает: Истина - есть свойство с таким именем; ложь - нет свойства с таким именем.
Как это работает:
- Создается структура;
- Структура помещается сама в себя;
- К Структуре применяется ЗаполнитьЗначенияСвойств();
- Смотрим что произошло со Структурой. Если Структура никак не изменилась, значит данного Свойства нет.
Если со Структурой произошли изменения, значит данное Свойство есть.
Все.
Функция тестировалась на платформе 8.3.9.2170.