Функция определяет существование метода объекта
// Функция определяет существование метода объекта
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/56
//
// Параметры:
// Объект - Произвольный
// ИмяМетода - Строка
//
// Возвращаемое значение:
// Булево - Существует ли метод объекта
Функция МетодСуществует(Знач Объект, Знач ИмяМетода) Экспорт
ШаблонКода = "Объект.%1(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)";
Алгоритм = СтрШаблон(ШаблонКода, ИмяМетода);
Попытка
//@skip-check server-execution-safe-mode, module-unused-local-variable
НеобработанныйРезультат = Вычислить(Алгоритм);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Значение не является значением объектного типа") Тогда
Возврат Ложь;
ИначеЕсли ИнформацияОбОшибке.Описание = "Слишком много фактических параметров" Тогда
Возврат Истина;
ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Обращение к процедуре объекта как к функции") Тогда
Возврат Истина;
ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Метод объекта не обнаружен") Тогда
Возврат Ложь;
Иначе
НеобработанныйРезультат = ИнформацияОбОшибке.Описание;
КонецЕсли;
КонецПопытки;
//На всякий случай
ТекстИсключения = "Проверяемый метод ""%1"" объекта ""%2"" типа ""%3"" содержит неопределенное число параметров и не может быть проверен!
|Результат выполнения: %4";
ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяМетода, Объект, ТипЗнч(Объект), НеобработанныйРезультат);
ВызватьИсключение ТекстИсключения;
КонецФункции