Показать сообщение отдельно
Старый 29.07.2011, 10:54   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Вообще DictEnum когда-то показался мне несколько запутанным в терминах и методах конвертации. Нашёл у себя джобик, при помощи которого я разбирался who is who:
X++:
static void Job274_DictEnum(Args _args)
{
    DictEnum    e = new DictEnum(enumnum(LedgerTransType));
    // DictEnum    e = new DictEnum(enumName2Id('LedgerTransType'));
    int         i;

    int v2i(int _value)
    {
        int idx;
        for (idx=0;idx<e.values();idx++)
            if (e.index2Value(idx)==_value) return idx;
        return 255;
    }
    ;

    for (i=0; i<e.values(); i++)
    {
        info(strFmt('%1 | %2 | %3 | %4 | %5 | %6',
            i,
            e.index2Name(i), // for backwards compatibility only; use the index2label
            e.index2Label(i),
            configurationKeyId2Name(e.index2ConfigurationKey(i)),
            e.index2Symbol(i),
            e.index2Value(i)
            ));
    }
    info(strFmt('name2Value   = %1', e.name2Value  ( 'Перенос'  ))); // 1
    info(strFmt('symbol2Value = %1', e.symbol2Value( 'Transfer' ))); // 1

    info(strFmt('value2Label  = %1', e.value2Label ( 1 ))); // Перенос
    info(strFmt('value2Name   = %1', e.value2Name  ( 1 ))); // Перенос

    info(strFmt('value2Symbol = %1', e.value2Symbol( 1 ))); // Transfer

    info(strFmt('%1' , LedgerTransType::Transfer == 1)); // 1 (true)
    info(strFmt('value2Symbol = %1', e.value2Symbol( LedgerTransType::Transfer ))); // Transfer

    info(strFmt('VALUE 2 INDEX = %1', v2i( 79 ))); // 21 (т.е. 21 | Основные средства | Основные средства | RAsset | FixedAssets_RU | 79)
}
Т.е. получается, что если не прибегать к услугам функции strFmt, то для Eldar9x подошёл бы метод value2Symbol.

Последний раз редактировалось Gustav; 29.07.2011 в 11:01.