Имя: Пароль:
1C
1С v8
Как получить все значения перечисления, имея только тип значения?
0 xaozai
 
20.03.14
09:41
Имеется ИмяДокумента из метаданных конфигурации.
У этого документа есть реквизит ВидОперации, типа перечисление.
Нужно заполнить список всеми значениями этого перечисления.
Сделал вот так:
ИмяДокумента = "ПлатежноеПоручениеИсходящее";
Список = Новый СписокЗначений;
Для Каждого Зн Из Метаданные.Документы[ИмяДокумента].Реквизиты["ВидОперации"].Тип.ПривестиЗначение().Метаданные().ЗначенияПеречисления Цикл
    Список.Добавить(Перечисления[Метаданные.Документы[ИмяДокумента].Реквизиты["ВидОперации"].Тип.ПривестиЗначение().Метаданные().Имя][Зн.Имя]);
КонецЦикла;
Вопрос: можно ли сделать это как-то иначе, чтобы было быстрее и красивее?
1 Cube
 
20.03.14
09:44
(0) Явно быстрее:

ИмяДокумента = "ПлатежноеПоручениеИсходящее";
Список = Новый СписокЗначений;
= Метаданные.Документы[ИмяДокумента].Реквизиты["ВидОперации"].Тип.ПривестиЗначение().Метаданные().Имя;
Для Каждого Зн Из Метаданные.Документы[ИмяДокумента].Реквизиты["ВидОперации"].Тип.ПривестиЗначение().Метаданные().ЗначенияПеречисления Цикл
    Список.Добавить(Перечисления[ВыбПеречисление][Зн.Имя]);
КонецЦикла;
2 butterbean
 
20.03.14
09:44
если тип перечисления нужно обязательно доставать из реквизита, то по другому никак
для красоты можешь метаданные перечисления в переменную пихнуть
3 Cube
 
20.03.14
09:46
+(1) Ой, очепятка. Исправляюсь:

ИмяДокумента = "ПлатежноеПоручениеИсходящее";
Список = Новый СписокЗначений;
ВыбПеречисление = Метаданные.Документы[ИмяДокумента].Реквизиты["ВидОперации"].Тип.ПривестиЗначение().Метаданные().Имя;
Для Каждого Зн Из Метаданные.Документы[ИмяДокумента].Реквизиты["ВидОперации"].Тип.ПривестиЗначение().Метаданные().ЗначенияПеречисления Цикл
    Список.Добавить(Перечисления[ВыбПеречисление][Зн.Имя]);
КонецЦикла;
4 Cube
 
20.03.14
09:47
Ещё вместо Перечисления[ВыбПеречисление][Зн.Имя] лучше использовать ПредопределенноеЗначение("Перечисление." + ВыбПеречисление + "." + Зн.Имя)
5 barrgand
 
20.03.14
09:47
(0) чем плох запрос?
6 butterbean
 
20.03.14
09:48
хотя можно и так:
Для Каждого Зн Из Перечисления[Метаданные.Документы[ИмяДокумента].Реквизиты["ВидОперации"].Тип.ПривестиЗначение().Метаданные().Имя] Цикл
    Список.Добавить(Зн);
КонецЦикла;
7 Cube
 
20.03.14
09:48
Ах, да, забыл совсем: можно же ещё заюзать XMLТипЗнч() или как там его...
8 xaozai
 
20.03.14
10:26
Всем спасибо!
Пока остановился на варианте (6).
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший