Получить значение перечисления 1С

Получить значение перечисления 1С

ИмяПеречисления = СсылкаНаПеречисление.Метаданные().Имя;

КоличествоЗначенийПеречисления=Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.Количество();

КолекцияЗначенийПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления;
ИндексЗначенияПеречисления=Перечисления[ИмяПеречисления].Индекс(СсылкаНаПеречисление);

ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя
Перебор коллекции значений перечисления
Для каждого знач из КолекцияЗначенийПеречисления Цикл
    Сообщить(знач.Имя);
КонецЦикла;
ПредставлениеПеречисления=Строка(СсылкаНаПеречисление); //синоним

полезной будет функция:

Функция ПолучитьИмяЗначенияПеречисления(Ссылка) Экспорт

ИмяПеречисления = Ссылка.Метаданные().Имя;
Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка);

Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя;

КонецФункции // ПолучитьИмяЗначенияПеречисления()

альтернативный способ получения имени значения перечисления:

ИмяЗначенияПеречисления = XMLстрока(СсылкаНаПеречисление);

Полезный прием для работы с перечислениями при COM соединении с другой ИБ 8.0 (например при обмене данных):

надо передать ссылку на перечисление:
Здесь
V8 – COM объект “V8.Application” – ИБ внешнего соединения
СсылкаНаПеречислениеCOM – COM объект – ссылка на перечисление в ИБ внешнего соединения

ИмяЗначенияПеречисленияCOM= V8.XMLString(СсылкаНаПеречислениеCOM);
ПредставлениеПеречисленияCOM= V8.String(СсылкаНаПеречислениеCOM); //синоним
ИмяПеречисленияCOM= СсылкаНаПеречислениеCOM.Метаданные().Имя;
СсылкаНаПеречисление = XMLЗначение(Тип(“ПеречислениеСсылка.”+ИмяПеречисленияCOM),ИмяЗначенияПеречисленияCOM);

 

разумеется имена перечислений в обоих базах должны быть идентичными.

Пример получения значений перечисления запросом

  
   Запрос=новый запрос;
   запрос.Текст=”ВЫБРАТЬ
            |    ВидыОС.Ссылка,
            |    ВидыОС.Порядок КАК Индекс
            |ИЗ
            |    Перечисление.ВидыОС КАК ВидыОС”;
   Выборка=Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() цикл
     Сообщить(“”+Выборка.ссылка+” : “+Выборка.индекс);
   конецЦикла;   

 

Пример для отбора на стороне COMсервера:

    Отбор = v8.Новый (“Структура”);
    МД=v8.XMLTypeOf(v8.Перечисления[ИмяПеречисления].ПустаяСсылка());
    Отбор.Вставить(“ВидДоговора”, v8.XMLЗначение(v8.FromXMLType(МД),ИмяЗначенияПеречисления));