Имя: Пароль:
1C
1C 7.7
v7: Обратится к виду перечисления не явно
0 Wefast
 
20.09.19
13:53
У меня в функцию приходит представление значение перечисления и имя перечисления.

Мне нужно получить это значение
//ИдентификаторПеречисления = "ВидыПлатежейВБюджет"
//ПредставлениеЗначения = "Налог такой то". Значение - Налог
Функция ВернутьПеречислениеПоПредставлению(ИдентификаторПеречисления, ПредставлениеЗначения)
    Для i = 1 По Metadata.Перечисление(ИдентификаторПеречисления).Значение() Цикл
        Если Metadata.Перечисление(ИдентификаторПеречисления).Значение(i).Представление = ПредставлениеЗначения Тогда
            зн = Metadata.Перечисление(ИдентификаторПеречисления).Значение(i);
//ТипЗначения(Зн) = 100

            Если Зн = Перечисление.ВидыПлатежейВБюджет.Налог Тогда
                Сообщить("ааааааааа"); // не заходит сюда
            КонецЕсли;
            Возврат зн;
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат ПолучитьПустоеЗначение();
    
КонецФункции

Через метаданные я все нахожу. Но это не ссылка на объект, и я не могу присвоить это значение реквизиту документа
1 Wefast
 
20.09.19
13:53
что то такое придумал:

Функция ВернутьПеречислениеПоПредставлению(ИдентификаторПеречисления, ПредставлениеЗначения)
    Для i = 1 По Metadata.Перечисление(ИдентификаторПеречисления).Значение() Цикл
        Если Metadata.Перечисление(ИдентификаторПеречисления).Значение(i).Представление = ПредставлениеЗначения Тогда
            зн = Metadata.Перечисление(ИдентификаторПеречисления);//.Значение(i);
            
            Пре = Перечисление.ПолучитьАтрибут(Зн);
            
            Для Н = 1 По Пре.КоличествоЗначений() Цикл
                ЗначениеП = Пре.ЗначениеПоНомеру(Н);
                н = Н+1;
                Если Строка(ЗначениеП) = ПредставлениеЗначения Тогда
                    НужноеЗначение = ЗначениеП;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
            
            Возврат НужноеЗначение;
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат ПолучитьПустоеЗначение();
    
КонецФункции


Может есть что то более нормальное?
2 Wefast
 
20.09.19
13:56
Сократил до:

    Вид = Перечисление.ПолучитьАтрибут(ИдентификаторПеречисления);
    Для Н = 1 По Вид.КоличествоЗначений() Цикл
        ЗначениеП = Вид.ЗначениеПоНомеру(Н);
        н = Н+1;
        Если Строка(ЗначениеП) = ПредставлениеЗначения Тогда
        
            Возврат ЗначениеП;
            Прервать;
        КонецЕсли;
    КонецЦикла;  
    
    
    Возврат ПолучитьПустоеЗначение();
3 Wefast
 
20.09.19
14:27
Функция ВернутьПеречислениеПоПредставлению(ИдентификаторПеречисления, ПредставлениеЗначения)
        
    Вид = Перечисление.ПолучитьАтрибут(ИдентификаторПеречисления);
    Для Н = 1 По Вид.КоличествоЗначений() Цикл
        ЗначениеП = Вид.ЗначениеПоНомеру(Н);
        Если Строка(ЗначениеП) = ПредставлениеЗначения Тогда
            Возврат ЗначениеП;
        КонецЕсли;
    КонецЦикла;  
    
    Возврат ПолучитьПустоеЗначение();
    
КонецФункции
4 HawkEye
 
20.09.19
14:45
(3) цикл то зачем?
НужныйЭлементПеречисления = Вид.ЗначениеПоИдентификатору(СокрЛП(ПредставлениеЗначения));
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой