|
|
|
Гуру тест №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 в консоли кода и берём оттуда
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |