Вход | Регистрация
 

Гуру тест №10. Создать Тип("ПеречислимыеСвойстваОбъектовМетаданных.РежимСовместимости")

Гуру тест №10. Создать Тип("ПеречислимыеСвойстваОбъектовМетаданных.РежимСовместимости")
Я
   TormozIT
 
25.03.21 - 12:15
Есть в метаданных перечисление Метаданные.СвойстваОбъектов.РежимСовместимости. У него есть тип "ПеречислимыеСвойстваОбъектовМетаданных.РежимСовместимости".
Как создать значение типа Тип с таким именем? Проще говоря, что нужно передать в функцию Тип(?), чтобы получить то же значение, что возвращает ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)?
   PR
 
1 - 25.03.21 - 12:20
(0) Тип("СвойстваОбъектов.РежимСовместимости"), не?
   TormozIT
 
2 - 25.03.21 - 12:22
(1) Мимо
   azernot
 
3 - 25.03.21 - 12:30
Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать
   TormozIT
 
4 - 25.03.21 - 12:32
(3) Ловко ты меня процитировал. Молодец.
   azernot
 
5 - 25.03.21 - 12:36
(4) Пардон. Писатель, не читатель :)
   polosov
 
6 - 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 Тогда
   TormozIT
 
7 - 25.03.21 - 12:39
У меня задача как всегда очень универсальная - получить по имени типа значение типа. А в этой теме я дал частную формулировку для облегчения восприятия.
   polosov
 
8 - 25.03.21 - 12:50
(7) Тип("ПеречислимоеСвойствоОбъектовМетаданных") = ТипЗнч( Метаданные.СвойстваОбъектов.РежимСовместимости)
   Fragster
 
9 - 25.03.21 - 12:51
(7) там конструктора нет, так что не получится. И сериализатор не жрёт :(
   polosov
 
10 - 25.03.21 - 12:53
(7) А с режимом совместимости так не прокатит.
   TormozIT
 
11 - 25.03.21 - 12:57
(8) Ну я же в (0) описал что тип нужен для значения перечисления, а не самого перечисления. ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)
   polosov
 
12 - 25.03.21 - 13:00
(11) А ты для обычного перечисления можешь тип получить по строковому представлению типа?
   polosov
 
13 - 25.03.21 - 13:00
(12) *Для значения обычного перечисления.
   TormozIT
 
14 - 25.03.21 - 13:04
(12) Если ты про обычное системное перечисление (например ТипУзлаXML), то по имени перечисления можно получить оба типа - тип перечисления и тип значения перечисления.
   polosov
 
15 - 25.03.21 - 13:09
(14) Ты про это?
ТипЗнч(ТипУзлаXML.Ничего) = Тип("ТипУзлаXML") И ТипЗнч(ТипУзлаXML.Атрибут) = Тип("ТипУзлаXML")
   polosov
 
16 - 25.03.21 - 13:10
+(15) = Истина
   polosov
 
17 - 25.03.21 - 13:19
Как-то так:
    А = Новый Массив;
    А.Добавить(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1));
    А.Добавить(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13));
    А.Добавить(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать));
    //И т.д.

    
    Б = Новый ОписаниеТипов(А);
    
    Результат = Б.СодержитТип(ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать));
   RomanYS
 
18 - 25.03.21 - 13:21
(17) Зачем добавлять 3 одинаковых типа?
   polosov
 
19 - 25.03.21 - 13:23
(18) Нда, точно. Повелся на размышления ТС, что якобы у значений перечислений могут быть разные типы.
   CHerypga
 
20 - 25.03.21 - 13:24
(7) если по имени получить значение, то имя типа можно разбить на нужные куски и задача будет совсем не похожа на изначально поставленную
Тип = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ТипЗнч(Метаданные["СвойстваОбъектов"]["РежимСовместимости"]["НеИспользовать"])));
   RomanYS
 
21 - 25.03.21 - 13:30
(20) ))
Чем это лучше ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)?
   TormozIT
 
22 - 25.03.21 - 13:32
(19) Такого я не утверждал. У значений одного перечисления типы одинаковые. Но тип перечисления отличается от типа своих значений, т.е. ТипЗнч(ТипУзлаXML) <> ТипЗнч(ТипУзлаXML.Ничего)
   CHerypga
 
23 - 25.03.21 - 13:41
(21) пафоса чуточку больше
в (0) там где "проще говоря" для функции Тип("") не такой строки, с которой она бы вернула то же самое что и ТипЗнч(Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать)
а если постановка как в (7) разбираем строку на нужные куски и делаем ТипЗнч(Метаданные["СвойстваОбъектов"]["РежимСовместимости"]["НеИспользовать"])
   RomanYS
 
24 - 25.03.21 - 14:02
(23) Если такой строки не существует, надо просто сказать ТСу, но он возможно будет спорить и требовать доказательств :)).
   CHerypga
 
25 - 25.03.21 - 14:10
(24) отрицание недоказуемо, доказать можно только утверждение
   TormozIT
 
26 - 25.03.21 - 14:12
У меня есть имя типа перечисления, но нет имени значения перечисления.
   polosov
 
27 - 25.03.21 - 14:26
   CHerypga
 
28 - 25.03.21 - 14:27
(26) тогда из имени типа собираем Метаданные["СвойстваОбъектов"]["РежимСовместимости"] затем делаем то, что делается по нажатию Ctrl+Space в консоли кода и берём оттуда


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.