Имя: Пароль:
1C
 
Гуру тест №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 в консоли кода и берём оттуда