Цитата:
Сообщение от
lev
если речь идёт просто о том какие фин аналитики есть в системе, то можно вот так:
X++:
SysDictEnum dictEnum = new SysDictEnum(enumnum(SysDimension));
int i, cnt, iSearch;
;
cnt = dictEnum.lastValue();
for(i=dictEnum.firstValue(); iSearch <= cnt; i = dictEnum.nextValue(i))
{
iSearch++;
info(dictEnum.value2Label(i));
}
Приведенный алгоритм содержит потенциальный bug
Мастером финансовых аналитик (или просто в AOT) добавляем новый элемент со значением 101 (т.е. не последовательно 0,1,2,3,4,...) в enum SysDimension - в итоге цикл начинает отрабатывать 102 итерации т.к. сравнение идет iSearch <= 101 начиная с 0.
Если необходим список активных значений, то дополнительно можно проверить на предмет активности конфигурационного ключа на значении enum'а, что-то в таком духе:
X++:
static void jbDimensionListByEnum(Args _args)
{
DictEnum dictEnum = new DictEnum( enumNum( SysDimension ) ) ;
Counter enumIdx ;
#define.OnlyActive
;
for( enumIdx = 0; enumIdx < dictEnum.values(); enumIdx++ )
{
#if.OnlyActive
if( !isConfigurationKeyEnabled( dictEnum.index2ConfigurationKey( enumIdx ) ) )
continue ;
#endif
info( dictEnum.index2Label(enumIdx));
}
}