09.04.2007, 23:44 | #2 |
Участник
|
Раскопал этот старый тред и показалось любопытным - в чем проблема?
В результате разбора полетов выяснил вот что: Собственно, ошибка возникает на tmp = si.value(); Причем, причина не в anytype, а в том, как SetIterator возвращает значение. Любой enum, помимо самого значения, содержит так же тип, к которому он принадлежит. Так вот, SetIterator возвращает значение с типом 65237 (0xFED5). При присвоении енуму с определенным типом (в данном случае LedgerJournalACType) и происходит ошибка конвертации. Вариантов лечения этой проблемы несколько. Первый предложил Maxim Gorbunov - преобразовывать полученное значение в целое, а затем уже его присваивать енуму. Второй - использовать в Set'е целочисленное значение (Types::Integer). В этом случае перед вызовом Add() надо будет преобразовать сохраняемый енум в целое. При считывании преобразований делать не надо - конвертация произойдет автоматически Третий - использовать вместо SetIterator - SetEnumerator. Енумератор возвращает значение как целое и дополнительных преобразований делать не надо. Из всего этого следует вот что: внутри set'а не делается различия между разными типами енумов. Например, если в Set добавить ABC::B и ABCModel::Value (оба имеют одинаковое enumValue=2), то получить из него можно только это самое значение (2) - без привязки к типу. Причем, значение будет единственное Все это также относится и к Map'у. Единственное отличие - MapIterator.key() (а так же MapIterator.value()) возвращает целочисленное значение.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: KiselevSA (2). |