![]() |
#1 |
Участник
|
Anytype. Повторное присваивание
Пусть внутри метода объявлена переменная типа anytype,
и необходимо изменять ее значение несколько раз, в том числе в цикле. Проблема: новые значения эти могут быть разных типов (они берутся из полей внешнего источника данных ADO), но Axapta позволяет задать тип значения anytype -переменной только в момент инициализации, т.е. первого присваивания. При последующих присваиваниях Axapta неявно преобразует новое значение к тому типу, который был "закреплен" за переменной. Очень неохота изворачиваться и использовать контейнер или класс оболочку - в циклах будет теряться производительность. Подскажите, plz, стандартный способ, как сбросить "закрепленный" тип у переменной anytype ??? |
|
![]() |
#2 |
Участник
|
Честно создал Job:
{ anytype a; ; a = "5"; info(a); a= 5; info(int2str(a)); a= 5*23; info(int2str(a)); a = "5"; info(a); a = today(); info(date2str(a,123,2,2,2,2,2)); a = 2684.543; info(num2str(a,5,3,0,1)); } Вроде как работает... |
|
![]() |
#3 |
Участник
|
Я использовал контейнер в свое время
|
|
![]() |
#4 |
Участник
|
Ваша проблема заключается в том, что у Вас как слева так и справа от знака присваивания стоят пременные типа anytype.
Можно попробовать запихнуть значение поля в COMVariant. У класса CCADOField есть член field, в котором хранится COM-объект ADO::Field. Вызов field.value() возвратит значение в виде COMVariant. Как в дальнейшем обработать это значение - см. в методе value класса CCADOField. Чтобы получить COM-объект field у класса CCADOField можно создать свой метод, который бы возвращал объект field. |
|
![]() |
#5 |
Участник
|
2 hyphen:
Не-а, нечестно вы Job создали ![]() Попробуйте заменить первые 4 строки на: a= 5; info(int2str(a)); a = "ABCDEF"; info(a); тогда поймете в чем суть проблемы. |
|
![]() |
#6 |
Участник
|
PHP код:
|
|
|
За это сообщение автора поблагодарили: alex55 (1). |
![]() |
#7 |
Участник
|
Сбросить тип переменной anytype нельзя. Он определяется при первой инициализации переменной и сохраняется до ее кончины :-)
Поэтому я обычно создаю специальную функцию, в которой anytype инициализируется и обрабатывается. Типа: void showAnyType(anytype _y) { ; info(strfmt('%1', _y)); } showAnyType(12); showAnyType('sdgfsd'); |
|
![]() |
#8 |
Участник
|
всем спасибо, собственно так и пришлось сделать - написать класс оболочку.
2 belugin: Я написал, не зная еще про SysAnyType, свой класс -оболочку, в нем просто одна внутренняя переменная типа anytype и вроде все работает ... Вы случайно не знаете, зачем в классе SysAnyType нужен внутренний Map ? |
|
![]() |
#9 |
Участник
|
К сожалению, не знаю. Он вообще используется только в одном месте...
|
|
|
![]() |
||||
Тема | Ответов | |||
Передача переменного числа параметров в метод | 16 | |||
Anytype (Баг или Фича) | 3 | |||
Anytype и его опознание | 7 | |||
Повторное использование номеров кассовых ордеров | 2 | |||
Мистика: anytype в Map | 3 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|