Показать сообщение отдельно
Старый 12.11.2008, 12:47   #5  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
Возможная избыточность цикла
Цитата:
Сообщение от 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));
    }
}
За это сообщение автора поблагодарили: jiller (1).