Вообще 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.