Как получить значение перечисления в 1С 8.2 — 8.3:
ИмяПеречисления = СсылкаНаПеречисление.Метаданные().Имя; КоличествоЗначенийПеречисления=Метаданные.Перечисления [ИмяПеречисления].ЗначенияПеречисления.Количество(); КолекцияЗначенийПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления; ИндексЗначенияПеречисления=Перечисления[ИмяПеречисления].Индекс (СсылкаНаПеречисление); ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления [ИндексЗначенияПеречисления].Имя Перебор коллекции значений перечисления Для каждого знач из КолекцияЗначенийПеречисления Цикл Сообщить(знач.Имя); КонецЦикла; ПредставлениеПеречисления=Строка(СсылкаНаПеречисление); //синоним
полезной будет функция:
Функция ПолучитьИмяЗначенияПеречисления(Ссылка) Экспорт ИмяПеречисления = Ссылка.Метаданные().Имя; Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка); Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя; КонецФункции // ПолучитьИмяЗначенияПеречисления()
Альтернативный способ получения имени значения перечисления:
ИмяЗначенияПеречисления = 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(МД),ИмяЗначенияПеречисления));
Если Вы хотите больше узнать о программировании в 1С, тогда регистрируйтесь на курс: 1С 8.3 Старт >>>