|
Гуру тест №10. Создать Тип("ПеречислимыеСвойстваОбъектовМетаданных.РежимСовместимости") | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
25.03.21
✎
12:15
|
Есть в метаданных перечисление Метаданные.СвойстваОбъектов.РежимСовместимости. У него есть тип "ПеречислимыеСвойстваОбъектовМетаданных.РежимСовместимости".
Как создать значение типа Тип с таким именем? Проще говоря, что нужно передать в функцию Тип(?), чтобы получить то же значение, что возвращает ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)? |
|||
1
PR
25.03.21
✎
12:20
|
(0) Тип("СвойстваОбъектов.РежимСовместимости"), не?
|
|||
2
TormozIT
гуру
25.03.21
✎
12:22
|
(1) Мимо
|
|||
3
azernot
25.03.21
✎
12:30
|
Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать
|
|||
4
TormozIT
гуру
25.03.21
✎
12:32
|
(3) Ловко ты меня процитировал. Молодец.
|
|||
5
azernot
25.03.21
✎
12:36
|
(4) Пардон. Писатель, не читатель :)
|
|||
6
polosov
25.03.21
✎
12:37
|
(0) Ты не эту задачу случайно пытаешься решить?
Режимы = Метаданные.СвойстваОбъектов.РежимСовместимости; ТекущийРежим = Метаданные.РежимСовместимости; ПоддерживаемаяВерсияПлатформы = "8.3.12"; ВерсияПлатформы = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); Если ТекущийРежим = Режимы.НеИспользовать Тогда Если ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(ВерсияПлатформы, ПоддерживаемаяВерсияПлатформы) = 0 Тогда НеПоддерживаемаяВерсияПлатформы = ""; Иначе НеПоддерживаемаяВерсияПлатформы = ВерсияПлатформы; КонецЕсли; ИначеЕсли ТекущийРежим = Режимы.Версия8_1 Тогда НеПоддерживаемаяВерсияПлатформы = "8.1" ИначеЕсли ТекущийРежим = Режимы.Версия8_2_13 Тогда НеПоддерживаемаяВерсияПлатформы = "8.2.13" ИначеЕсли ТекущийРежим = Режимы.Версия8_2_16 Тогда НеПоддерживаемаяВерсияПлатформы = "8.2.16"; ИначеЕсли ТекущийРежим = Режимы.Версия8_3_1 Тогда НеПоддерживаемаяВерсияПлатформы = "8.3.1"; ИначеЕсли ТекущийРежим = Режимы.Версия8_3_2 Тогда |
|||
7
TormozIT
гуру
25.03.21
✎
12:39
|
У меня задача как всегда очень универсальная - получить по имени типа значение типа. А в этой теме я дал частную формулировку для облегчения восприятия.
|
|||
8
polosov
25.03.21
✎
12:50
|
(7) Тип("ПеречислимоеСвойствоОбъектовМетаданных") = ТипЗнч( Метаданные.СвойстваОбъектов.РежимСовместимости)
|
|||
9
Fragster
гуру
25.03.21
✎
12:51
|
(7) там конструктора нет, так что не получится. И сериализатор не жрёт :(
|
|||
10
polosov
25.03.21
✎
12:53
|
(7) А с режимом совместимости так не прокатит.
|
|||
11
TormozIT
гуру
25.03.21
✎
12:57
|
(8) Ну я же в (0) описал что тип нужен для значения перечисления, а не самого перечисления. ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)
|
|||
12
polosov
25.03.21
✎
13:00
|
(11) А ты для обычного перечисления можешь тип получить по строковому представлению типа?
|
|||
13
polosov
25.03.21
✎
13:00
|
(12) *Для значения обычного перечисления.
|
|||
14
TormozIT
гуру
25.03.21
✎
13:04
|
(12) Если ты про обычное системное перечисление (например ТипУзлаXML), то по имени перечисления можно получить оба типа - тип перечисления и тип значения перечисления.
|
|||
15
polosov
25.03.21
✎
13:09
|
(14) Ты про это?
ТипЗнч(ТипУзлаXML.Ничего) = Тип("ТипУзлаXML") И ТипЗнч(ТипУзлаXML.Атрибут) = Тип("ТипУзлаXML") |
|||
16
polosov
25.03.21
✎
13:10
|
+(15) = Истина
|
|||
17
polosov
25.03.21
✎
13:19
|
Как-то так:
А = Новый Массив; А.Добавить(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1)); А.Добавить(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13)); А.Добавить(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)); //И т.д. Б = Новый ОписаниеТипов(А); Результат = Б.СодержитТип(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)); |
|||
18
RomanYS
25.03.21
✎
13:21
|
(17) Зачем добавлять 3 одинаковых типа?
|
|||
19
polosov
25.03.21
✎
13:23
|
(18) Нда, точно. Повелся на размышления ТС, что якобы у значений перечислений могут быть разные типы.
|
|||
20
CHerypga
25.03.21
✎
13:24
|
(7) если по имени получить значение, то имя типа можно разбить на нужные куски и задача будет совсем не похожа на изначально поставленную
Тип = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ТипЗнч(Метаданные["СвойстваОбъектов"]["РежимСовместимости"]["НеИспользовать"]))); |
|||
21
RomanYS
25.03.21
✎
13:30
|
(20) ))
Чем это лучше ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)? |
|||
22
TormozIT
гуру
25.03.21
✎
13:32
|
(19) Такого я не утверждал. У значений одного перечисления типы одинаковые. Но тип перечисления отличается от типа своих значений, т.е. ТипЗнч(ТипУзлаXML) <> ТипЗнч(ТипУзлаXML.Ничего)
|
|||
23
CHerypga
25.03.21
✎
13:41
|
(21) пафоса чуточку больше
в (0) там где "проще говоря" для функции Тип("") не такой строки, с которой она бы вернула то же самое что и ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать) а если постановка как в (7) разбираем строку на нужные куски и делаем ТипЗнч(Метаданные["СвойстваОбъектов"]["РежимСовместимости"]["НеИспользовать"]) |
|||
24
RomanYS
25.03.21
✎
14:02
|
(23) Если такой строки не существует, надо просто сказать ТСу, но он возможно будет спорить и требовать доказательств :)).
|
|||
25
CHerypga
25.03.21
✎
14:10
|
(24) отрицание недоказуемо, доказать можно только утверждение
|
|||
26
TormozIT
гуру
25.03.21
✎
14:12
|
У меня есть имя типа перечисления, но нет имени значения перечисления.
|
|||
27
polosov
25.03.21
✎
14:26
|
||||
28
CHerypga
25.03.21
✎
14:27
|
(26) тогда из имени типа собираем Метаданные["СвойстваОбъектов"]["РежимСовместимости"] затем делаем то, что делается по нажатию Ctrl+Space в консоли кода и берём оттуда
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |