Сравнение типов данных

Дайнеко

Well-known member
19.11.2009
951
0
#1
Пишу проверку на принадлежность объекта к Перечислениям. Ошибку не выдает, но не срабатывает.
Код:
Парам = Перечисления.ВидыЧегото.Вариант1;
Сообщить(ТипЗнч(Парам)); // пишет "Вариант1"
Описание = Новый ОписаниеТипов("ПеречисленияМенеджер");
Если Описание.СодержитТип(ТипЗнч(Парам)) Тогда
Сообщить("+");
Иначе
Сообщить("-");
КонецЕсли;
Уж и за окном темно..
 

Дайнеко

Well-known member
19.11.2009
951
0
#4
Парам не ПеречислениеМенеджер, а ПеречислениеСсылка.ВидыЧегоТо
Спасибо, это я так смогу. Но у меня задача написать функцию проверяющую принадлежность объекта вообще к классу Перечисления.
Вернуть строчечкой его имя. Строка(Объект) почти то, но не то.
А какого он вида - не требуется, да и вид не известен.

Код:
Объект = Перечисления.ВидыЧегото.Вариант1;
Сообщить(ДостатьИдентификаторПеречисления(Объект));

Функция ДостатьИдентификаторПеречисления(Парам)
// В 7.7 делал так
Если	ТипЗначения(Парам) = 10	Тогда	//	Перечисление
Возврат П_Парам.Идентификатор();
КонецФункции
 

unknown181538

НеГуру
28.12.2008
1 417
0
#5
А вот скажем если:
1) Получить строковое представление типа. И если слева от точки "ПеречислениеСсылка", то далее - имя перечисления.
2) Каким-то образом перебрать метаданные перечислений, поместить типы в массив, и искать вхождение в массиве....
Но, возможно, есть и более простое решение...
 

Дайнеко

Well-known member
19.11.2009
951
0
#6
Спасибо.
По первому варианту я и пытался. Вот результат такой:
Парам.Метаданные().Представление() выдает "ВидыЧегото". (Правильнее "Парам.Метаданные().Имя" , без синонима).
Нету слова "Перечисления".

Второй вариант наверное сработает. Но уж больно мудро это. По...


Стоп!
Пока писал и проверял, нашел:
Парам.Метаданные().ПолноеИмя() выдает "Перечисление.ВидыЧегото"

Пойми правильно, ломаю голову, не столько ради просто решения, сколько чтобы разобраться. Да и решение должно быть красивым.


P.S.
Еще через 10 мин:
Вот оно правильное решение: Перечисления.ТипВсеСсылки ().СодержитТип(ТипЗнч(Парам))