04.03.2008, 18:13 | #1 |
Участник
|
Ошибка времени выполнения
Есть такая ошибка:
"Ошибка времени выполнения. : Неправильные типы аргументов в операции присвоения значения переменной." Наверное каждый человек, программирующий на MorphX такое видел (я в принципе тоже встречал ). Но такого еще не было. Есть отчет, состоящий из двух частей: серверной (занимающийся выборкой данных) и клиентской (выгрузка в Excel). Збоит на клиентской части при передачи контейнера с данными от сервера, верне когда идет возврат значения из него (контейнер передается, правда при просмотре под отладчиком вылетает ). Подскажите, что может быть. Спасибо! |
|
05.03.2008, 13:05 | #2 |
Участник
|
Вообще-то, подобные сообщения об ошибках надо понимать буквально. Вот что написано, то и есть. Приведите пример кода передачи контейнера. Кстати, какая версия Axapta?
|
|
05.03.2008, 13:19 | #3 |
Участник
|
Цитата:
Сообщение от Didukh84
Есть такая ошибка:
"Ошибка времени выполнения. : Неправильные типы аргументов в операции присвоения значения переменной." Наверное каждый человек, программирующий на MorphX такое видел (я в принципе тоже встречал ). Но такого еще не было. Есть отчет, состоящий из двух частей: серверной (занимающийся выборкой данных) и клиентской (выгрузка в Excel). Збоит на клиентской части при передачи контейнера с данными от сервера, верне когда идет возврат значения из него (контейнер передается, правда при просмотре под отладчиком вылетает ). Подскажите, что может быть. Спасибо! Значение по умолчанию параметра типа EDT c array elements либо просто массива
__________________
Функциональное тестирование сайтов |
|
05.03.2008, 13:58 | #4 |
Участник
|
Версия Axapta 3.0 SP3. Ссылка не подходит в виду того, що из контейнера вытягивается значение типа NoYes. Самое интересное, что в методах, что работают после него все работает отлично!
Пример кода: FileName getFileName() { FileName ret; container con = salesReport_Enclosures.dlgParameters(); TransDate reportDate = conpeek(con, 11); str tmpStr; NoYes inclSales = conpeek(con, 16), inclExport = conpeek(con, 17), inclTHT = conpeek(con, 18); Dimension dimension = conpeek(con, 12); .... } Ошибка вылетает при инициализации reportDate уже. При работе отладчика видно что контейнер значение получил (размер стал равным 22). Но просмотреть их нельзя - выкидывает из Системы. Следующие методы, который выполняются за этим работают нормально. Кстати, тип возвращаемого значения аналогичных типу переменной (проверял). Да, кстати, класс объекта salesReport_Enclosures (NMF_SalesReport_EnclosureSalesAnalysis) является наследником абастрактного класса NMF_SalesReport_Enclosures extends RunBase и выполняется на сервере |
|
05.03.2008, 14:02 | #5 |
Участник
|
Ну проблему я решил (может кому пригодится!).
я в классах создал parm методы и работает вроде без ошибок. Правда хотелось бы знать в чем ошибка старого варианта.... |
|
05.03.2008, 14:03 | #6 |
Участник
|
А попробуйте перед каким-либо присовением из контейнера сделать
print con2str(con, ' --- '); pause; и посмотрите, что будет на 11 месте. Возможно там совсем не дата? |
|
05.03.2008, 15:38 | #7 |
Участник
|
Цитата:
А попробуйте перед каким-либо присовением из контейнера сделать
print con2str(con, ' --- '); pause; и посмотрите, что будет на 11 месте. Возможно там совсем не дата? X++: str StrTmp = ""; container con = connull(); ; //заполняем контейнер con = [strTmp, strTmp, 3, 4, strTmp, 5]; // выводим размер контейнера info(strfmt("Длина контейнера - %1", conLen(con))); info(con2str(con, "++_")); |
|
05.03.2008, 15:52 | #8 |
Участник
|
это баг con2str
AxPath://AOT/Classes/Global/con2Str?line=12&pos=13 X++: if (retStr)
retStr += sep; |
|
05.03.2008, 16:09 | #9 |
Участник
|
Цитата:
это баг con2str
AxPath://AOT/Classes/Global/con2Str?line=12&pos=13 Но тогда не понятно, почему у меня слетает функция conpeek()? У меня предположение, что когда происходит передача контейнера то выполняется его дефрагментация... |
|
05.03.2008, 16:16 | #10 |
Участник
|
Попробуй вместо con2str применить эту функцию:
X++: /// returns the string representation of given argument str toStr(AnyType _value) { Object o; int i; str ret; ; if(typeOf(_value)==Types::AnyType && !_value) return '<NoResult>'; if(typeOf(_value)==Types::Class) { o=_value; return strFmt('%1', o.toString()); } if(typeOf(_value)==Types::Container) { for(i=1;i<=conLen(_value);i++) { if(ret) ret+=", "; ret += this.toStr(conPeek(_value, i)); } return "["+ret+"]"; } if(typeOf(_value)==Types::String || typeOf(_value)==Types::VarString) { return strFmt("'%1'", _value); } return strFmt('%1', _value); } |
|
05.03.2008, 16:44 | #11 |
Участник
|
Если подозрение падает на один конкретный элемент контейнер, зачем же весь контейнер разворачивать. Этот один элемент и надо посмотреть
X++: print typeOf(conPeek(con,11)); print conPeek(con,11); pause; |
|
05.03.2008, 17:51 | #12 |
Участник
|
Человек тут написал:
Цитата:
Кстати, тип возвращаемого значения аналогичных типу переменной (проверял).
|
|
05.03.2008, 18:12 | #13 |
Участник
|
А вы не могли бы сделать такое:
X++: ContainerClass cc;
;
...
cc = new ContainerClass(con);
info(BinData::dataToString(cc.toBlob()));
__________________
Axapta v.3.0 sp5 kr2 |
|
05.03.2008, 18:28 | #14 |
Участник
|
Сделал. Результат мне правда ни о чем не говорит
0700000000000005000000000024080027c40000000000000000250800040000 000000000000000000036b0000036c00002008000b00d3c3ca5f303100000000 0000000004001df0007275000055414800040033c404011df004011df004001d f000473a5c4d79446f630004001df004001df0ff |
|
05.03.2008, 18:30 | #15 |
Участник
|
Цитата:
Человек тут написал:
Цитата: Кстати, тип возвращаемого значения аналогичных типу переменной (проверял). Поэтому предполагается, что такой код уже выполнялся |
|
05.03.2008, 18:36 | #16 |
Участник
|
а toStr( что возвращает?
|
|
05.03.2008, 18:49 | #17 |
Участник
|
Цитата:
а toStr( что возвращает?
Еще момент: в контейнере присутствуют массивы EDT. Возможно, что они не хранят каких-то значений (я смотрел ссылку приведенную вначале топика ), но я то к ним не обращаюсь!. И еще нюанс: Этот код выдает ошибку: X++: NoYes inclExport = conpeek(con, 17) X++: info(strfmt('№ елемента - %1, тип - %2', 17, typeOf(conPeek(con,17)))); info(strfmt('№ елемента - %1, значение - %2', 17, conpeek(con, 17))); |
|
05.03.2008, 18:53 | #18 |
Участник
|
Цитата:
а toStr( что возвращает?
|
|
05.03.2008, 22:42 | #19 |
Участник
|
У меня с этим контейнером работает без ошибок (если не обращаться к массивам)
Можно попробовать удалить их из контейнера X++: con = condel(con, 7, 1); con = condel(con, 7, 1); dimension = conpeek(con, 10); con = condel(con,10, 1); conview(con);
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 05.03.2008 в 22:46. |
|
06.03.2008, 09:11 | #20 |
Участник
|
Да, согласен, можно пробовать удалять (если знать порядок ). Спасибо всем за советы ,проблему решил через parm_ методы. Пока работает.
|
|